1 package com.lasalle.meeting;
3 import androidx.appcompat.app.AlertDialog;
4 import androidx.appcompat.app.AppCompatActivity;
5 import androidx.swiperefreshlayout.widget.SwipeRefreshLayout;
7 import android.content.Context;
8 import android.content.DialogInterface;
9 import android.content.Intent;
10 import android.content.SharedPreferences;
11 import android.net.wifi.WifiManager;
12 import android.os.Bundle;
13 import android.os.Handler;
14 import android.os.Message;
15 import android.util.Log;
16 import android.view.LayoutInflater;
17 import android.view.Menu;
18 import android.view.MenuItem;
19 import android.view.View;
20 import android.widget.AdapterView;
21 import android.widget.EditText;
22 import android.widget.ListView;
23 import android.widget.RadioButton;
24 import android.widget.RadioGroup;
25 import android.widget.TextView;
27 import java.io.Serializable;
28 import java.util.Collections;
29 import java.util.Comparator;
30 import java.util.Vector;
49 private static final String
TAG =
"_IHMMeeting";
75 private WifiManager
wm = null;
83 protected void onCreate(Bundle savedInstanceState)
85 super.onCreate(savedInstanceState);
86 setContentView(R.layout.activity_main);
87 Log.d(TAG,
"onCreate()");
91 swipeRefreshLayout = (SwipeRefreshLayout)findViewById(R.id.swipeRefreshLayout);
92 swipeRefreshLayout.setOnRefreshListener(
new SwipeRefreshLayout.OnRefreshListener()
95 public void onRefresh()
97 Log.d(TAG,
"Pull To Refresh");
116 preferences = getBaseContext().getSharedPreferences(PREFERENCES, MODE_PRIVATE);
124 wm = (WifiManager) getApplicationContext().getSystemService(Context.WIFI_SERVICE);
125 if (!wm.isWifiEnabled())
127 Log.d(TAG,
"WiFi indisponible !");
128 wm.setWifiEnabled(
true);
132 Log.d(TAG,
"WiFi disponible");
138 Thread tCommunicationUDP =
new Thread(communication,
"Communication");
139 tCommunicationUDP.start();
141 if(communication != null)
155 Log.d(TAG,
"onStart()");
167 Log.d(TAG,
"onResume()");
177 Log.d(TAG,
"onPause()");
187 Log.d(TAG,
"onStop()");
197 Log.d(TAG,
"onDestroy()");
205 Log.d(TAG,
"initialiserEspacesDeTravail()");
207 espacesDeTravail.clear();
209 if(communication != null)
215 swipeRefreshLayout.setRefreshing(
false);
228 espacesDeTravail.add(espaceDeTravail);
240 Log.d(TAG,
"modifierEspaceDeTravail() : position = " + position);
246 espacesDeTravail.set(position, espaceDeTravail);
261 espacesDeTravail.removeElementAt(position);
273 for(
int i = 0; i < espacesDeTravail.size(); ++i)
275 if(espaceDeTravail.
getNom().equals(espacesDeTravail.elementAt(i).getNom()))
290 for(
int i = 0; i < espacesDeTravail.size(); ++i)
292 if(espacesDeTravail.elementAt(i).getAdresseIP().equals(adresseIP))
305 Log.d(TAG,
"initialiserListeEspacesDeTravail()");
307 espacesDeTravail =
new Vector<EspaceDeTravail>();
308 espacesDeTravailFiltres =
new Vector<EspaceDeTravail>();
309 choixFiltre = R.id.actionAfficherTous;
311 listeEspacesDeTravail = (ListView)findViewById(R.id.listeEspacesDeTravail);
312 titreEspacesDeTravail = (TextView) findViewById(R.id.titreEspacesDeTravail);
313 titreEspacesDeTravail.setText(
"Tous les espaces de travail détectés");
321 Log.d(TAG,
"afficherListeEspacesDeTravail()");
325 listeEspacesDeTravail.setAdapter(adaptateur);
326 adaptateur.setNotifyOnChange(
true);
328 listeEspacesDeTravail.setOnItemClickListener(
329 new AdapterView.OnItemClickListener()
332 public void onItemClick(AdapterView<?> a, View v,
int position,
long id)
334 Log.d(TAG,
"Position : " + position +
" - " +
" Nom : " + espacesDeTravailFiltres.get(position).getNom());
336 intent.putExtra(
"unEspaceDeTravail", (Serializable)espacesDeTravailFiltres.get(position));
337 startActivityForResult(intent, 0);
349 super.onActivityResult(requestCode, resultCode, data);
350 Log.d(TAG,
"onActivityResult() requestCode=" + requestCode +
" - resultCode=" + resultCode +
"");
363 public void handleMessage(Message msg)
365 super.handleMessage(msg);
366 Bundle b = msg.getData();
371 String trame = b.getString(
"donnees");
372 Log.d(TAG,
"handleMessage() Réception [" + b.getString(
"adresseIP") +
":" + b.getInt(
"port") +
"] -> " + trame);
374 String[] champs = trame.split(
";");
382 if(numeroEspaceDeTravail == -1)
390 espacesDeTravail.get(numeroEspaceDeTravail).extraireInformations(trame);
396 espacesDeTravail.get(numeroEspaceDeTravail).extraireCode(trame);
400 Log.d(TAG,
"handleMessage() : type de trame inconnu !");
405 Log.d(TAG,
"handleMessage() : code inconnu ! ");
416 getMenuInflater().inflate(R.menu.menu_main, menu);
426 int id = item.getItemId();
430 case R.id.actionAfficherTous:
431 Log.d(TAG,
"onOptionsItemSelected() actionAfficherTous");
432 choixFiltre = R.id.actionAfficherTous;
433 titreEspacesDeTravail.setText(
"Tous les espaces de travail détectés");
437 case R.id.actionAfficherFavoris:
438 Log.d(TAG,
"onOptionsItemSelected() actionAfficherFavoris");
439 choixFiltre = R.id.actionAfficherFavoris;
440 titreEspacesDeTravail.setText(
"Favoris");
444 case R.id.actionRechercher:
445 Log.d(TAG,
"onOptionsItemSelected() actionRechercher");
446 choixFiltre = R.id.actionRechercher;
447 titreEspacesDeTravail.setText(
"Recherche");
448 boiteDeDialogueRechercher.show();
450 saisieMotCle.setText(motCle);
453 case R.id.actionFiltrerParDisponibilite:
454 Log.d(TAG,
"onOptionsItemSelected() actionFiltrerParDisponibilite");
455 choixFiltre = R.id.actionFiltrerParDisponibilite;
456 titreEspacesDeTravail.setText(
"Espaces de travail filtrés par disponibilité");
460 case R.id.actionFiltrerParNiveauDeConfort:
461 Log.d(TAG,
"onOptionsItemSelected() actionFiltrerParNiveauDeConfort");
462 choixFiltre = R.id.actionFiltrerParNiveauDeConfort;
463 titreEspacesDeTravail.setText(
"Espaces de travail filtrés par niveau de confort");
467 case R.id.actionAPropos:
468 Log.d(TAG,
"onOptionsItemSelected() actionAPropos");
473 return super.onOptionsItemSelected(item);
483 String message =
"Projet Meeting version " + BuildConfig.VERSION_NAME +
"\n\nAuteur : KELLER-LAVALLEE Joachim\nBTS SNIR La Salle Avignon 2021";
496 AlertDialog.Builder boiteDeDialogueRechercher =
new AlertDialog.Builder(
this);
497 boiteDeDialogueRechercher.setTitle(
"Rechercher un espace de travail");
498 LayoutInflater inflater = this.getLayoutInflater();
499 View vue = inflater.inflate(R.layout.boite_recherche, null);
500 boiteDeDialogueRechercher.setView(vue);
502 boiteDeDialogueRechercher.setPositiveButton(
"Rechercher",
new DialogInterface.OnClickListener()
504 public void onClick(DialogInterface dialog,
int which)
506 EditText saisieMotCle = (EditText) ((AlertDialog) dialog).findViewById(R.id.saisieMotCle);
507 motCle = saisieMotCle.getText().toString();
508 titreEspacesDeTravail.setText(
"Résultats de la recherche : " + motCle);
512 boiteDeDialogueRechercher.setNegativeButton(
"Annuler",
new DialogInterface.OnClickListener()
514 public void onClick(DialogInterface dialog,
int which)
520 this.boiteDeDialogueRechercher = boiteDeDialogueRechercher.create();
530 LayoutInflater inflater = this.getLayoutInflater();
531 View vue = inflater.inflate(R.layout.boite_filtre_disponibilite, null);
536 public void onClick(DialogInterface dialog,
int which)
540 titreEspacesDeTravail.setText(
"Espaces de travail occupés");
544 titreEspacesDeTravail.setText(
"Espaces de travail libres");
552 public void onClick(DialogInterface dialog,
int which)
566 LayoutInflater inflater = this.getLayoutInflater();
567 View vue = inflater.inflate(R.layout.boite_filtre_niveau_de_confort, null);
572 public void onClick(DialogInterface dialog,
int which)
574 switch(indiceDeConfort)
577 titreEspacesDeTravail.setText(
"Espaces de travail dont le niveau de confort est Chaud");
581 titreEspacesDeTravail.setText(
"Espaces de travail dont le niveau de confort est Tiède");
585 titreEspacesDeTravail.setText(
"Espaces de travail dont le niveau de confort est Légèrement tiède");
589 titreEspacesDeTravail.setText(
"Espaces de travail dont le niveau de confort est Neutre");
593 titreEspacesDeTravail.setText(
"Espaces de travail dont le niveau de confort est Légèrement frais");
597 titreEspacesDeTravail.setText(
"Espaces de travail dont le niveau de confort est Frais");
601 titreEspacesDeTravail.setText(
"Espaces de travail dont le niveau de confort est Froid");
610 public void onClick(DialogInterface dialog,
int which)
622 boolean estCoche = ((RadioButton) vue).isChecked();
626 case R.id.boutonRadioLibre:
633 case R.id.boutonRadioOccupe:
640 case R.id.boutonRadioChaud:
647 case R.id.boutonRadioTiede:
654 case R.id.boutonRadioLegerementTiede:
661 case R.id.boutonRadioNeutre:
668 case R.id.boutonRadioLegerementFrais:
675 case R.id.boutonRadioFrais:
682 case R.id.boutonRadioFroid:
696 espacesDeTravailFiltres.clear();
698 for(
int i = 0; i < espacesDeTravail.size(); i++)
702 espacesDeTravailFiltres.add(espacesDeTravail.elementAt(i));
706 Log.d(TAG,
"rechercher() " + motCle);
716 espacesDeTravailFiltres.clear();
718 for(
int i = 0; i < espacesDeTravail.size(); i++)
720 if(espacesDeTravail.elementAt(i).getEstReserve() == disponibilite)
722 espacesDeTravailFiltres.add(espacesDeTravail.elementAt(i));
726 Log.d(TAG,
"filtrerParDisponibilite() " + disponibilite);
736 espacesDeTravailFiltres.clear();
738 for(
int i = 0; i < espacesDeTravail.size(); i++)
740 if(espacesDeTravail.elementAt(i).getIndiceDeConfort() ==
indiceDeConfort)
742 espacesDeTravailFiltres.add(espacesDeTravail.elementAt(i));
746 Log.d(TAG,
"filtrerParNiveauDeConfort() " + indiceDeConfort);
756 espacesDeTravailFiltres.clear();
758 for(
int i = 0; i < espacesDeTravail.size(); i++)
760 if(espacesDeTravail.elementAt(i).getEstFavori())
762 espacesDeTravailFiltres.add(espacesDeTravail.elementAt(i));
766 Log.d(TAG,
"filtrerParFavoris()");
776 espacesDeTravailFiltres.clear();
778 for(
int i = 0; i < espacesDeTravail.size(); i++)
780 espacesDeTravailFiltres.add(espacesDeTravail.elementAt(i));
783 Log.d(TAG,
"filtrerTous");
795 case R.id.actionAfficherTous:
796 titreEspacesDeTravail.setText(
"Tous les espaces de travail détectés");
800 case R.id.actionAfficherFavoris:
801 titreEspacesDeTravail.setText(
"Favoris");
805 case R.id.actionFiltrerParDisponibilite:
806 titreEspacesDeTravail.setText(
"Espaces de travail filtrés par disponibilité");
810 case R.id.actionFiltrerParNiveauDeConfort:
811 titreEspacesDeTravail.setText(
"Espaces de travail filtrés par niveau de confort");
823 swipeRefreshLayout.setRefreshing(
false);
824 adaptateur.notifyDataSetChanged();
834 Collections.sort(lesEspacesDeTravail,
new Comparator<EspaceDeTravail>()
839 if(champ.equals(
"nom"))
843 else if(champ.equals(
"adresseIP"))
847 else if(champ.equals(
"superficie"))
863 espaceDeTravail.
setCode(preferences.getString(PREFERENCES_CODE, null));
864 espaceDeTravail.
setEstFavori(preferences.getBoolean(PREFERENCES_EST_FAVORI,
false));
866 donnees = espaceDeTravail.
toJSON();
876 preferences.edit().putString(PREFERENCES_CODE, espaceDeTravail.
getCode()).apply();
877 preferences.edit().putBoolean(PREFERENCES_EST_FAVORI, espaceDeTravail.
getEstFavori()).apply();
886 if(str == null || searchStr == null)
return false;
888 final int length = searchStr.length();
892 for (
int i = str.length() - length; i >= 0; i--)
894 if (str.regionMatches(
true, i, searchStr, 0, length))
void setCode(String code)
Mutateur de l'attribut code.
static final String PREFERENCES
Préférences de l'application.
void onActivityResult(int requestCode, int resultCode, Intent data)
Traite le retour de l'activité d'affichage d'un espace de travail.
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...
static final int INDICE_LEGEREMENT_TIEDE
static final int INDICE_NEUTRE
Communication entre l'application et le portier.
void afficherListeEspacesDeTravail()
Affiche la liste des espaces de travail.
String fabriquerTrameDemande(int typeTrame)
Fabrique la trame de demande.
static void sauvegarderDonneesEspaceDeTravail(EspaceDeTravail espaceDeTravail)
Enregistre les données d'un espace de travail.
void initialiserBoitesDeDialogue()
Initialise les boites de dialogue.
void initialiserEspacesDeTravail()
Crée les espaces de travail détectés.
void trierEspacesDeTravail(final String champ, Vector< EspaceDeTravail > lesEspacesDeTravail)
Trie les espaces de travail.
void initialiserListeEspacesDeTravail()
Initialise la vue pour les espaces de travail.
String motCle
Mot-clé pour rechercher un espace de travail.
EspaceDeTravailAdaptateur adaptateur
Adaptateur pour les espaces de travail.
static String recupererDonneesEspaceDeTravail(EspaceDeTravail espaceDeTravail)
Récupère les données stockées d'un espace de travail.
String getCode()
Accesseur de l'attribut code.
void onCreate(Bundle savedInstanceState)
Méthode appelée à la création de l'activité
WifiManager wm
Attribut permettant de voir la connexion au WiFi.
static int recupererTypeTrame(String[] champs)
Détermine le type de trame.
void filtrerTous()
Récupère tous les espaces de travail détectés.
static SharedPreferences preferences
Pour le stockage de données.
static final String PREFERENCES_CODE
Code pour libérer l'espace de travail enregistré dans les préférences.
static final int INDICE_CHAUD
void modifierEspaceDeTravail(EspaceDeTravail espaceDeTravail)
Modifie un espace de travail si déjà détecté
String getAdresseIP()
Accesseur de l'attribut adresseIP.
static final int MODIFICATION_DISPONIBILITE
void initialiserPreferences()
Initialise les préférences.
static final int DEMANDE_INFORMATIONS
AlertDialog.Builder boiteDeDialogueFiltrerParDisponibilite
Boîte de dialogue Filtrer par disponibilité
void rechercher(String motCle)
Recherche les espaces de travail par un mot-clé
void filtrerParNiveauDeConfort(int indiceDeConfort)
Filtre les espaces de travail par niveau de confort.
void onStop()
Méthode appelée lorsque l'activité n'est plus visible.
boolean onOptionsItemSelected(MenuItem item)
Méthode appelée lors de la sélection d'une entrée de menu.
static final String TAG
TAG pour les logs.
static final int INDICE_FROID
boolean onCreateOptionsMenu(Menu menu)
Méthode pour la création du menu.
L'activité principale de l'application Meeting.
static final int INDICE_TIEDE
void rafraichirListeEspacesFiltres()
Fabrique la liste des espaces de travail à afficher.
AlertDialog.Builder boiteDeDialogueFiltrerParNiveauDeConfort
Boîte de dialogue Filtrer par niveau de confort.
void onDestroy()
Méthode appelée à la destruction de l'application (après onStop() et détruite par le système Android)...
AlertDialog.Builder boiteDeDialogueAPropos
Boîte de dialogue A propos.
void supprimerEspaceDeTravail(EspaceDeTravail espaceDeTravail)
Supprime un espace de travail si déjà détecté
int getSuperficie()
Accesseur de l'attribut superficie.
void filtrerParDisponibilite(boolean disponibilite)
Filtre les espaces de travail par disponibilité
void rafraichirAffichageListeEspaces()
Met à jour l'affichage de la liste.
SwipeRefreshLayout swipeRefreshLayout
Pour le Pull To Refresh.
void envoyer(String trame, String adressePortier)
Envoyer la trame.
int verifierPresenceEspaceDeTravail(EspaceDeTravail espaceDeTravail)
Vérifie la présence d'un espace de travail dans le conteneur des espaces de travail détectés...
boolean getEstFavori()
Accesseur de l'attribut estFavori.
static final int TYPE_RECEPTION
Code du message indiquant une réception de données.
int choixFiltre
Choix du dernier type de filtrage.
static final int INDICE_FRAIS
String toJSON()
Création de données JSON.
static boolean containsIgnoreCase(String str, String searchStr)
Utilitaire de recherche insensible à la casse.
ListView listeEspacesDeTravail
Affichage des espaces de travail sous forme de liste.
void ajouterEspaceDeTravail(EspaceDeTravail espaceDeTravail)
Ajoute un espace de travail si pas encore détecté
int verifierPresenceEspaceDeTravail(String adresseIP)
Vérifie la présence d'un espace de travail dans le conteneur des espaces de travail détectés...
void setEstFavori(boolean estFavori)
Mutateur de l'attribut estFavori.
static final int INDICE_LEGEREMENT_FRAIS
void demarrerReseau()
Démarre la connexion wifi et la communication.
L'activité d'affichage d'un espace de travail de l'application Meeting.
void onResume()
Méthode appelée après onStart() ou après onPause()
static Communication communication
Attribut permettant d'envoyer des requêtes.
void initialiserBoiteDeDialogueFiltrerParNiveauDeConfort()
Initialise la boite de dialogue de filtrage par niveau de confort.
Handler handler
Permet de récupérer les trames.
static final String adresseMulticast
Adresse multicast des portiers.
void onRadioButtonClicked(View vue)
Méthode appelée lorsque l'on coche un bouton radio.
void onStart()
Méthode appelée au démarrage de l'activité MainActivity.
TextView titreEspacesDeTravail
Affichage du titre principal.
static final String PREFERENCES_EST_FAVORI
Favori enregistré dans les préférences.
void initialiserBoiteDeDialogueRechercher()
Initialise la boite de dialogue de recherche.
static Vector< EspaceDeTravail > espacesDeTravail
Conteneur pour les espaces de travail.
void filtrerParFavoris()
Filtre les espaces de travail par favori.
static Vector< EspaceDeTravail > espacesDeTravailFiltres
Conteneur pour les espaces de travail filtrés.
void initialiserBoiteDeDialogueFiltrerParDisponibilite()
Initialise la boite de dialogue de filtrage par disponibilité
AlertDialog boiteDeDialogueRechercher
Boîte de dialogue Rechercher.
String getNom()
Accesseur de l'attribut nom.
L'affichage d'un espace de travail dans la liste des espaces de travail sur la page d'accueil...
boolean extraireInformations(String trame)
Extrait les informations d'une trame DEMANDE_INFORMATIONS.