Mobile-AREA  1.1
BTS SNIR LaSalle Avignon 2021
IHMGestionPartie.java
Aller à la documentation de ce fichier.
1 package com.example.area;
2 
3 import androidx.annotation.ColorRes;
4 import androidx.annotation.NonNull;
5 import androidx.appcompat.app.ActionBar;
6 import androidx.appcompat.app.AppCompatActivity;
7 import androidx.appcompat.widget.Toolbar;
8 
9 import android.app.AlertDialog;
10 import android.bluetooth.BluetoothAdapter;
11 import android.bluetooth.BluetoothDevice;
12 import android.content.DialogInterface;
13 import android.content.Intent;
14 import android.graphics.Color;
15 import android.os.Bundle;
16 import android.os.CountDownTimer;
17 import android.os.Handler;
18 import android.os.Message;
19 import android.util.Log;
20 import android.view.Gravity;
21 import android.view.LayoutInflater;
22 import android.view.Menu;
23 import android.view.MenuItem;
24 import android.view.View;
25 import android.widget.Button;
26 import android.widget.ImageView;
27 import android.widget.TextView;
28 import android.widget.Toast;
29 
30 import java.lang.reflect.Array;
31 import java.util.Set;
32 import java.util.Vector;
33 
34 // Pour Logcat : _IHMGestionRencontre|_IHMGestionPartie|_Partie|_LiaisonBluetooth|_ProtocoleAREA
35 
48 public class IHMGestionPartie extends AppCompatActivity
49 {
53  private static final String TAG = "_IHMGestionPartie";
54  private static final String TEXTE_BOUTON_TEMPS_MORT = "Temps mort";
55  private static final String TEXTE_BOUTON_RETIRER_POINT = "-1";
56  private static final String TEXTE_BOUTON_AJOUTER_POINT = "+1";
57  private static final String TEXTE_TOAST_NET = "NET";
58  private static final String TEXTE_CONNEXION_MODULE_NET = "Module NET ";
59  private static final String TEXTE_CONNEXION_MODULE_AFFICHEUR = "Module Afficheur ";
60  private static final String TEXTE_CONNEXION_MODULE_SCORE = "Module Score";
61  private static final String TEXTE_BOUTON_REPRENDRE = "Reprendre";
62  private static final String TEXTE_CHANGEMENT_COTE = "Changement de côté";
63  private static final String TEXTE_TEMPS_MORT = "Temps mort";
64 
65  private static final int INDEX_MODULE_AFFICHEUR = 0;
66  private static final int INDEX_MODULE_SCORE = 1;
67  public static final int DUREE_CHANGEMENT_COTE = 60000;
68  public static final int DUREE_TEMPS_MORT = 60000;
69 
73  private TextView nomJoueurA;
74  private TextView prenomJoueurA;
75  private TextView nomDeuxiemeJoueurA;
76  private TextView prenomDeuxiemeJoueurA;
77  private Button boutonRetirerPointJoueurA;
78  private Button boutonAjouterPointJoueurA;
79  private ImageView imageServeurJoueurA;
80  private ImageView imageServeurDeuxiemeJoueurA;
81  private Button boutonTempsMortJoueurA;
82  private TextView pointsJoueurA;
83  private TextView manchesJoueurA;
84  private TextView tiret;
85  private TextView nomJoueurB;
86  private TextView prenomJoueurB;
87  private TextView nomDeuxiemeJoueurB;
88  private TextView prenomDeuxiemeJoueurB;
89  private Button boutonRetirerPointJoueurB;
90  private Button boutonAjouterPointJoueurB;
91  private ImageView imageServeurJoueurB;
92  private ImageView imageServeurDeuxiemeJoueurB;
93  private Button boutonTempsMortJoueurB;
94  private TextView pointsJoueurB;
95  private TextView manchesJoueurB;
96  private Toast toastNet;
97  private View layoutNet;
98  private TextView net;
99  private TextView connexionModuleNet;
100  private ImageView imageConnexionModuleNet;
101  private TextView connexionModuleAfficheur;
102  private ImageView imageConnexionModuleAfficheur;
103  private TextView connexionModuleScore;
104  private ImageView imageConnexionModuleScore;
105  private TextView timer;
106  private TextView messageTimer;
107  private Button boutonInterruptionTimer;
108 
112  private LiaisonBluetooth liaisonModuleNet = null;//<! Liaison bluetooth avec le module NET
113  private Vector<LiaisonBluetooth> modulesAffichage = null;
114  private Handler handler = null;//<! Le handler utilisé par l'activité
115  private Partie partie = null;//<! La partie que gère l'activité
116  private CountDownTimer decompte = null;
117  int nbManchesAAfficher = 0;
118  BaseDeDonnees baseDeDonnees = null;
119 
123  @Override
124  protected void onCreate(Bundle savedInstanceState)
125  {
126  super.onCreate(savedInstanceState);
127  setContentView(R.layout.ihm_gestion_partie);
128  Log.d(TAG, "onCreate()");
129 
130  partie = (Partie) getIntent().getSerializableExtra(IHMGestionRencontre.ID_INTENT_LANCEMENT_PARTIE);
131 
132  baseDeDonnees = new BaseDeDonnees(this);
133  baseDeDonnees.commencerSet(partie);
134 
136 
138 
140 
142 
144  }
145 
149  @Override
150  protected void onStart()
151  {
152  super.onStart();
153  Log.d(TAG, "onStart()");
154  }
155 
159  @Override
160  protected void onResume()
161  {
162  super.onResume();
163  Log.d(TAG, "onResume()");
164  }
165 
169  @Override
170  protected void onPause()
171  {
172  super.onPause();
173  Log.d(TAG, "onPause()");
174  }
175 
179  @Override
180  protected void onStop()
181  {
182  super.onStop();
183  Log.d(TAG, "onStop()");
185  }
186 
190  @Override
191  protected void onDestroy()
192  {
193  super.onDestroy();
194  Log.d(TAG, "onDestroy()");
195  }
196 
200  private void deconnecterModules()
201  {
202  liaisonModuleNet.deconnecter();
203  for(int i = 0; i < modulesAffichage.size(); i++)
204  {
205  modulesAffichage.elementAt(i).deconnecter();
206  }
207  }
208 
212  private void recupererRessourcesIHM()
213  {
215 
216  tiret = findViewById(R.id.tiret);
217 
219 
220  LayoutInflater layoutInflater = getLayoutInflater();
221  layoutNet = layoutInflater.inflate(R.layout.toast_net,findViewById(R.id.layout_toast_net));
222  net = layoutNet.findViewById(R.id.texte_net);
223  toastNet = new Toast(getApplicationContext());
224 
225  imageConnexionModuleNet = findViewById(R.id.imageConnexionModuleNet);
226  connexionModuleNet = findViewById(R.id.connexionModuleNet);
227 
228  imageConnexionModuleAfficheur = findViewById(R.id.imageConnexionModuleAfficheur);
229  connexionModuleAfficheur = findViewById(R.id.connexionModuleAfficheur);
230 
231  imageConnexionModuleScore = findViewById(R.id.imageConnexionModuleScore);
232  connexionModuleScore = findViewById(R.id.connexionModuleScore);
233 
234  timer = findViewById(R.id.timer);
235  messageTimer = findViewById(R.id.messageTimer);
236  boutonInterruptionTimer = findViewById(R.id.boutonInterruptionTimer);
237 
238  if ((boolean)getIntent().getSerializableExtra(IHMGestionRencontre.ID_INTENT_POSITION_INVERSE))
239  permuterCoteIHM();
240  }
241 
246  {
247  nomJoueurB = findViewById(R.id.nomJoueurB);
248  prenomJoueurB = findViewById(R.id.prenomJoueurB);
249  nomDeuxiemeJoueurB = findViewById(R.id.nomDeuxiemeJoueurB);
250  prenomDeuxiemeJoueurB = findViewById(R.id.prenomDeuxiemeJoueurB);
251  boutonRetirerPointJoueurB = findViewById(R.id.boutonRetirerPointJoueurB);
252  boutonAjouterPointJoueurB = findViewById(R.id.boutonAjouterPointJoueurB);
253  imageServeurJoueurB = findViewById(R.id.imageServeurJoueurB);
254  imageServeurDeuxiemeJoueurB = findViewById(R.id.imageServeurDeuxiemeJoueurB);
255  boutonTempsMortJoueurB = findViewById(R.id.boutonTempsMortJoueurB);
256  pointsJoueurB = findViewById(R.id.pointsJoueurB);
257  manchesJoueurB = findViewById(R.id.manchesJoueurB);
258  }
259 
264  {
265  nomJoueurA = findViewById(R.id.nomJoueurA);
266  prenomJoueurA = findViewById(R.id.prenomJoueurA);
267  nomDeuxiemeJoueurA = findViewById(R.id.nomDeuxiemeJoueurA);
268  prenomDeuxiemeJoueurA = findViewById(R.id.prenomDeuxiemeJoueurA);
269  boutonRetirerPointJoueurA = findViewById(R.id.boutonRetirerPointJoueurA);
270  boutonAjouterPointJoueurA = findViewById(R.id.boutonAjouterPointJoueurA);
271  imageServeurJoueurA = findViewById(R.id.imageServeurJoueurA);
272  imageServeurDeuxiemeJoueurA = findViewById(R.id.imageServeurDeuxiemeJoueurA);
273  boutonTempsMortJoueurA = findViewById(R.id.boutonTempsMortJoueurA);
274  pointsJoueurA = findViewById(R.id.pointsJoueurA);
275  manchesJoueurA = findViewById(R.id.manchesJoueurA);
276  }
277 
281  private void permuterCoteIHM()
282  {
283  Log.d(TAG,"Changement de côté");
284  if (nomJoueurA.getId() == R.id.nomJoueurA)
285  {
286  nomJoueurA = findViewById(R.id.nomJoueurB);
287  prenomJoueurA = findViewById(R.id.prenomJoueurB);
288  nomDeuxiemeJoueurA = findViewById(R.id.nomDeuxiemeJoueurB);
289  prenomDeuxiemeJoueurA = findViewById(R.id.prenomDeuxiemeJoueurB);
290  boutonRetirerPointJoueurA = findViewById(R.id.boutonRetirerPointJoueurB);
291  boutonAjouterPointJoueurA = findViewById(R.id.boutonAjouterPointJoueurB);
292  imageServeurJoueurA = findViewById(R.id.imageServeurJoueurB);
293  imageServeurDeuxiemeJoueurA = findViewById(R.id.imageServeurDeuxiemeJoueurB);
294  boutonTempsMortJoueurA = findViewById(R.id.boutonTempsMortJoueurB);
295  pointsJoueurA = findViewById(R.id.pointsJoueurB);
296  manchesJoueurA = findViewById(R.id.manchesJoueurB);
297 
298  nomJoueurB = findViewById(R.id.nomJoueurA);
299  prenomJoueurB = findViewById(R.id.prenomJoueurA);
300  nomDeuxiemeJoueurB = findViewById(R.id.nomDeuxiemeJoueurA);
301  prenomDeuxiemeJoueurB = findViewById(R.id.prenomDeuxiemeJoueurA);
302  boutonRetirerPointJoueurB = findViewById(R.id.boutonRetirerPointJoueurA);
303  boutonAjouterPointJoueurB = findViewById(R.id.boutonAjouterPointJoueurA);
304  imageServeurJoueurB = findViewById(R.id.imageServeurJoueurA);
305  imageServeurDeuxiemeJoueurB = findViewById(R.id.imageServeurDeuxiemeJoueurA);
306  boutonTempsMortJoueurB = findViewById(R.id.boutonTempsMortJoueurA);
307  pointsJoueurB = findViewById(R.id.pointsJoueurA);
308  manchesJoueurB = findViewById(R.id.manchesJoueurA);
309 
310  modulesAffichage.elementAt(INDEX_MODULE_SCORE).envoyer(ProtocolAREA.fabriquerTramePosition(true));
311  }
312  else
313  {
316  modulesAffichage.elementAt(INDEX_MODULE_SCORE).envoyer(ProtocolAREA.fabriquerTramePosition(false));
317  }
318 
321 
322  afficherScore();
323  afficherServeur();
326  }
327 
332  {
335 
336  afficherScore();
337  afficherServeur();
338 
341 
342  afficherNet();
343 
345  }
346 
347  private void initialiserPositions()
348  {
349  if ((boolean)getIntent().getSerializableExtra(IHMGestionRencontre.ID_INTENT_POSITION_INVERSE))
350  modulesAffichage.elementAt(INDEX_MODULE_SCORE).envoyer(ProtocolAREA.fabriquerTramePosition(true));
351  else
352  modulesAffichage.elementAt(INDEX_MODULE_SCORE).envoyer(ProtocolAREA.fabriquerTramePosition(false));
353  }
354 
359  {
360  imageConnexionModuleNet.setColorFilter(Color.RED);
361  connexionModuleNet.setText(TEXTE_CONNEXION_MODULE_NET);
362  imageConnexionModuleAfficheur.setColorFilter(Color.RED);
363  connexionModuleAfficheur.setText(TEXTE_CONNEXION_MODULE_AFFICHEUR);
364  imageConnexionModuleScore.setColorFilter(Color.RED);
365  connexionModuleScore.setText(TEXTE_CONNEXION_MODULE_SCORE);
366  }
367 
371  private void afficherNet()
372  {
373  tiret.setText("-");
374  net.setText(TEXTE_TOAST_NET);
375  toastNet.setDuration(Toast.LENGTH_LONG);
376  toastNet.setGravity(Gravity.TOP, 0, 150);
377  toastNet.setView(layoutNet);
378  }
379 
383  private void afficherBoutonsEquipeA()
384  {
385  boutonAjouterPointJoueurA.setText(TEXTE_BOUTON_AJOUTER_POINT);
386  boutonRetirerPointJoueurA.setText(TEXTE_BOUTON_RETIRER_POINT);
387  boutonTempsMortJoueurA.setText(TEXTE_BOUTON_TEMPS_MORT);
388  }
389 
393  private void afficherBoutonsEquipeB()
394  {
395  boutonAjouterPointJoueurB.setText(TEXTE_BOUTON_AJOUTER_POINT);
396  boutonRetirerPointJoueurB.setText(TEXTE_BOUTON_RETIRER_POINT);
397  boutonTempsMortJoueurB.setText(TEXTE_BOUTON_TEMPS_MORT);
398  }
399 
403  private void initialiserHandler()
404  {
405  this.handler = new Handler(this.getMainLooper())
406  {
407  @Override
408  public void handleMessage(@NonNull Message message)
409  {
410  Log.d(TAG, "[Handler] id du message = " + message.what);
411  Log.d(TAG, "[Handler] contenu du message = " + message.obj.toString());
412 
413  switch (message.what)
414  {
416  Log.d(TAG, "[Handler] CREATION_SOCKET = " + message.obj.toString());
417  break;
419  Log.d(TAG, "[Handler] CONNEXION_SOCKET = " + message.obj.toString());
420  afficherEtatConnexionBluetooth(message.obj.toString(),true);
421  if (message.obj.toString().equals(modulesAffichage.elementAt(INDEX_MODULE_AFFICHEUR).getNomModule()))
422  modulesAffichage.elementAt(INDEX_MODULE_AFFICHEUR).envoyer(ProtocolAREA.fabriquerTrameAfficheur(ProtocolAREA.TRAME_AFFICHEUR_ETAT_PARTIE, partie));
423  if (message.obj.toString().equals(modulesAffichage.elementAt(INDEX_MODULE_SCORE).getNomModule()))
424  {
425  modulesAffichage.elementAt(INDEX_MODULE_SCORE).envoyer(ProtocolAREA.fabriquerTrameAfficheur(ProtocolAREA.TRAME_AFFICHEUR_ETAT_PARTIE, partie));
426  if (partie.getManches().size() == 0)
428  }
429  break;
431  Log.d(TAG, "[Handler] DECONNEXION_SOCKET = " + message.obj.toString());
432  afficherEtatConnexionBluetooth(message.obj.toString(),false);
433  break;
435  if(ProtocolAREA.verifierTrameNet(message.obj.toString()))
436  {
437  toastNet.show();
439  }
440  break;
441  }
442  }
443  };
444  }
445 
449  private void envoyerTramesScore()
450  {
451  for(int i = 0; i < modulesAffichage.size(); i++)
452  {
453  modulesAffichage.elementAt(i).envoyer(ProtocolAREA.fabriquerTrameAfficheur(ProtocolAREA.TRAME_AFFICHEUR_SCORE, partie));
454  }
455  }
456 
460  private void envoyerTramesNet()
461  {
462  for(int i = 0; i < modulesAffichage.size(); i++)
463  {
464  modulesAffichage.elementAt(i).envoyer(ProtocolAREA.fabriquerTrameAfficheur(ProtocolAREA.TRAME_AFFICHEUR_NET, partie));
465  }
466  }
467 
471  private void envoyerTramesEtatPartie()
472  {
473  for(int i = 0; i < modulesAffichage.size(); i++)
474  {
475  modulesAffichage.elementAt(i).envoyer(ProtocolAREA.fabriquerTrameAfficheur(ProtocolAREA.TRAME_AFFICHEUR_ETAT_PARTIE, partie));
476  }
477  }
478 
480  {
481  for(int i = 0; i < modulesAffichage.size(); i++)
482  {
483  modulesAffichage.elementAt(i).envoyer(ProtocolAREA.fabriquerTrameScoreAfficheurDernierPoint(partie));
484  }
485  }
486 
491  {
495  liaisonModuleNet = new LiaisonBluetooth(ProtocolAREA.NOM_MODULE_NET, handler);
496  liaisonModuleNet.connecter();
497 
498  modulesAffichage = new Vector<LiaisonBluetooth>();
499 
500  modulesAffichage.add(new LiaisonBluetooth(ProtocolAREA.NOM_MODULE_AFFICHEUR_AREA, handler));
501  modulesAffichage.add(new LiaisonBluetooth(ProtocolAREA.NOM_MODULE_SCORE_AREA, handler));
502 
503  for (int i = 0; i < modulesAffichage.size(); i++)
504  {
505  modulesAffichage.elementAt(i).connecter();
506  }
507 
508  }
509 
513  private void connecterBoutons()
514  {
515  boutonAjouterPointJoueurA.setOnClickListener(new View.OnClickListener()
516  {
517  public void onClick(View v) { ajouterPointJoueurA(); }
518  });
519 
520  boutonAjouterPointJoueurB.setOnClickListener(new View.OnClickListener()
521  {
522  public void onClick(View v) { ajouterPointJoueurB(); }
523  });
524 
525  boutonRetirerPointJoueurA.setOnClickListener(new View.OnClickListener()
526  {
527  public void onClick(View v) { retirerPointJoueurA(); }
528  });
529 
530  boutonRetirerPointJoueurB.setOnClickListener(new View.OnClickListener()
531  {
532  public void onClick(View v) { retirerPointJoueurB(); }
533  });
534 
535  boutonInterruptionTimer.setOnClickListener(new View.OnClickListener()
536  {
537  public void onClick(View v)
538  {
539  decompte.cancel();
540  if (messageTimer.getText().equals(TEXTE_CHANGEMENT_COTE))
541  {
542  permuterCoteIHM();
544  }
545  cacherDecompte();
546  afficherScore();
549  }
550  });
551 
552  boutonTempsMortJoueurA.setOnClickListener(new View.OnClickListener()
553  {
554  public void onClick(View v)
555  {
556  if (partie.getTempsMortsJoueursA() > 0)
557  {
558  demarrerDecompte(DUREE_TEMPS_MORT, TEXTE_TEMPS_MORT, TEXTE_BOUTON_REPRENDRE);
559  partie.setTempsMortsJoueursA(0);
560  boutonTempsMortJoueurA.setEnabled(false);
561  }
562  }
563  });
564 
565  boutonTempsMortJoueurB.setOnClickListener(new View.OnClickListener()
566  {
567  public void onClick(View v)
568  {
569  if (partie.getTempsMortsJoueursB() > 0)
570  {
571  demarrerDecompte(DUREE_TEMPS_MORT, TEXTE_TEMPS_MORT, TEXTE_BOUTON_REPRENDRE);
572  partie.setTempsMortsJoueursB(0);
573  boutonTempsMortJoueurB.setEnabled(false);
574  }
575  }
576  });
577  }
578 
582  private void retirerPointJoueurB()
583  {
584  Log.d(TAG,"retirerPointJoueurB");
585  partie.retirerPointJoueursB();
587 
588  }
589 
593  private void retirerPointJoueurA()
594  {
595  Log.d(TAG,"retirerPointJoueurA");
596  partie.retirerPointJoueursA();
598 
599  }
600 
605  {
607  afficherScore();
608  afficherServeur();
609  liaisonModuleNet.envoyer(ProtocolAREA.TRAME_SERVICE);
610  }
611 
615  private void ajouterPointJoueurB()
616  {
617  Log.d(TAG,"ajouterPointJoueurB");
618  partie.ajouterPointJoueursB();
620  }
621 
625  private void ajouterPointJoueurA()
626  {
627  Log.d(TAG,"ajouterPointJoueurA");
628  partie.ajouterPointJoueursA();
630  }
631 
636  {
637  int nbManchesAffichees = 0;
638  if (!manchesJoueurA.getText().toString().equals(""))
639  nbManchesAffichees = Integer.parseInt(manchesJoueurA.getText().toString()) + Integer.parseInt(manchesJoueurB.getText().toString());
640  if (nbManchesAffichees == partie.getManches().size())
642  afficherScore();
643  afficherServeur();
644  liaisonModuleNet.envoyer(ProtocolAREA.TRAME_SERVICE);
645  if (partie.estFinie())
646  finish();
647  }
648 
652  private void afficherNomsJoueursA()
653  {
654  Vector<Joueur> joueursA = partie.getJoueursA();
655 
656  nomJoueurA.setText(joueursA.elementAt(0).getNom() + " ");
657  prenomJoueurA.setText(joueursA.elementAt(0).getPrenom());
658 
659  if(joueursA.size() > 1)
660  {
661  nomDeuxiemeJoueurA.setText(joueursA.elementAt(1).getNom() + " ");
662  prenomDeuxiemeJoueurA.setText(joueursA.elementAt(1).getPrenom());
663  }
664  }
665 
669  private void afficherNomsJoueursB()
670  {
671  Vector<Joueur> joueursB = partie.getJoueursB();
672 
673  nomJoueurB.setText(joueursB.elementAt(0).getNom() + " ");
674  prenomJoueurB.setText(joueursB.elementAt(0).getPrenom());
675 
676  if(joueursB.size() > 1)
677  {
678  nomDeuxiemeJoueurB.setText(joueursB.elementAt(1).getNom() + " ");
679  prenomDeuxiemeJoueurB.setText(joueursB.elementAt(1).getPrenom());
680  }
681  }
682 
686  private void afficherScore()
687  {
688  Log.d(TAG,"afficherScore()");
689  String texteManchesJoueurA = manchesJoueurA.getText().toString();
690  String texteManchesJoueurB = manchesJoueurB.getText().toString();
691  int nbManchesAffichees = 0;
692  if (!manchesJoueurA.getText().toString().equals(""))
693  nbManchesAffichees = Integer.parseInt(manchesJoueurA.getText().toString()) + Integer.parseInt(manchesJoueurB.getText().toString());
694 
695  pointsJoueurA.setText(Integer.toString(partie.getPointsJoueursA()));
696  manchesJoueurA.setText(Integer.toString(partie.getManchesJoueursA()));
697 
698  pointsJoueurB.setText(Integer.toString(partie.getPointsJoueursB()));
699  manchesJoueurB.setText(Integer.toString(partie.getManchesJoueursB()));
700 
701  if (nbManchesAAfficher != partie.getManches().size())
702  {
703  pointsJoueurA.setText(partie.getManches().lastElement().elementAt(0).toString());
704  pointsJoueurB.setText(partie.getManches().lastElement().elementAt(1).toString());
705  manchesJoueurA.setText(texteManchesJoueurA);
706  manchesJoueurB.setText(texteManchesJoueurB);
707 
708  baseDeDonnees.terminerSet(partie);
709  if (!partie.estFinie())
710  baseDeDonnees.commencerSet(partie);
711 
713  demarrerDecompte(DUREE_CHANGEMENT_COTE,TEXTE_CHANGEMENT_COTE,TEXTE_BOUTON_REPRENDRE);
714 
715  nbManchesAAfficher++;
716  }
717 
718  }
719 
726  private void demarrerDecompte(long duree,String message, String texteBoutonInterruption)
727  {
728  messageTimer.setText(message);
729  boutonInterruptionTimer.setText(texteBoutonInterruption);
730  boutonInterruptionTimer.setVisibility(Button.VISIBLE);
732  decompte = new CountDownTimer(duree, 1000)
733  {
734 
735  public void onTick(long millisUntilFinished) {
736  timer.setText(Long.toString(millisUntilFinished / 1000));
737  }
738 
739  public void onFinish() {
740  cacherDecompte();
741  afficherScore();
745  if (message.equals(TEXTE_CHANGEMENT_COTE))
746  permuterCoteIHM();
747  }
748  }.start();
749  }
750 
754  private void cacherDecompte()
755  {
756  timer.setText("");
757  messageTimer.setText("");
758  boutonInterruptionTimer.setText("");
759  boutonInterruptionTimer.setVisibility(Button.INVISIBLE);
760  }
761 
765  private void afficherServeur()
766  {
767  Joueur serveur = partie.getServeur();
768  Vector<Joueur> joueursA = partie.getJoueursA();
769  int indexServeur = joueursA.indexOf(serveur);
770  String nomCompletServeur = serveur.getNom() + " " + serveur.getPrenom();
771 
773 
774  if(indexServeur != -1)
775  {
776  if (nomCompletServeur.equals((String)nomJoueurA.getText()+prenomJoueurA.getText()))
777  imageServeurJoueurA.setVisibility(View.VISIBLE);
778  else
779  imageServeurDeuxiemeJoueurA.setVisibility(View.VISIBLE);
780  }
781  else
782  {
783  if (nomCompletServeur.equals((String)nomJoueurB.getText()+prenomJoueurB.getText()))
784  imageServeurJoueurB.setVisibility(View.VISIBLE);
785  else
786  imageServeurDeuxiemeJoueurB.setVisibility(View.VISIBLE);
787  }
788  }
789 
794  {
795  imageServeurJoueurA.setVisibility(View.INVISIBLE);
796  imageServeurDeuxiemeJoueurA.setVisibility(View.INVISIBLE);
797  imageServeurJoueurB.setVisibility(View.INVISIBLE);
798  imageServeurDeuxiemeJoueurB.setVisibility(View.INVISIBLE);
799  }
800 
806  private void afficherEtatConnexionBluetooth(String nomModule, boolean estConnecte)
807  {
808  if (nomModule.startsWith(ProtocolAREA.NOM_MODULE_NET))
809  {
810  changerEtatConnexionBluetooth(imageConnexionModuleNet,estConnecte);
811  }
812  else
813  {
814  if(nomModule.startsWith(ProtocolAREA.NOM_MODULE_AFFICHEUR_AREA))
815  changerEtatConnexionBluetooth(imageConnexionModuleAfficheur,estConnecte);
816  else
817  changerEtatConnexionBluetooth(imageConnexionModuleScore,estConnecte);
818  }
819  }
820 
826  private void changerEtatConnexionBluetooth(ImageView imageConnexionModule,boolean estConnecte)
827  {
828  imageConnexionModule.setColorFilter(Color.RED);
829  if (estConnecte)
830  imageConnexionModule.setColorFilter(Color.GREEN);
831  }
832 
836  private void inverserEtatBoutons()
837  {
838  boolean etatBouton = true;
839  if (boutonAjouterPointJoueurA.isEnabled())
840  etatBouton = false;
841  boutonAjouterPointJoueurA.setEnabled(etatBouton);
842  boutonAjouterPointJoueurB.setEnabled(etatBouton);
843  boutonRetirerPointJoueurA.setEnabled(etatBouton);
844  boutonRetirerPointJoueurB.setEnabled(etatBouton);
845  boutonTempsMortJoueurA.setEnabled(etatBouton);
846  boutonTempsMortJoueurB.setEnabled(etatBouton);
847  }
848 
850  {
851  if (partie.getTempsMortsJoueursA() > 0)
852  boutonTempsMortJoueurA.setEnabled(true);
853  else
854  boutonTempsMortJoueurA.setEnabled(false);
855 
856  if (partie.getTempsMortsJoueursB() > 0)
857  boutonTempsMortJoueurB.setEnabled(true);
858  else
859  boutonTempsMortJoueurB.setEnabled(false);
860  }
861 
865  @Override
866  public void finish()
867  {
868  Log.d(TAG, "finish()");
869  if (partie.estFinie())
870  {
873  }
874  final Intent intent = new Intent(IHMGestionPartie.this,IHMGestionRencontre.class);
875  intent.putExtra(IHMGestionRencontre.ID_INTENT_FIN_PARTIE,partie);
876  setResult(RESULT_OK, intent);
877  super.finish();
878  }
879 }
void afficherScore()
Affiche les points et les manches gagnées des joueurs de la partie.
void onResume()
Méthode appelée après onStart() ou après onPause()
void changerEtatConnexionBluetooth(ImageView imageConnexionModule, boolean estConnecte)
Affiche une image rouge ou verte en fonction du booleen passé en paramètre.
void onPause()
Méthode appelée après qu&#39;une boîte de dialogue s&#39;est affichée (on reprend sur un onResume()) ou avant...
void setTempsMortsJoueursA(int tempsMortsJoueursA)
Mutateur de l&#39;attribut tempsMortsJoueursA.
Definition: Partie.java:442
void cacherDecompte()
Cache tout les affichages lié au décompte.
static final String TEXTE_CHANGEMENT_COTE
void envoyerTramesEtatPartie()
Envoie une trame étatPartie à tout les modules d&#39;affichage connectés.
TextView prenomDeuxiemeJoueurA
!< L&#39;affichage du nom du deuxième joueur de l&#39;équipe A
Toast toastNet
Le toast apparaissant lors d&#39;un NET.
static final String TEXTE_TOAST_NET
Le texte apparissant dans le toast affichant un NET.
Button boutonAjouterPointJoueurA
Le bouton permettant d&#39;ajouter un point au(x) joueur(s) A.
Button boutonTempsMortJoueurB
Le bouton permettant de déclencher un temps mort pour le(s) joueur(s) A.
ImageView imageServeurDeuxiemeJoueurB
Icone signifiant que le deuxième joueur de l&#39;équipe A doit servir.
int getManchesJoueursB()
Accesseur de l&#39;attribut manchesJoueursB.
Definition: Partie.java:119
void initialiserLiaisonBluetooth()
Initialise la liaison Bluetooth.
Vector< Joueur > getJoueursA()
Accesseur de l&#39;attribut joueursA.
Definition: Partie.java:79
TextView connexionModuleNet
Le texte devant l&#39;image permettant d&#39;indiquer l&#39;état de la connexion au module NET.
static final int TRAME_AFFICHEUR_SCORE
code pour une trame afficheur de score
Les détails du protocole AREA.
void retirerPointJoueurB()
Méthode appelée pour retirer un point au joueur B.
void initialiserRessourcesIHM()
Initialise les ressources graphiques de l&#39;activité
void ajouterPointJoueursB()
Méthode permettant d&#39;incrémenter le score des joueursB.
Definition: Partie.java:176
ImageView imageServeurJoueurA
Icone signifiant que le premier joueur de l&#39;équipe A doit servir.
void afficherEtatConnexionBluetooth(String nomModule, boolean estConnecte)
Affiche l&#39;état de la connexion bluetooth des modules.
Button boutonRetirerPointJoueurB
Le bouton permettant de retirer un point au(x) joueur(s) B.
void afficherNomsJoueursB()
Affiche le nom et le prénom des JoueursB.
TextView pointsJoueurB
L&#39;affichage des points du ou des joueur(s) A.
static final String TAG
TAG pour les logs.
TextView nomDeuxiemeJoueurB
L&#39;affichage du nom du deuxième joueur de l&#39;équipe B.
static final String NOM_MODULE_NET
nom du module NET
static final String NOM_MODULE_AFFICHEUR_AREA
nom du module AFFICHEUR
String getNom()
Accesseur de l&#39;attribut nom.
Definition: Joueur.java:45
void permuterCoteIHM()
Passe le(s) joueur(s) de gauche à droite et inversement.
void retirerPointJoueursA()
Méthode permettant de décrémenter le score des joueursA.
Definition: Partie.java:199
TextView manchesJoueurB
L&#39;affichage du nombre de manches du ou des joueur(s) A.
ImageView imageConnexionModuleAfficheur
L&#39;image permettant d&#39;indiquer l&#39;état de la connexion au module Afficheur.
L&#39;activité de gestion d&#39;une partie de l&#39;application AREA.
TextView prenomDeuxiemeJoueurB
L&#39;affichage du prénom du deuxième joueur de l&#39;équipe B.
void envoyer(String donnees)
Méthode pour envoyer des données.
void onStop()
Méthode appelée lorsque l&#39;activité n&#39;est plus visible.
static final String TRAME_SERVICE
la trame d&#39;initialistaion du mode détection
TextView prenomJoueurA
L&#39;affichage du prénom du premier joueur de l&#39;équipe A.
Vector< Joueur > getJoueursB()
Accesseur de l&#39;attribut joueursB.
Definition: Partie.java:87
TextView prenomJoueurB
L&#39;affichage du prénom du premier joueur de l&#39;équipe B.
static final String ID_INTENT_POSITION_INVERSE
Identifiant de l&#39;Intent permettant d&#39;informer IHMGestionPartie de la position des joueurs...
Button boutonRetirerPointJoueurA
Le bouton permettant de retirer un point au(x) joueur(s) A.
String getPrenom()
Accesseur de l&#39;attribut prenom.
Definition: Joueur.java:53
void deconnecterModules()
Déconnecte tout les modules connectés.
void ajouterPointJoueursA()
Méthode permettant d&#39;incrémenter le score des joueursA.
Definition: Partie.java:153
void afficherServeur()
Affiche une image devant le nom du serveur.
static String fabriquerTrameAfficheur(int typeTrame, Partie partie)
Méthode permettant de fabiquer les trames à destination du module Afficheur.
static final String TEXTE_BOUTON_AJOUTER_POINT
Le texte des boutons pour ajouter un point.
static boolean verifierTrameNet(String trame)
Méthode permettant de vérifier l&#39;intégrité d&#39;une trame NET.
Vector< Vector< Integer > > getManches()
Definition: Partie.java:145
int getTempsMortsJoueursA()
Accesseur de l&#39;attribut tempsMortsJoueursA.
Definition: Partie.java:426
void afficherConnexionModulesBluetooth()
Affiche les ressources pour le Bluetooth des modules.
void deconnecter()
Méthode pour fermer la connexion avec un appareil.
static final String NOM_MODULE_SCORE_AREA
nom du module SCORE
void retirerPointJoueurA()
Méthode appelée pour retirer un point au joueur A.
void afficherNet()
Affiche les ressources pour le NET.
void terminerSet(Partie partie)
Permet d&#39;effectuer une requete pour terminer un set.
void connecter()
Méthode pour ouvrir la connexion avec un appareil.
static String fabriquerTramePosition(boolean estADroite)
static final String ID_INTENT_LANCEMENT_PARTIE
Identifiant de l&#39;Intent permettant de lancer l&#39;activité IHMGestionPartie.
void actualiserAffichageAjoutPoint()
Actualise l&#39;affichage et décelenche l&#39;envoi de trames lors de l&#39;ajout d&#39;un point. ...
void connecterBoutons()
Définit le comportement des boutons.
TextView nomJoueurA
L&#39;affichage du nom du premier joueur de l&#39;équipe A.
ImageView imageServeurJoueurB
Icone signifiant que le premier joueur de l&#39;équipe A doit servir.
void afficherNomsJoueursA()
Affiche le nom et le prénom des JoueursA.
void onCreate(Bundle savedInstanceState)
Méthode appelée à la création de l&#39;activité
void finish()
Termine l&#39;activité
static final String TEXTE_CONNEXION_MODULE_NET
Le texte permettant d&#39;indiquer l&#39;état de la connexion au module NET.
void recupererRessourcesJoueurB()
Recupère les ressources graphiques relatives au joueur B.
void ajouterPointJoueurA()
Méthode appelée pour ajouter un point au joueur A.
TextView nomJoueurB
L&#39;affichage du nom du premier joueur de l&#39;équipe B.
void envoyerTramesScore()
Envoie une trame score à tout les modules d&#39;affichage connectés.
void afficherBoutonsEquipeA()
Affiche les boutons pour l&#39;équipe A.
void ajouterPointJoueurB()
Méthode appelée pour ajouter un point au joueur B.
TextView manchesJoueurA
L&#39;affichage du nombre de manches du ou des joueur(s) A.
static final String TEXTE_CONNEXION_MODULE_SCORE
Le texte permettant d&#39;indiquer l&#39;état du module Score.
void initialiserHandler()
Initialise le handler permettant le passage des Messages (trames reçues) entre les classes LiaisonBlu...
ImageView imageServeurDeuxiemeJoueurA
Icone signifiant que le deuxième joueur de l&#39;équipe A doit servir.
ImageView imageConnexionModuleNet
L&#39;image permettant d&#39;indiquer l&#39;état de la connexion au module NET.
int getTempsMortsJoueursB()
Accesseur de l&#39;attribut tempsMortsJoueursB.
Definition: Partie.java:434
void onDestroy()
Méthode appelée à la destruction de l&#39;application (après onStop() et détruite par le système Android)...
Button boutonTempsMortJoueurA
Le bouton permettant de déclencher un temps mort pour le(s) joueur(s) A.
TextView connexionModuleAfficheur
Le texte devant l&#39;image permettant d&#39;indiquer l&#39;état de la connexion au module Afficheur.
Permet de gérer la communication bluetooth.
Joueur getServeur()
Trouve le serveur et le retourne.
Definition: Partie.java:367
Classe permettant de manipuler la base de données.
TextView net
Le text dans le toast apparaissant lors d&#39;un NET.
static final String TEXTE_BOUTON_TEMPS_MORT
Le texte des boutons de temps mort.
void recupererRessourcesJoueurA()
Recupère les ressources graphiques relatives au joueur A.
TextView tiret
Tiret séparant les scores.
int getPointsJoueursA()
Accesseur de l&#39;attribut pointsJoueursA.
Definition: Partie.java:95
TextView connexionModuleScore
Le texte devant l&#39;image permettant d&#39;indiquer l&#39;état de la connexion au module Score.
static final String ID_INTENT_FIN_PARTIE
Identifiant de l&#39;Intent permettant recu de l&#39;activité IHMGestionPartie.
void renitialiserAffichageServeur()
Réinitialise l&#39;affichage du serveur.
Classe regroupant les informations d&#39;un joueur.
Definition: Joueur.java:18
void inverserEtatBoutons()
Active ou désactive les boutons selon leur état initial.
void demarrerDecompte(long duree, String message, String texteBoutonInterruption)
Démarre un décompte s&#39;affichant au centre de l&#39;écran.
void retirerPointJoueursB()
Méthode permettant de décrémenter le score des joueursB.
Definition: Partie.java:212
static final int TRAME_AFFICHEUR_ETAT_PARTIE
code pour une trame afficheur d&#39;état de partie
static final int TRAME_AFFICHEUR_NET
code pour une trame afficheur NET
void afficherBoutonsEquipeB()
Affiche les boutons pour l&#39;équipe B.
int getPointsJoueursB()
Accesseur de l&#39;attribut pointsJoueursB.
Definition: Partie.java:103
static String fabriquerTrameScoreAfficheurDernierPoint(Partie partie)
TextView pointsJoueurA
L&#39;affichage des points du ou des joueur(s) A.
Classe permettant la gestion d&#39;une partie.
Definition: Partie.java:22
void commencerSet(Partie partie)
Permet d&#39;effectuer une requete pour commencer un set.
ImageView imageConnexionModuleScore
L&#39;image permettant d&#39;indiquer l&#39;état de la connexion au module Score.
static final String TEXTE_BOUTON_RETIRER_POINT
Le texte des boutons pour retirer un point.
void envoyerTramesNet()
Envoie une trame net à tout les modules d&#39;affichage connectés.
int getManchesJoueursA()
Accesseur de l&#39;attribut manchesJoueursA.
Definition: Partie.java:111
void recupererRessourcesIHM()
Recupère les ressources graphiques de l&#39;activité
static final String TEXTE_BOUTON_REPRENDRE
void onStart()
Méthode appelée au démarrage après le onCreate() ou un restart après un onStop()
void setTempsMortsJoueursB(int tempsMortsJoueursB)
Mutateur de l&#39;attribut tempsMortsJoueursB.
Definition: Partie.java:450
Vector< LiaisonBluetooth > modulesAffichage
Button boutonAjouterPointJoueurB
Le bouton permettant d&#39;ajouter un point au(x) joueur(s) B.
L&#39;activité permettant de gérer une rencontre.
View layoutNet
Le layout du toast apparaissant lors d&#39;un NET.
static final String TEXTE_CONNEXION_MODULE_AFFICHEUR
Le texte permettant d&#39;indiquer l&#39;état du module Afficheur.
void actualiserAffichageRetraitPoint()
Actualise l&#39;affichage et décelenche l&#39;envoi de trames lors du retrait d&#39;un point. ...