summaryrefslogtreecommitdiff
path: root/altosdroid/src
diff options
context:
space:
mode:
Diffstat (limited to 'altosdroid/src')
-rw-r--r--altosdroid/src/org/altusmetrum/AltosDroid/AltosDroid.java14
-rw-r--r--altosdroid/src/org/altusmetrum/AltosDroid/TelemetryService.java10
2 files changed, 21 insertions, 3 deletions
diff --git a/altosdroid/src/org/altusmetrum/AltosDroid/AltosDroid.java b/altosdroid/src/org/altusmetrum/AltosDroid/AltosDroid.java
index 10e735c8..273688d8 100644
--- a/altosdroid/src/org/altusmetrum/AltosDroid/AltosDroid.java
+++ b/altosdroid/src/org/altusmetrum/AltosDroid/AltosDroid.java
@@ -553,6 +553,13 @@ public class AltosDroid extends FragmentActivity implements AltosUnitsListener {
}
}
+ private void disconnectDevice() {
+ try {
+ mService.send(Message.obtain(null, TelemetryService.MSG_DISCONNECT, null));
+ } catch (RemoteException e) {
+ }
+ }
+
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
@@ -610,9 +617,14 @@ public class AltosDroid extends FragmentActivity implements AltosUnitsListener {
serverIntent = new Intent(this, DeviceListActivity.class);
startActivityForResult(serverIntent, REQUEST_CONNECT_DEVICE);
return true;
+ case R.id.disconnect:
+ /* Disconnect the bluetooth device
+ */
+ disconnectDevice();
+ return true;
case R.id.quit:
Log.d(TAG, "R.id.quit");
- stopService(new Intent(AltosDroid.this, TelemetryService.class));
+ disconnectDevice();
finish();
return true;
case R.id.select_freq:
diff --git a/altosdroid/src/org/altusmetrum/AltosDroid/TelemetryService.java b/altosdroid/src/org/altusmetrum/AltosDroid/TelemetryService.java
index 5e34d610..5f138972 100644
--- a/altosdroid/src/org/altusmetrum/AltosDroid/TelemetryService.java
+++ b/altosdroid/src/org/altusmetrum/AltosDroid/TelemetryService.java
@@ -63,6 +63,7 @@ public class TelemetryService extends Service implements LocationListener {
static final int MSG_SETFREQUENCY = 8;
static final int MSG_CRC_ERROR = 9;
static final int MSG_SETBAUD = 10;
+ static final int MSG_DISCONNECT = 11;
// Unique Identification Number for the Notification.
// We use it on Notification start, and to cancel it.
@@ -110,6 +111,11 @@ public class TelemetryService extends Service implements LocationListener {
AltosDroidPreferences.set_active_device(address);
s.start_altos_bluetooth(address);
break;
+ case MSG_DISCONNECT:
+ if (D) Log.d(TAG, "Disconnect command received");
+ s.address = null;
+ s.stop_altos_bluetooth(true);
+ break;
case MSG_SETFREQUENCY:
if (D) Log.d(TAG, "MSG_SETFREQUENCY");
s.telemetry_state.frequency = (Double) msg.obj;
@@ -144,7 +150,7 @@ public class TelemetryService extends Service implements LocationListener {
}
break;
case MSG_CONNECT_FAILED:
- if (s.address != null && !s.clients.isEmpty()) {
+ if (s.address != null) {
if (D) Log.d(TAG, "Connection failed... retrying");
s.start_altos_bluetooth(s.address);
} else {
@@ -153,7 +159,7 @@ public class TelemetryService extends Service implements LocationListener {
break;
case MSG_DISCONNECTED:
Log.d(TAG, "MSG_DISCONNECTED");
- if (s.address != null && !s.clients.isEmpty()) {
+ if (s.address != null) {
if (D) Log.d(TAG, "Connection lost... retrying");
s.start_altos_bluetooth(s.address);
} else {