diff --git a/.idea/misc.xml b/.idea/misc.xml index 54207cd..0c8166a 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -37,7 +37,7 @@ - + diff --git a/Application/src/main/AndroidManifest.xml b/Application/src/main/AndroidManifest.xml index f317c4f..9d15469 100644 --- a/Application/src/main/AndroidManifest.xml +++ b/Application/src/main/AndroidManifest.xml @@ -1,6 +1,6 @@ - + + + + + + + @@ -52,13 +59,19 @@ - + + + + - + + \ No newline at end of file diff --git a/Application/src/main/java/fr/centralesupelec/students/clientble/DeviceScanActivity.java b/Application/src/main/java/fr/centralesupelec/students/clientble/DeviceScanActivity.java index 23568f5..80abe98 100644 --- a/Application/src/main/java/fr/centralesupelec/students/clientble/DeviceScanActivity.java +++ b/Application/src/main/java/fr/centralesupelec/students/clientble/DeviceScanActivity.java @@ -45,20 +45,33 @@ import java.util.ArrayList; import java.util.UUID; /** - * Activity for scanning and displaying available Bluetooth LE devices. + * Activité qui scanne et affiche les appareils Bluetooth Low Energy + * offrant un service BLE particulier. + * + * Le scan ne cherche que les appareils qui proposent notre service privé + * de visualisation de la valeur du potentiomètre de la carte Curiosity + * et d’écriture d’une valeur. */ public class DeviceScanActivity extends ListActivity { - private LeDeviceListAdapter mLeDeviceListAdapter; - private BluetoothAdapter mBluetoothAdapter; - private boolean mScanning; - private Handler mHandler; + /* Attributs. */ + private LeDeviceListAdapter mLeDeviceListAdapter; // adapte la liste des appareils scanné pour les afficher sur l’interface + private BluetoothAdapter mBluetoothAdapter; // représente l’interface BLE, permet le scan + private boolean mScanning; // si l’activité est en train de scanner + private Handler mHandler; // gestionnaire de tâches + + /* Constantes : valeurs de retour pour onActivityResult */ private static final int REQUEST_ENABLE_COARSE_LOCATION = 2; private static final int REQUEST_ENABLE_BT = 1; - // Stops scanning after 10 seconds. + /* Constante : durée maximale du scan. */ private static final long SCAN_PERIOD = 10000; + /** + * Méthode appelé lors de la création de l’activité, ou lors d’un changement + * de l’orientation de l’écran (portrait/paysage.) + * @param savedInstanceState + */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); @@ -85,7 +98,7 @@ public class DeviceScanActivity extends ListActivity { return; } - // demande des permissions au cas où + // Demande de la permission d’accès à la localisation, pour permettre le scan BLE. if (ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) { @@ -113,14 +126,24 @@ public class DeviceScanActivity extends ListActivity { } } + /** + * Méthode de construction du menu (les boutons) de la barre supérieure. + * @param menu + * @return + */ @Override public boolean onCreateOptionsMenu(Menu menu) { + // Affiche les boutons définis dans res/menu/main.xml getMenuInflater().inflate(R.menu.main, menu); + + // Sans scan en cours, n’affiche que le bouton "scan" if (!mScanning) { menu.findItem(R.id.menu_stop).setVisible(false); menu.findItem(R.id.menu_scan).setVisible(true); menu.findItem(R.id.menu_refresh).setActionView(null); } else { + // Si un scan est en cours, affiche un bouton de progression et + // le bouton "stop", mais pas le bouton "scan". menu.findItem(R.id.menu_stop).setVisible(true); menu.findItem(R.id.menu_scan).setVisible(false); menu.findItem(R.id.menu_refresh).setActionView( @@ -129,25 +152,36 @@ public class DeviceScanActivity extends ListActivity { return true; } + /** + * Méthode appelée lors de la pression sur un bouton de + * la barre supérieure. + * @param item + * @return + */ @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { + // apppui sur "scan" case R.id.menu_scan: - mLeDeviceListAdapter.clear(); - scanLeDevice(true); + mLeDeviceListAdapter.clear(); // vider la liste des appareils affichés + scanLeDevice(true); // démarrage du scan break; + // appui sur "stop" case R.id.menu_stop: - scanLeDevice(false); + scanLeDevice(false); // arrêt du scan break; } return true; } + /** + * Appelée après onCreate() ou lors du retour de l’activité au premier plan. + */ @Override protected void onResume() { super.onResume(); - // Vérifie si le service de localisation est actif sur l’appareil + // Vérifie si le service de localisation est actif sur l’appareil. boolean location_enabled; try { location_enabled = Settings.Secure.LOCATION_MODE_OFF != @@ -181,16 +215,27 @@ public class DeviceScanActivity extends ListActivity { scanLeDevice(true); } + /** + * Méthode appelé lors du retour depuis une activité lancée avec startActivityForResult. + * Traitement de la valeur reçue (résultat) envoyée par cette activité. + * @param requestCode + * @param resultCode + * @param data + */ @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { // User chose not to enable Bluetooth. if (requestCode == REQUEST_ENABLE_BT && resultCode == Activity.RESULT_CANCELED) { + // Application inutile sans BLE => arrêt. finish(); return; } super.onActivityResult(requestCode, resultCode, data); } + /** + * Méthode appelée lors du passage de l’activité à l’arrière-plan. + */ @Override protected void onPause() { super.onPause(); @@ -198,10 +243,23 @@ public class DeviceScanActivity extends ListActivity { mLeDeviceListAdapter.clear(); } + /** + * Méthode appelée lorsque l’utilisateur clique sur un élément de la liste des appareils + * détectés par le scan. + * @param l + * @param v + * @param position + * @param id + */ @Override protected void onListItemClick(ListView l, View v, int position, long id) { + // Récupération de l’objet représentant l’appareil BLE. final BluetoothDevice device = mLeDeviceListAdapter.getDevice(position); + if (device == null) return; + + // Lancement de l’activité "SimpleDetailActivity" pour se connecter à l’appareil + // et utiliser ses services BLE. final Intent intent = new Intent(this, SimpleDetailActivity.class); intent.putExtra(SimpleDetailActivity.EXTRAS_DEVICE_NAME, device.getName()); intent.putExtra(SimpleDetailActivity.EXTRAS_DEVICE_ADDRESS, device.getAddress()); @@ -212,8 +270,16 @@ public class DeviceScanActivity extends ListActivity { startActivity(intent); } + /** + * Méthode qui lance ou arrête le scan des appareils BLE à notre portée qui proposent notre service + * privé. + * @param enable + */ private void scanLeDevice(final boolean enable) { + // Liste (de taille 1) qui contient l’UUID de notre service privé. UUID [] uuids = {GattConstants.PRIVATE_SERVICE_UUID}; + + // Démarrage du scan. if (enable) { // Stops scanning after a pre-defined scan period. mHandler.postDelayed(new Runnable() { @@ -228,6 +294,7 @@ public class DeviceScanActivity extends ListActivity { mScanning = true; mBluetoothAdapter.startLeScan(uuids, mLeScanCallback); } else { + // Arrêt du scan. mScanning = false; mBluetoothAdapter.stopLeScan(mLeScanCallback); } @@ -235,6 +302,8 @@ public class DeviceScanActivity extends ListActivity { } // Adapter for holding devices found through scanning. + // Contient les appareils détectés lors du scan et permet de les afficher sur + // l’interface. private class LeDeviceListAdapter extends BaseAdapter { private ArrayList mLeDevices; private LayoutInflater mInflator; @@ -300,7 +369,10 @@ public class DeviceScanActivity extends ListActivity { } } - // Device scan callback. + /** + * Classe définissant la fonction appelée lorsqu’un nouvel appareil est détecté + * lors d’un scan BLE. + */ private BluetoothAdapter.LeScanCallback mLeScanCallback = new BluetoothAdapter.LeScanCallback() { @@ -316,6 +388,9 @@ public class DeviceScanActivity extends ListActivity { } }; + /** + * Classe définissant les données à afficher sur chaque élément de la liste de l’interface. + */ static class ViewHolder { TextView deviceName; TextView deviceAddress;