1 package com.lasalle.meeting;
3 import androidx.annotation.NonNull;
4 import androidx.appcompat.app.AlertDialog;
5 import androidx.appcompat.app.AppCompatActivity;
6 import androidx.recyclerview.widget.LinearLayoutManager;
7 import androidx.recyclerview.widget.RecyclerView;
8 import androidx.swiperefreshlayout.widget.SwipeRefreshLayout;
10 import android.content.Context;
11 import android.content.DialogInterface;
12 import android.content.Intent;
13 import android.net.ConnectivityManager;
14 import android.net.DhcpInfo;
15 import android.net.wifi.WifiInfo;
16 import android.net.wifi.WifiManager;
17 import android.os.Bundle;
18 import android.os.Handler;
19 import android.os.Message;
20 import android.util.Log;
21 import android.view.LayoutInflater;
22 import android.view.Menu;
23 import android.view.MenuInflater;
24 import android.view.MenuItem;
25 import android.view.View;
26 import android.widget.AdapterView;
27 import android.widget.ArrayAdapter;
28 import android.widget.Button;
29 import android.widget.Spinner;
30 import android.widget.Toast;
32 import com.google.android.material.bottomnavigation.BottomNavigationView;
34 import java.io.Serializable;
35 import java.net.InetAddress;
36 import java.util.ArrayList;
37 import java.util.List;
38 import java.util.Vector;
40 import static java.lang.Boolean.TRUE;
57 private static final String
TAG =
"MainActivity";
59 private static final int FROID = -3;
60 private static final int FRAIS = -2;
64 private static final int TIEDE = 2;
65 private static final int CHAUD = 3;
88 private WifiManager
wm = null;
96 protected void onCreate(Bundle savedInstanceState)
98 Log.d(TAG,
"onCreate()");
100 super.onCreate(savedInstanceState);
101 setContentView(R.layout.activity_main);
103 mesSalles =
new Vector<Salle>();
118 Log.d(TAG,
"onStart()");
130 MenuInflater inflater = getMenuInflater();
131 inflater.inflate(R.menu.menu, menu);
144 switch (item.getItemId())
146 case R.id.configurerSalle:
147 startActivity(intent);
150 Toast.makeText(getApplicationContext(),
"La fonctionnalité à propos de l'application n'est pas encore disponible !", Toast.LENGTH_SHORT).show();
153 return super.onOptionsItemSelected(item);
162 swipeRefreshLayout = (SwipeRefreshLayout)findViewById(R.id.swipeRefreshLayout);
163 recyclerView = (RecyclerView)findViewById(R.id.listeSalle);
164 bottomNavigationView = (BottomNavigationView) findViewById(R.id.bottomNavigationView);
165 filtre = (Spinner)findViewById(R.id.filtre);
178 swipeRefreshLayout.setOnRefreshListener(
new SwipeRefreshLayout.OnRefreshListener()
181 public void onRefresh()
187 bottomNavigationView.setOnNavigationItemSelectedListener(
new BottomNavigationView.OnNavigationItemSelectedListener()
190 public boolean onNavigationItemSelected(@NonNull MenuItem item)
192 switch (item.getItemId())
196 Toast.makeText(getApplicationContext(),
"Rafraichisement", Toast.LENGTH_SHORT).show();
199 Toast.makeText(getApplicationContext(),
"La fonctionnalité favoris n'est pas encore disponible !", Toast.LENGTH_SHORT).show();
201 case R.id.Rechercher:
205 Toast.makeText(getApplicationContext(),
"La fonctionnalité rechercher n'est pas encore disponible !", Toast.LENGTH_SHORT).show();
219 wm = (WifiManager) getApplicationContext().getSystemService(Context.WIFI_SERVICE);
220 if (!wm.isWifiEnabled())
222 Log.d(TAG,
"connecterWiFi() WiFi indisponible !");
223 wm.setWifiEnabled(
true);
227 Log.d(TAG,
"connecterWiFi() WiFi disponible");
230 WifiInfo wi = wm.getConnectionInfo();
231 Log.d(TAG,
"connecterWiFi() " + wi.toString() +
" " + wi.getIpAddress() +
" " + wi.getMacAddress());
233 DhcpInfo di = wm.getDhcpInfo();
234 Log.d(TAG,
"connecterWiFi() " + di.toString());
237 Thread tCommunicationUDP =
new Thread(communication,
"Communication");
238 tCommunicationUDP.start();
247 Log.d(TAG,
"initialiserSalles()");
249 recyclerView.setHasFixedSize(
true);
255 recyclerView.setAdapter(
adapter);
270 Log.d(TAG,
"reInitialiserSalles()");
272 recyclerView.setHasFixedSize(
true);
278 recyclerView.setAdapter(
adapter);
290 if(positionMemeSalle == -1)
292 mesSalles.add(maSalle);
293 adapter.notifyDataSetChanged();
297 mesSalles.removeElementAt(positionMemeSalle);
298 mesSalles.add(maSalle);
299 adapter.notifyDataSetChanged();
310 for(
int i = 0; i < mesSalles.size(); ++i)
312 if(maSalle.
getAdresseIP().equals(mesSalles.elementAt(i).getAdresseIP()))
323 for(
int i = 0; i < mesSalles.size(); ++i)
325 if(mesSalles.elementAt(i).getAdresseIP().equals(adresseIP))
340 if(maSalle.
getLibre() == mesSalles.elementAt(positionMemeSalle).getLibre())
344 else if(maSalle.
getTemperature() == mesSalles.elementAt(positionMemeSalle).getTemperature())
348 else if(maSalle.
getConfort() == mesSalles.elementAt(positionMemeSalle).getConfort())
352 else if(maSalle.
getNom().equals(mesSalles.elementAt(positionMemeSalle).getNom()))
356 else if(maSalle.
getEmplacement().equals(mesSalles.elementAt(positionMemeSalle).getEmplacement()))
360 else if(maSalle.
getDescription().equals(mesSalles.elementAt(positionMemeSalle).getDescription()))
364 else if(maSalle.
getSurface() == mesSalles.elementAt(positionMemeSalle).getSurface())
379 Log.d(TAG,
"rafraichir()");
380 if(communication != null)
381 communication.
envoyer(
"$GET;1\r\n");
383 swipeRefreshLayout.setRefreshing(
false);
384 adapter.notifyDataSetChanged();
395 public void handleMessage(Message msg)
397 super.handleMessage(msg);
398 Bundle b = msg.getData();
400 switch(b.getInt(
"etat"))
403 String trame = b.getString(
"trame");
408 Log.d(TAG,
"handleMessage() trame reçue de " + b.getString(
"adresseIP") +
":" + b.getInt(
"port"));
409 Log.d(TAG,
"handleMessage() trame = " + trame.replace(
"\r\n",
""));
435 Log.d(TAG,
"handleMessage() code état inconnu ! ");
447 Log.d(TAG,
"creerSalle() adresseIP = " + adresseIP);
448 if(!trameDecompose[0].isEmpty())
450 Log.d(TAG,
"creerSalle() trameDecompose[0] : " + trameDecompose[0] +
" (nomSalle)");
451 Log.d(TAG,
"creerSalle() trameDecompose[1] : " + trameDecompose[1] +
" (description)");
452 Log.d(TAG,
"creerSalle() trameDecompose[2] : " + trameDecompose[2] +
" (emplacement)");
453 Log.d(TAG,
"creerSalle() trameDecompose[3] : " + trameDecompose[3] +
" (surface)");
454 Log.d(TAG,
"creerSalle() trameDecompose[4] : " + trameDecompose[4] +
" (disponibilité)");
455 Log.d(TAG,
"creerSalle() trameDecompose[5] : " + trameDecompose[5] +
" (niveauDeConfort)");
456 Log.d(TAG,
"creerSalle() trameDecompose[6] : " + trameDecompose[6] +
" (température)");
459 surface = Integer.parseInt(trameDecompose[3]);
462 disponible = Integer.parseInt(trameDecompose[4]);
463 int niveauConfort = 0;
465 niveauConfort = Integer.parseInt(trameDecompose[5]);
466 float temperature = 0;
468 temperature = Float.parseFloat(trameDecompose[6]);
470 salle =
new Salle(trameDecompose[0], trameDecompose[1], trameDecompose[2], disponible, surface, niveauConfort, temperature, adresseIP);
475 Log.d(TAG,
"creerSalle() pas de nom de salle");
476 String inconnuString =
"???";
479 salle =
new Salle(inconnuString, inconnuString , inconnuString , Integer.parseInt(trameDecompose[4]), inconnuInt, Integer.parseInt(trameDecompose[5]), Float.parseFloat(trameDecompose[6]), adresseIP);
491 String[] tramesDecompose = trame.split(SEPARATEUR);
492 return tramesDecompose;
503 for (
int i = 0; i < trame.length(); i++)
505 if (trame.charAt(i) ==
';')
535 Integer.parseInt(donnee);
537 catch(NumberFormatException e)
541 catch(NullPointerException e)
553 Float.parseFloat(donnee);
555 catch(NumberFormatException e)
559 catch(NullPointerException e)
575 boiteDisponibilite.setPositiveButton(
"Disponible",
new DialogInterface.OnClickListener()
577 public void onClick(DialogInterface dialog,
int which)
584 public void onClick(DialogInterface dialog,
int which)
592 String[] niveauConfort = {
"Chaud",
"Tiède",
"Légèrement tiède",
"Neutre",
"Légèrement fraiche",
"Fraiche",
"Froid"};
593 boiteConfort.setItems(niveauConfort,
new DialogInterface.OnClickListener() {
595 public void onClick(DialogInterface dialog,
int which) {
629 Log.d(TAG,
"initialiserSpinner()");
632 choixFiltre =
new ArrayList<String>();
634 choixFiltre.add(
"Aucun");
635 choixFiltre.add(
"Disponibilité");
636 choixFiltre.add(
"Confort");
637 choixFiltre.add(
"Nom");
639 adapterList =
new ArrayAdapter<String>(
this, android.R.layout.simple_spinner_item, choixFiltre);
640 adapterList.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
642 filtre.setAdapter(adapterList);
644 filtre.setOnItemSelectedListener(
new AdapterView.OnItemSelectedListener()
647 public void onItemSelected(AdapterView<?> arg0, View arg1,
int position,
long id)
649 Toast.makeText(getApplicationContext(),
"Le choix du filtre est : " + position, Toast.LENGTH_SHORT).show();
650 Log.d(TAG,
"position : " + position);
654 public void onNothingSelected(AdapterView<?> arg0)
662 if(positionFiltre == 0)
666 else if(positionFiltre == 1)
670 else if(positionFiltre == 2)
674 else if(positionFiltre == 3)
677 rechercherNomBoiteDialogue.show(getSupportFragmentManager(),
"rechercher une salle par son nom");
683 Log.d(TAG,
"filtreDisponible()");
684 sallesFilter =
new Vector<Salle>();
686 for(
int i = 0; i < mesSalles.size(); i++)
688 if(mesSalles.elementAt(i).getLibre())
690 sallesFilter.add(mesSalles.get(i));
698 Log.d(TAG,
"filtreNonDisponible()");
699 sallesFilter =
new Vector<Salle>();
701 for(
int i = 0; i < mesSalles.size(); i++)
703 if(!mesSalles.elementAt(i).getLibre())
705 sallesFilter.add(mesSalles.elementAt(i));
713 Log.d(TAG,
"filtreTiede()");
714 sallesFilter =
new Vector<Salle>();
716 for(
int i = 0; i < mesSalles.size(); i++)
718 if(mesSalles.elementAt(i).getConfort() ==
TIEDE)
720 sallesFilter.add(mesSalles.elementAt(i));
728 Log.d(TAG,
"filtreLegerementTiede()");
729 sallesFilter =
new Vector<Salle>();
731 for(
int i = 0; i < mesSalles.size(); i++)
735 sallesFilter.add(mesSalles.elementAt(i));
743 Log.d(TAG,
"filtreNeutre()");
744 sallesFilter =
new Vector<Salle>();
746 for(
int i = 0; i < mesSalles.size(); i++)
748 if(mesSalles.elementAt(i).getConfort() ==
NEUTRE)
750 sallesFilter.add(mesSalles.elementAt(i));
758 Log.d(TAG,
"filtreLegerementFrais()");
759 sallesFilter =
new Vector<Salle>();
761 for(
int i = 0; i < mesSalles.size(); i++)
765 sallesFilter.add(mesSalles.elementAt(i));
773 Log.d(TAG,
"filtreFrais()");
774 sallesFilter =
new Vector<Salle>();
776 for(
int i = 0; i < mesSalles.size(); i++)
778 if(mesSalles.elementAt(i).getConfort() ==
FRAIS)
780 sallesFilter.add(mesSalles.elementAt(i));
788 Log.d(TAG,
"filtreChaud()");
789 sallesFilter =
new Vector<Salle>();
791 for(
int i = 0; i < mesSalles.size(); i++)
793 if(mesSalles.elementAt(i).getConfort() ==
CHAUD)
795 sallesFilter.add(mesSalles.elementAt(i));
803 Log.d(TAG,
"filtreFroid()");
804 sallesFilter =
new Vector<Salle>();
806 for(
int i = 0; i < mesSalles.size(); i++)
808 if(mesSalles.elementAt(i).getConfort() ==
FROID)
810 sallesFilter.add(mesSalles.elementAt(i));
823 Log.d(TAG,
"filtreNom()");
824 sallesFilter =
new Vector<Salle>();
826 for(
int i = 0; i < mesSalles.size(); i++)
828 if(mesSalles.elementAt(i).getNom().equals(nomSalleRechercher))
830 sallesFilter.add(mesSalles.elementAt(i));
String [] decomposerTrame(String trame)
découpe la trame
static Vector< Salle > sallesFilter
Vecteur contenant mes salles aprés le filtre appliquer par l'utilisateur.
void onStart()
Méthode appelée au démarrage de l'activité MainActivity.
final float getTemperature()
Accesseur get la température de la salle.
final String getDescription()
Accesseur get la description de la salle.
Salle creerSalle(String[] trameDecompose, String adresseIP)
créer une salle a partir de la trame
Déclaration de la classe Communication.
RecyclerView recyclerView
la vue des salles
boolean onCreateOptionsMenu(Menu menu)
Méthode appelée au démarrage de l'activité MainActivity.
void initialiserSalles()
initialise le vecteur, les afficheurs pour les salles
void filtreNom(String nomSalleRechercher)
void initialiserSpinner()
initialise la vue
boolean estReel(String donnee)
Handler handlerUI
permet de récuperer les trames
static Vector< Salle > mesSalles
Vecteur contenant mes salles (moyen de stockage)
AlertDialog.Builder boiteDisponibilite
boite de dialogue pour le filtre disponibilité
AlertDialog.Builder boiteNom
boite de dialogue pour le filtre nom
void reInitialiserSalles()
initialise le vecteur, les afficheurs pour les salles
Déclaration de la classe ConfigurationSalleActivity.
static final int LEGEREMENTFRAIS
Constant niveau de confort LEGEREMENTFRAIS.
final String getEmplacement()
Accesseur get de l'emplacement de la salle.
static Communication getCommunication()
retourne mon attribut communication
static Vector< Salle > getMesSalles()
retourne le vecteur de salle
static final String DELIMITEUR_FIN
WifiManager wm
attribut permetant de voir la connection au wi-fi
AlertDialog.Builder boiteConfort
boite de dialogue pour le filtre confort
void setListenBouton()
applique les listener sur les layouts approprié
final int getSurface()
Accesseur get la surface de la salle.
static final int FRAIS
Constant niveau de confort FRAIS.
void filtreLegerementTiede()
void initialiserFiltre(int positionFiltre)
static final int NB_DELIMITEURS_GET_3
ArrayAdapter< String > adapterList
l'adaptateur
int verifierExistenceSalle(String adresseIP)
boolean estEntier(String donnee)
final String SEPARATEUR
séparateur utilisé dans le protocole meeting
Déclaration de la classe MainActivity.
RecyclerView.Adapter adapter
l'adaptateur pour la vue des salles
static final int NB_DELIMITEURS_GET_1
static final int CHAUD
Constant niveau de confort CHAUD.
boolean onOptionsItemSelected(MenuItem item)
Méthode appelée quand on appuye sur boutons du menu.
Déclaration de la classe Salle.
static final int TIEDE
Constant niveau de confort TIEDE.
RecyclerView.LayoutManager layoutManager
le gestionnaire de mise en page
void onCreate(Bundle savedInstanceState)
Méthode appelée à la création de l'activité MainActivity.
final boolean getLibre()
Accesseur get de libre de la salle.
static final int NB_DELIMITEURS_GET_2
static final int CODE_RECEPTION
code de reception correcte pour le portiers
static final int NEUTRE
Constant niveau de confort NEUTRE.
static final String TAG
TAG utilisé pour les logs.
final String getNom()
Accesseur get du nom de la salle.
void envoyer(final String requete)
méthode envoyant une requête à l'adresse de multicast
boolean verifierChangementSalle(Salle maSalle, int positionMemeSalle)
Vérifie que la salle n'est pas different que dans le vecteur, r'envoye true si il y a eu une modifiac...
SwipeRefreshLayout swipeRefreshLayout
layout permettant de rafraichir
void filtreLegerementFrais()
void initialiserRessourcesLayout()
Récupère et initialise les widgets du layout activity_main.
final int getConfort()
Accesseur get le confort de la salle.
void connecterWiFi()
méthode permettant de se connecter au wi-fi
static Communication communication
attribut permetant d'envoyer des requêtes
void rafraichir(Vector< Salle > mesSalles)
rafraichis mon affichage
BottomNavigationView bottomNavigationView
layout permettant d'avoir un menu de navigation (en haut)
static final String DELIMITEUR_EN_TETE
int getNbDelimiteurs(String trame)
retourne le nombre de limiteurs dans la trame
void applyTexts(String nomSalleRechercher)
static final int LEGEREMENTTIEDE
Constant niveau de confort LEGEREMENTTIEDE.
Salle salle
attribut salle
int verifierExistenceSalle(Salle maSalle)
verifie que la salle n'exisite pas déjà dans le vecteur, r'envoye -1 si il n'en existe pas...
final String getAdresseIP()
Accesseur get l'adresse IP de la salle.
void initialiserBoiteDialogue()
initialise les boites de dialogue
void filtreNonDisponible()
void ajouterSalle(Salle maSalle)
ajoute une salle au vecteur (mesSalles)
Déclaration de la classe SalleAdapter.
static final int FROID
Constant niveau de confort FROID.