diff --git a/app/src/main/java/com/example/vdcscore/ui/clubs/ClubDetailFragment.java b/app/src/main/java/com/example/vdcscore/ui/clubs/ClubDetailFragment.java index 3d11c6d..6265b67 100644 --- a/app/src/main/java/com/example/vdcscore/ui/clubs/ClubDetailFragment.java +++ b/app/src/main/java/com/example/vdcscore/ui/clubs/ClubDetailFragment.java @@ -26,12 +26,14 @@ public class ClubDetailFragment extends Fragment { private FragmentClubDetailBinding binding; private DatabaseReference mDatabase; private String clubId; + private String escalao; @Override public void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); if (getArguments() != null) { clubId = getArguments().getString("clubId"); + escalao = getArguments().getString("escalao"); } } @@ -71,6 +73,7 @@ public class ClubDetailFragment extends Fragment { // Passar o 'clube_selecionado' também para a lista de jogadores se necessário, // ou passar o ID como antes se o fragmento de jogadores esperar ID bundle.putString("clubId", String.valueOf(clubeRecebido.getId())); + bundle.putString("escalao", escalao); // Se o ClubPlayersFragment esperar "clube_selecionado" tambem, poderiamos // passar: // bundle.putSerializable("clube_selecionado", clubeRecebido); diff --git a/app/src/main/java/com/example/vdcscore/ui/clubs/ClubPlayersFragment.java b/app/src/main/java/com/example/vdcscore/ui/clubs/ClubPlayersFragment.java index 7aa06fc..2ad22d6 100644 --- a/app/src/main/java/com/example/vdcscore/ui/clubs/ClubPlayersFragment.java +++ b/app/src/main/java/com/example/vdcscore/ui/clubs/ClubPlayersFragment.java @@ -28,12 +28,14 @@ public class ClubPlayersFragment extends Fragment { private FragmentClubPlayersBinding binding; private DatabaseReference mDatabase; private String clubId; + private String escalao; @Override public void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); if (getArguments() != null) { clubId = getArguments().getString("clubId"); + escalao = getArguments().getString("escalao"); } } @@ -52,13 +54,13 @@ public class ClubPlayersFragment extends Fragment { binding.recyclerPlayersList.setLayoutManager(new LinearLayoutManager(getContext())); binding.progressBarPlayers.setVisibility(View.VISIBLE); - if (clubId != null) { - mDatabase = FirebaseDatabase.getInstance().getReference().child("clubes").child(clubId); + if (clubId != null && escalao != null) { + mDatabase = FirebaseDatabase.getInstance().getReference().child("clubes").child(escalao).child(clubId); loadPlayers(); } else { binding.progressBarPlayers.setVisibility(View.GONE); binding.textNoPlayers.setVisibility(View.VISIBLE); - binding.textNoPlayers.setText("Erro: Clube não identificado."); + binding.textNoPlayers.setText("Erro: Clube ou escalão não identificado."); } } diff --git a/app/src/main/java/com/example/vdcscore/ui/clubs/ClubsFragment.java b/app/src/main/java/com/example/vdcscore/ui/clubs/ClubsFragment.java index 74eb124..06c83f3 100644 --- a/app/src/main/java/com/example/vdcscore/ui/clubs/ClubsFragment.java +++ b/app/src/main/java/com/example/vdcscore/ui/clubs/ClubsFragment.java @@ -30,23 +30,47 @@ public class ClubsFragment extends Fragment { private FragmentClubsBinding binding; private DatabaseReference mDatabase; + private ValueEventListener mValueEventListener; private static final String TAG = "ClubsFragment"; + private String currentEscalao = "seniores"; // Default selection public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { binding = FragmentClubsBinding.inflate(inflater, container, false); View root = binding.getRoot(); - mDatabase = FirebaseDatabase.getInstance().getReference().child("clubes"); // Changed to 'clubes' as per - // screenshot - RecyclerView recyclerView = binding.recyclerClubs; recyclerView.setLayoutManager(new LinearLayoutManager(getContext())); ProgressBar progressBar = binding.progressBar; - progressBar.setVisibility(View.VISIBLE); + // Set up toggle listener + binding.toggleGroupEscalao.addOnButtonCheckedListener((group, checkedId, isChecked) -> { + if (isChecked) { + if (checkedId == R.id.btnJuniores) { + currentEscalao = "juniores"; + } else if (checkedId == R.id.btnSeniores) { + currentEscalao = "seniores"; + } + loadClubsData(recyclerView, progressBar); + } + }); - mDatabase.addValueEventListener(new ValueEventListener() { + // Initial Data Load + loadClubsData(recyclerView, progressBar); + + return root; + } + + private void loadClubsData(RecyclerView recyclerView, ProgressBar progressBar) { + progressBar.setVisibility(View.VISIBLE); + mDatabase = FirebaseDatabase.getInstance().getReference().child("clubes").child(currentEscalao); + + // Remove previous listener to avoid duplicate data or leaks + if (mValueEventListener != null) { + mDatabase.removeEventListener(mValueEventListener); + } + + mValueEventListener = new ValueEventListener() { @Override public void onDataChange(@NonNull DataSnapshot snapshot) { List clubs = new ArrayList<>(); @@ -59,6 +83,7 @@ public class ClubsFragment extends Fragment { ClubAdapter adapter = new ClubAdapter(clubs, club -> { Bundle bundle = new Bundle(); bundle.putSerializable("clube_selecionado", club); + bundle.putString("escalao", currentEscalao); androidx.navigation.fragment.NavHostFragment.findNavController(ClubsFragment.this) .navigate(R.id.action_nav_clubs_to_nav_club_detail, bundle); }); @@ -77,16 +102,21 @@ public class ClubsFragment extends Fragment { if (getContext() != null) { Toast.makeText(getContext(), "Failed to load clubs.", Toast.LENGTH_SHORT).show(); } - binding.progressBar.setVisibility(View.GONE); + if (binding != null) { + binding.progressBar.setVisibility(View.GONE); + } } - }); + }; - return root; + mDatabase.addValueEventListener(mValueEventListener); } @Override public void onDestroyView() { super.onDestroyView(); + if (mDatabase != null && mValueEventListener != null) { + mDatabase.removeEventListener(mValueEventListener); + } binding = null; } } diff --git a/app/src/main/res/layout/fragment_clubs.xml b/app/src/main/res/layout/fragment_clubs.xml index a450155..07fa69a 100644 --- a/app/src/main/res/layout/fragment_clubs.xml +++ b/app/src/main/res/layout/fragment_clubs.xml @@ -5,15 +5,43 @@ android:layout_height="match_parent" android:background="@color/background_light"> + + + + + + + + + app:layout_constraintTop_toBottomOf="@id/toggleGroupEscalao" /> + @@ -70,6 +73,9 @@ + \ No newline at end of file diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 5c4dcc7..dbf3a0f 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -1,5 +1,5 @@ [versions] -agp = "8.13.1" +agp = "8.13.2" junit = "4.13.2" junitVersion = "1.3.0" espressoCore = "3.7.0" diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 1977e0c..40cfc25 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,4 +1,4 @@ -#Thu Jan 29 09:53:07 WET 2026 +#Wed Feb 25 12:48:32 WET 2026 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists distributionUrl=https\://services.gradle.org/distributions/gradle-8.13-bin.zip