GrOOm  0.2
BTS SNIR LaSalle Avignon 2020
IHMGroom.java
Aller à la documentation de ce fichier.
1 package com.example.groom;
2 
3 
4 import android.app.AlertDialog;
5 import android.bluetooth.BluetoothAdapter;
6 import android.bluetooth.BluetoothDevice;
7 import android.content.DialogInterface;
8 import android.content.Intent;
9 import android.os.Bundle;
10 import android.os.Handler;
11 import android.os.Message;
12 import android.util.Log;
13 import android.view.View;
14 import android.widget.Button;
15 import android.widget.EditText;
16 import android.widget.TextView;
17 import android.widget.Toast;
18 
19 import androidx.appcompat.app.AppCompatActivity;
20 import androidx.core.app.NotificationCompat;
21 import androidx.core.app.NotificationManagerCompat;
22 
23 import java.util.Set;
24 
35 public class IHMGroom extends AppCompatActivity implements View.OnClickListener {
39  private static final String TAG = "IHMGroom";
40 
44  private Button boutonPerso;
45  private Button boutonEntrer;
46  private Button boutonAbsent;
47  private Button boutonOccupe;
48  private Button boutonModeSonnette;
49  private EditText messagePerso;
50  private Button boutonDeconnexion;
51  private TextView disponibiliteActuelle;
52  private AlertDialog.Builder saisieMessagePerso;
53  private Toast toast;
54 
58  private Groom groom = null;
59  private BluetoothAdapter bluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
60  private Communication communication = null;
61 
68  @Override
69  protected void onCreate(Bundle savedInstanceState)
70  {
71  super.onCreate(savedInstanceState);
72  setContentView(R.layout.activity_groom);
73 
74  Intent intent = getIntent();
75  groom = (Groom) intent.getSerializableExtra("Groom");
76  if (groom != null)
77  {
78  Log.d(TAG, "Groom : " + groom.getOccupant().getNom() + " " + groom.getOccupant().getPrenom() + " " + groom.getDisponibilite() + " " + groom.getNomDevice());
79  }
80 
81  Set<BluetoothDevice> devices = bluetoothAdapter.getBondedDevices();
82  //Log.d(TAG, "Nb BluetoothDevice " + devices.size());
83  for (BluetoothDevice bluetoothDevice : devices)
84  {
85  //Log.d(TAG, "BluetoothDevice " + bluetoothDevice.getName() + " [" + bluetoothDevice.getAddress() + "]");
86  if(bluetoothDevice.getName().equals(groom.getNomDevice()))
87  {
88  Log.d(TAG, "BluetoothDevice Groom trouvé : " + bluetoothDevice.getName() + " [" + bluetoothDevice.getAddress() + "]");
89  communication = new Communication(bluetoothDevice, handler);
90  }
91  }
92 
93  if(communication != null)
94  {
95  communication.connecter();
96  }
97 
100  }
101 
107  @Override
108  protected void onStart()
109  {
110  super.onStart();
111  if (groom != null)
112  disponibiliteActuelle.setText(groom.getDisponibilite());
113  }
114 
121  {
122  // Les boutons
123  boutonPerso = findViewById(R.id.bouttonMessagePersonnalise);
124  boutonEntrer = findViewById(R.id.boutonLibre);
125  boutonAbsent = findViewById(R.id.boutonAbsent);
126  boutonOccupe = findViewById(R.id.boutonOccupe);
127  boutonModeSonnette = findViewById(R.id.boutonSonnette);
128  boutonDeconnexion = findViewById(R.id.boutonDeconnexion);
129 
130  boutonPerso.setOnClickListener(this);
131  boutonEntrer.setOnClickListener(this);
132  boutonAbsent.setOnClickListener(this);
133  boutonOccupe.setOnClickListener(this);
134  boutonModeSonnette.setOnClickListener(this);
135  boutonDeconnexion.setOnClickListener(this);
136 
137  disponibiliteActuelle = (TextView) findViewById(R.id.disponibiliteActuelle);
138 
140  }
141 
148  {
149  saisieMessagePerso = new AlertDialog.Builder(this);
150 
151  saisieMessagePerso.setMessage("Veuillez saisir votre message :");
152  saisieMessagePerso.setView(R.layout.saisie_message_perso);
153  saisieMessagePerso.setPositiveButton("Ok", new DialogInterface.OnClickListener() {
154  @Override
155  public void onClick(DialogInterface dialog, int which) {
156  messagePerso = (EditText) ((AlertDialog) dialog).findViewById(R.id.saisieMessagePerso);
157  Log.v(TAG, "Saisie : " + messagePerso.getText().toString());
158  communication.envoyer("$MSGPERSO;" + messagePerso.getText() + "\r\n");
159  }
160  });
161  saisieMessagePerso.setNegativeButton("Annuler", new DialogInterface.OnClickListener() {
162  @Override
163  public void onClick(DialogInterface dialog, int which) {
164  Log.v(TAG, "Saisie annulée");
165  }
166  });
167  }
168 
175  @Override
176  public void onClick(View element)
177  {
178  switch (element.getId()) {
179  case R.id.bouttonMessagePersonnalise:
180  saisieMessagePerso.show();
181  break;
182 
183  case R.id.boutonLibre:
184  communication.envoyer("$GROOM;0;" + boolToInt(groom.getModeSonnette()) + ";" + boolToInt(groom.getDetectionPresence()) + "\r\n");
185  if (groom != null)
186  groom.setDisponibilite("Libre");
187  break;
188 
189  case R.id.boutonAbsent:
190  communication.envoyer("$GROOM;1;" + boolToInt(groom.getModeSonnette()) + ";" + boolToInt(groom.getDetectionPresence()) + "\r\n");
191  if (groom != null)
192  groom.setDisponibilite("Absent");
193  break;
194 
195  case R.id.boutonOccupe:
196  communication.envoyer("$GROOM;2;" + boolToInt(groom.getModeSonnette()) + ";" + boolToInt(groom.getDetectionPresence()) + "\r\n");
197  if (groom != null)
198  groom.setDisponibilite("Occupé");
199  break;
200 
201  case R.id.boutonSonnette:
202  if (boutonModeSonnette.getText().equals(getString(R.string.desactiverSonnette)))
203  {
204  if (groom != null)
205  {
206  groom.setModeSonnette(false);
207  communication.envoyer("$GROOM;" + groom.getDisponibiliteToInt() + ";" + boolToInt(groom.getModeSonnette()) + ";" + boolToInt(groom.getDetectionPresence()) + "\r\n");
208  boutonModeSonnette.setText(R.string.activerSonnette);
209  }
210  }
211  else
212  {
213  if (groom != null)
214  {
215  groom.setModeSonnette(true);
216  communication.envoyer("$GROOM;" + groom.getDisponibiliteToInt() + ";" + boolToInt(groom.getModeSonnette()) + ";" + boolToInt(groom.getDetectionPresence()) + "\r\n");
217  boutonModeSonnette.setText(R.string.desactiverSonnette);
218  }
219  }
220  break;
221 
222  case R.id.boutonDeconnexion:
223  afficherToast("Déconnexion");
224  communication.deconnecter();
225  finish();
226  break;
227  }
228 
229  if (groom != null)
230  disponibiliteActuelle.setText(groom.getDisponibilite());
231  }
232 
239  private void afficherToast(String message)
240  {
241  toast = Toast.makeText(getApplicationContext(), message, Toast.LENGTH_SHORT);
242  toast.show();
243  }
244 
250  @Override
251  public void finish()
252  {
253  if(communication != null)
254  communication.deconnecter();
255  Intent data = new Intent();
256  data.putExtra("Groom", groom);
257  setResult(RESULT_OK, data);
258  super.finish();
259  }
260 
266  private void verifierModeSonnette()
267  {
268  if(groom.getModeSonnette())
269  {
270  boutonModeSonnette.setText(R.string.desactiverSonnette);
271  }
272  else
273  {
274  boutonModeSonnette.setText(R.string.activerSonnette);
275  }
276  }
277 
281  final private Handler handler = new Handler()
282  {
283  @Override
284  public void handleMessage(Message msg)
285  {
286  super.handleMessage(msg);
287 
288  switch(msg.what)
289  {
291  Log.v(TAG, "Groom connecté");
292  communication.envoyer("$AFFICHAGE;" + groom.getOccupant().getNom() + ";" + groom.getOccupant().getPrenom() + ";" + groom.getOccupant().getFonction() + "\r\n");
293  break;
295  Log.v(TAG, "Trame reçue " + msg.obj);
296  String trame[] = msg.obj.toString().split(";");
297  decoderTrameRecue(trame);
298  break;
300  Log.v(TAG, "Groom déconnecté");
301  break;
302  }
303  }
304  };
305 
313  private void decoderTrameRecue(String trame[])
314  {
315  if (trame[0].equals("$GROOM"))
316  {
317  groom.setDisponibiliteToInt(Integer.parseInt(trame[1]));
318  disponibiliteActuelle.setText(groom.getDisponibilite());
319  if(trame[2].equals("1"))
320  {
321  creerNotification("Quelqu'un vient de sonner à votre porte", 1);
322  }
323  if(trame[3].equals("1"))
324  {
325  creerNotification("Une personne attend devant votre bureau", 2);
326  }
327  }
328  }
329 
338  private void creerNotification(String texte, int id)
339  {
340  NotificationCompat.Builder builder = new NotificationCompat.Builder(this, "channelId")
341  .setSmallIcon(R.drawable.ic_launcher_background)
342  .setContentTitle("GrOOm")
343  .setContentText(texte)
344  .setPriority(NotificationCompat.PRIORITY_DEFAULT);
345  NotificationManagerCompat notificationSonnette = NotificationManagerCompat.from(this);
346  notificationSonnette.notify(id, builder.build());
347  Log.v(TAG, "Notification Groom : " + texte);
348  }
349 
358  private int boolToInt(boolean b)
359  {
360  return b ? 1 : 0;
361  }
362 }
Button boutonModeSonnette
Le bouton pour activer/désactiver la sonnette.
Definition: IHMGroom.java:48
void onStart()
Méthode appelée au lancement de l&#39;activité IHMGroom.
Definition: IHMGroom.java:108
Communication communication
l&#39;objet communication pour communiquer avec le portier groom
Definition: IHMGroom.java:60
final Handler handler
objet Handler utiliser pour la reception du code de retour de la communication
Definition: IHMGroom.java:281
Déclaration de la classe Groom.
Definition: Groom.java:15
boolean deconnecter()
Méthode pour se déconnecter de l&#39;appareil.
int getDisponibiliteToInt()
Retourne la disponibilité sous forme entière.
Definition: Groom.java:77
Button boutonDeconnexion
Le bouton pour se déconnecter.
Definition: IHMGroom.java:50
void envoyer(String data)
Méthode pour envoyer une trame.
void onCreate(Bundle savedInstanceState)
Méthode appelée à la création de l&#39;activité IHMGroom.
Definition: IHMGroom.java:69
void initialiserRessourcesIHM()
Méthode appelée pour initialiser les différentes ressources nécessaire à l&#39;affichage de l&#39;IHM...
Definition: IHMGroom.java:120
int boolToInt(boolean b)
Méthode qui convertit un bool en un int.
Definition: IHMGroom.java:358
static final int CODE_CONNEXION
Code de connexion.
Déclaration de la classe IHMGroom.
Definition: IHMGroom.java:35
Toast toast
Le toast qui permet d&#39;afficher des informations à l&#39;utilisateur.
Definition: IHMGroom.java:53
void creerNotification(String texte, int id)
Méthode qui permet de créer une notification pour avertir l&#39;utilisateur si quelqu&#39;un à sonné et/ou si...
Definition: IHMGroom.java:338
void setDisponibilite(String disponibilite)
Accesseur set de la disponibilité
Definition: Groom.java:113
void verifierModeSonnette()
Méthode appelée pour vérifier le mode de sonnette et changer le texte du boutton. ...
Definition: IHMGroom.java:266
void setDisponibiliteToInt(int dispo)
Fixe la disponibilité à partir de ss forme entière.
Definition: Groom.java:97
boolean getDetectionPresence()
Accesseur get de la détection de présence.
Definition: Groom.java:146
Button boutonPerso
Le bouton pour envoyer un message personnalisé
Definition: IHMGroom.java:44
EditText messagePerso
Le champ de texte pour écrire son message personnalisé
Definition: IHMGroom.java:49
void onClick(View element)
Méthode appelé au click d&#39;un bouton et appelle une méthode celon le bouton qui a été cliqué ...
Definition: IHMGroom.java:176
void decoderTrameRecue(String trame[])
Méthode qui permet de décoder la trame reçue.
Definition: IHMGroom.java:313
Button boutonOccupe
Le bouton pour définir sa disponibilité en Occupé
Definition: IHMGroom.java:47
void setModeSonnette(boolean modeSonnette)
Accesseur set du mode de la sonnette.
Definition: Groom.java:135
Button boutonEntrer
Le bouton pour définir sa disponibilité en Libre.
Definition: IHMGroom.java:45
String getNomDevice()
Accesseur get du nomDevice.
Definition: Groom.java:168
Occupant getOccupant()
Definition: Groom.java:50
static final int CODE_DECONNEXION
Code de déconnexion.
String getDisponibilite()
Accesseur get de la disponibilité
Definition: Groom.java:66
void afficherToast(String message)
Méthode appelée pour donner des informations supplémentaires à l&#39;utilisateur.
Definition: IHMGroom.java:239
void initialiserSaisieMessagePerso()
Méthode appelée pour initialiser la boite de dialogue personnalisé pour la saisie d&#39;un message person...
Definition: IHMGroom.java:147
static final int CODE_RECEPTION
Code de réception d&#39;une trame.
Déclaration de la classe Communication.
void finish()
Méthode appelée à la fin de l&#39;activité
Definition: IHMGroom.java:251
TextView disponibiliteActuelle
Le texte qui affiche la dernière disponiblité définie.
Definition: IHMGroom.java:51
AlertDialog.Builder saisieMessagePerso
Le builder qui permet de créer une fenêtre de dialogue de saisie personnalisé
Definition: IHMGroom.java:52
void connecter()
Méthode pour se connecter à l&#39;appareil.
Button boutonAbsent
Le bouton pour définir sa disponibilité en Absent.
Definition: IHMGroom.java:46
boolean getModeSonnette()
Accesseur get du mode de la sonnette.
Definition: Groom.java:124