1 package com.example.area;
3 import androidx.annotation.NonNull;
4 import androidx.annotation.Nullable;
5 import androidx.appcompat.app.AlertDialog;
6 import androidx.appcompat.app.AppCompatActivity;
8 import android.content.Context;
9 import android.content.DialogInterface;
10 import android.content.Intent;
11 import android.os.Bundle;
12 import android.os.Handler;
13 import android.os.Message;
14 import android.text.Html;
15 import android.util.Log;
16 import android.view.LayoutInflater;
17 import android.view.View;
18 import android.view.ViewGroup;
19 import android.widget.AdapterView;
20 import android.widget.ArrayAdapter;
21 import android.widget.Button;
22 import android.widget.CheckedTextView;
23 import android.widget.ListView;
25 import java.util.ArrayList;
26 import java.util.ListIterator;
27 import java.util.Vector;
46 private static final String
TAG =
"_IHMGestionRencontre";
51 public static final String
TITRE_ACTIVITE =
"Liste des parties pour la rencontre : ";
54 private static final CharSequence[]
POSITIONS = {
"Gauche",
"Droite"};
78 protected void onCreate(Bundle savedInstanceState)
80 super.onCreate(savedInstanceState);
81 setContentView(R.layout.ihm_gestion_rencontre);
82 Log.d(TAG,
"onCreate()");
106 Log.d(TAG,
"onStart()");
116 Log.d(TAG,
"onResume()");
126 Log.d(TAG,
"onPause()");
136 Log.d(TAG,
"onStop()");
147 Log.d(TAG,
"onDestroy()");
155 this.handler =
new Handler(this.getMainLooper())
158 public void handleMessage(@NonNull Message message)
160 Log.d(TAG,
"[Handler] id du message = " + message.what);
161 Log.d(TAG,
"[Handler] contenu du message = " + message.obj.toString());
163 switch (message.what)
166 Log.d(TAG,
"[Handler] CREATION_SOCKET = " + message.obj.toString());
169 Log.d(TAG,
"[Handler] CONNEXION_SOCKET = " + message.obj.toString());
176 catch (InterruptedException e)
183 Log.d(TAG,
"[Handler] DECONNEXION_SOCKET = " + message.obj.toString());
186 Log.d(TAG,
"[Handler] RECEPTION_TRAME = " + message.obj.toString());
198 Log.d(TAG,
"initialiserLiaisonBluetooth()");
208 Log.d(TAG,
"envoyerPartiesAfficheur()");
209 Vector<Partie> parties = rencontre.
getParties();
211 for (
int i = 0; i < parties.size(); i++)
222 Log.d(TAG,
"recupererRessourcesIHM()");
223 boutonDemarrerPartie = findViewById(R.id.boutonDemarrerPartie);
225 listeParties = findViewById(R.id.listeParties);
234 Log.d(TAG,
"initialiserRessourcesIHM()");
235 boutonDemarrerPartie.setText(TEXTE_BOUTON_DEMARRER_PARTIE);
253 Log.d(TAG,
"connecterBoutons()");
254 boutonDemarrerPartie.setOnClickListener(
new View.OnClickListener()
256 public void onClick(View v)
258 Log.d(TAG,
"onClickBoutonDemarrerPartie()");
259 if(listeParties.getCheckedItemPosition() != AdapterView.INVALID_POSITION)
266 listeParties.setOnItemClickListener(
new AdapterView.OnItemClickListener()
269 public void onItemClick(AdapterView<?> parent, View view,
int position,
long id)
271 Log.d(TAG,
"onItemClickListeParties() position = " + position);
272 listeParties.setItemChecked(position,
true);
283 super.onActivityResult(requestCode, resultCode, data);
284 Log.d(TAG,
"onActivityResult() resultCode : " + resultCode);
287 if(requestCode == DEMARRAGE_PARTIE && resultCode == RESULT_OK)
289 Log.d(TAG,
"onActivityResult() IHMGestionPartie s'est terminée avec succès !");
294 Log.d(TAG,
"onActivityResult() position = " + listeParties.getCheckedItemPosition());
295 Log.d(TAG,
"onActivityResult() childCount = " + listeParties.getChildCount());
313 Log.d(TAG,
"demanderServeur()");
320 public void onClick(DialogInterface dialog,
int numeroJoueur)
322 Log.d(TAG,
"onClickDemanderServeur()");
326 if(numeroJoueur == 0)
328 Log.d(TAG,
"Serveur dans équipe A à la position : " + numeroJoueur +
" (" + joueursA.elementAt(numeroJoueur).getNom() +
")");
329 joueursA.elementAt(numeroJoueur).setEstServeur(
true);
335 Log.d(TAG,
"Serveur dans équipe B à la position : " + (numeroJoueur-1) +
" (" + joueursB.elementAt(numeroJoueur-1).getNom() +
")");
336 joueursB.elementAt(numeroJoueur-1).setEstServeur(
true);
344 Log.d(TAG,
"Serveur dans équipe A à la position : " + numeroJoueur +
" (" + joueursA.elementAt(numeroJoueur).getNom() +
")");
345 joueursA.elementAt(numeroJoueur).setEstServeur(
true);
350 Log.d(TAG,
"Serveur dans équipe B à la position : " + (numeroJoueur-2) +
" (" + joueursB.elementAt(numeroJoueur-2).getNom() +
")");
351 joueursB.elementAt(numeroJoueur-2).setEstServeur(
true);
357 Log.e(TAG,
"Le nombre de joueurs dans cette partie est invalide !");
372 Log.d(TAG,
"afficherChoixServeur()");
375 alertDialogDemanderServeur.show();
383 Log.d(TAG,
"demanderCote()");
396 public void onClick(DialogInterface dialog,
int numeroCote)
398 Log.d(TAG,
"onClickDemanderCote()");
414 Log.d(TAG,
"afficherChoixCote()");
417 alertDialogDemanderCote.show();
425 Log.d(TAG,
"recupererNomsJoueurs()");
426 int nbJoueurs = joueursA.size() + joueursB.size();
427 CharSequence nomJoueurs[] =
new CharSequence[nbJoueurs];
428 ListIterator<Joueur> it = joueursA.listIterator();
439 it = joueursB.listIterator();
456 Log.d(TAG,
"lancerPartie()");
458 intent.putExtra(ID_INTENT_LANCEMENT_PARTIE, partie);
459 intent.putExtra(ID_INTENT_POSITION_INVERSE, positionInverse);
460 Log.d(TAG,
"Lancement de l'activité IHMGestionPartie");
461 startActivityForResult(intent, DEMARRAGE_PARTIE);
469 Log.d(TAG,
"afficherParties()");
472 Vector<Partie> parties = rencontre.
getParties();
473 ListIterator<Partie> it = parties.listIterator();
474 ArrayList<String> arrayListParties =
new ArrayList<String>();
479 adapter =
new AdapterListe(
this, android.R.layout.simple_list_item_single_choice, arrayListParties);
486 adapter.desactiverItem(i);
490 adapter.setNotifyOnChange(
false);
491 listeParties.setAdapter(adapter);
499 Log.d(TAG,
"formaterPartie()");
500 String partieFormatee =
new String();
503 ListIterator<Joueur> it = joueursA.listIterator();
506 Log.d(TAG,
"formaterPartie() : nbJoueursA = " + Integer.toString(joueursA.size()));
507 Log.d(TAG,
"formaterPartie() : nbJoueursB = " + Integer.toString(joueursB.size()));
510 partieFormatee +=
"<b>";
520 partieFormatee +=
"</b>";
522 it = joueursB.listIterator();
523 partieFormatee +=
" VS ";
526 partieFormatee +=
"<b>";
535 partieFormatee +=
"</b>";
537 Log.d(TAG,
"formaterPartie() : Nb sets = " + Integer.toString(partie.
getManches().size()));
538 Log.d(TAG,
"formaterPartie() : " + partieFormatee);
540 return partieFormatee;
546 LayoutInflater inflater = null;
549 public AdapterListe(Context context,
int ressource, ArrayList<String> donnees)
551 super(context,ressource,donnees);
552 this.positionsDesactivees =
new Vector<>();
553 this.inflater = LayoutInflater.from(context);
554 this.ressource = ressource;
558 public View
getView(
int position, @Nullable View convertView, ViewGroup parent)
560 Log.d(TAG,
"getView()");
561 if (convertView == null)
563 convertView = inflater.inflate(ressource,parent,
false);
566 CheckedTextView textView = convertView.findViewById(android.R.id.text1);
567 textView.setText(Html.fromHtml(
this.getItem(position)));
568 if (positionsDesactivees.contains(position))
570 textView.setEnabled(
false);
571 textView.setClickable(
false);
572 textView.setOnClickListener(null);
576 textView.setEnabled(
true);
577 textView.setClickable(
true);
578 textView.setOnClickListener(
new View.OnClickListener()
581 public void onClick(View v)
583 listeParties.setItemChecked(position,
true);
593 Log.d(TAG,
"desactiverItem()");
594 if (!positionsDesactivees.contains(position))
595 positionsDesactivees.add(position);
void setParties(Vector< Partie > parties)
void onPause()
Méthode appelée après qu'une boîte de dialogue s'est affichée (on reprend sur un onResume()) ou avant...
void onResume()
Méthode appelée après onStart() ou après onPause()
ListView listeParties
La liste des parties.
static final int RECEPTION_TRAME
Equipe getEquipeA()
Accesseur de l'attribut equipeA.
View getView(int position, @Nullable View convertView, ViewGroup parent)
CharSequence [] recupererNomsJoueurs(Vector< Joueur > joueursA, Vector< Joueur > joueursB)
Récupère les noms des joueurs et de leur club dans un tableau de CharSequence.
void initialiserRessourcesIHM()
Initialise les ressources graphiques de l'activité
static final String ID_INTENT_LANCEMENT_RENCONTRE
Identifiant de l'Intent permettant de lancer l'activité IHMGestioNRencontre.
Vector< Joueur > getJoueursA()
Accesseur de l'attribut joueursA.
int getId()
Accesseur de l'attribut iD.
Les détails du protocole AREA.
void lancerPartie(Partie partie, boolean positionInverse)
Lance une partie.
static final int INDEX_EQUIPE_A
Index de l'équipe A dans le Vector Equipe.
static final String TAG
TAG pour les logs.
static final String NOM_MODULE_AFFICHEUR_AREA
nom du module AFFICHEUR
static final int CONNEXION_SOCKET
String getNom()
Accesseur de l'attribut nom.
static final CharSequence [] POSITIONS
Les deux positions possibles affichées dans la boite de dialogue permettant de choisir le côté du jou...
int getNbJoueurs()
Retourne le nombre de joueurs dans la partie.
L'activité de gestion d'une partie de l'application AREA.
void envoyer(String donnees)
Méthode pour envoyer des données.
void setJoueursB(Vector< Joueur > joueursB)
Mutateur de l'attribut joueursB.
Vector< Joueur > getJoueursB()
Accesseur de l'attribut joueursB.
AdapterListe(Context context, int ressource, ArrayList< String > donnees)
static final String ID_INTENT_POSITION_INVERSE
Identifiant de l'Intent permettant d'informer IHMGestionPartie de la position des joueurs...
String getPrenom()
Accesseur de l'attribut prenom.
static String fabriquerTrameAfficheur(int typeTrame, Partie partie)
Méthode permettant de fabiquer les trames à destination du module Afficheur.
static String fabriquerTrameAfficheurRencontre(Rencontre rencontre)
Méthode permettant de fabiquer les trames à destination du module Afficheur dédiée spécifiquement aux...
void desactiverItem(int position)
String formaterPartie(Partie partie)
Formate une partie sous forme de String en respectant la structure suivante : NOM_JOUEUR_A PrenomJoue...
Vector< Vector< Integer > > getManches()
static final int CREATION_SOCKET
void terminerPartie(int idPartie)
Permet d'effectuer une requete terminer une partie.
void onStart()
Méthode appelée au démarrage après le onCreate() ou un restart après un onStop()
void deconnecter()
Méthode pour fermer la connexion avec un appareil.
void connecter()
Méthode pour ouvrir la connexion avec un appareil.
void afficherChoixCote()
Affiche la boite de dialogue qui demande de quel cote se trouve le relanceur.
static final String ID_INTENT_LANCEMENT_PARTIE
Identifiant de l'Intent permettant de lancer l'activité IHMGestionPartie.
Vector< Joueur > getVainqueur()
Trouve le gagnant et le retourne, si il n'y en a pas retourne null.
void ajouterPointEquipe(int indexEquipe)
Ajoute un point à une équipe donnée.
AlertDialog.Builder alertDialogBuilderDemanderCote
L'objet servant à construire la boite de dialogue permettant le choix du côté du relanceur.
void onActivityResult(int requestCode, int resultCode, Intent data)
Traite le retour de l'activité IHMGestionPartie.
BaseDeDonnees baseDeDonnees
AlertDialog.Builder alertDialogBuilderDemanderServeur
L'objet servant à construire la boite de dialogue permettant le choix du premier serveur.
Vector< Integer > positionsDesactivees
LiaisonBluetooth liaisonModuleAfficheur
La liaison bluetooth avec le module afficheur.
void onStop()
Méthode appelée lorsque l'activité n'est plus visible.
void onCreate(Bundle savedInstanceState)
Méthode appelée à la création de l'activité
static final String TITRE_ALERT_DIALOG_DEMANDER_SERVEUR
Texte pour demander qui est le serveur.
Permet de gérer la communication bluetooth.
static final String TITRE_ACTIVITE
Texte affiché en haut de l'activité
Classe qui permet la gestion d'une rencontre entre deux équipes.
Classe permettant de manipuler la base de données.
final String getNomClub()
Accesseur de la l'attribut nomClub.
static final String ID_INTENT_FIN_PARTIE
Identifiant de l'Intent permettant recu de l'activité IHMGestionPartie.
AlertDialog alertDialogDemanderCote
La boite de dialogue permettant le choix du côté du relanceur.
void initialiserLiaisonBluetooth()
Initialise la liaison Bluetooth.
Rencontre rencontre
La rencontre gérée par l'activitée.
static final int POSITION_DEUXIEME_JOUEUR
Classe regroupant les informations d'un joueur.
void demanderServeur(Partie partie)
Demande à l'arbitre qui est le premier à servir.
static final int DECONNEXION_SOCKET
static final int INDEX_EQUIPE_B
Index de l'équipe B dans le Vector Equipe.
void onDestroy()
Méthode appelée à la destruction de l'application (après onStop() et détruite par le système Android)...
Classe permettant la gestion d'une partie.
static final int DEMARRAGE_PARTIE
Code pour le lancement de l'activité IHMGestionPartie.
void recupererRessourcesIHM()
Recupère les ressources graphiques de l'activité
static final String TEXTE_BOUTON_DEMARRER_PARTIE
Texte du bouton pour démarrer une partie.
void setJoueursA(Vector< Joueur > joueursA)
Mutateur de l'attribut joueursA.
void envoyerPartiesAfficheur()
Envoie toute les parties de la rencontre au module Afficheur.
Equipe getEquipeB()
Accesseur de l'attribut equipeB.
void afficherParties()
Affiche une liste de toutes les parties d'une rencontre.
AlertDialog alertDialogDemanderServeur
La boite de dialogue permettant le choix du premier serveur.
Handler handler
Le handler de l'activitée.
void connecterBoutons()
Définit le comportement des boutons.
void afficherChoixServeur()
Affiche la boite de dialogue qui demande qui doit servir en premier.
L'activité principale de l'application AREA.
Vector< Partie > getParties()
Accesseur de l'attribut parties.
L'activité permettant de gérer une rencontre.
Button boutonDemarrerPartie
Le bouton permettant de démarrer une partie.
void initialiserHandler()
Initialise le handler permettant le passage des Messages (trames reçues) entre les classes LiaisonBlu...
void demanderCote(Partie partie)
Demande de quel coté se trouve les joueurs d'une partie.
static final int TRAME_AFFICHEUR_INFO_PARTIE
code pour une trame afficheur d'information de partie
Vector< Partie > getParties(int idRencontre)
Permet d'effectuer une requete pour récupérer les parties d'une rencontre.