summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--altosdroid/res/menu/option_menu.xml3
-rw-r--r--altosdroid/res/values/strings.xml1
-rw-r--r--altosdroid/src/org/altusmetrum/AltosDroid/AltosDroid.java14
-rw-r--r--altosdroid/src/org/altusmetrum/AltosDroid/TelemetryService.java10
4 files changed, 25 insertions, 3 deletions
diff --git a/altosdroid/res/menu/option_menu.xml b/altosdroid/res/menu/option_menu.xml
index 3bd5a54e..f005e881 100644
--- a/altosdroid/res/menu/option_menu.xml
+++ b/altosdroid/res/menu/option_menu.xml
@@ -17,6 +17,9 @@
<item android:id="@+id/connect_scan"
android:icon="@android:drawable/ic_menu_search"
android:title="@string/connect_device" />
+ <item android:id="@+id/disconnect"
+ android:icon="@android:drawable/ic_notification_clear_all"
+ android:title="@string/disconnect_device" />
<item android:id="@+id/quit"
android:icon="@android:drawable/ic_menu_close_clear_cancel"
android:title="@string/quit" />
diff --git a/altosdroid/res/values/strings.xml b/altosdroid/res/values/strings.xml
index 0cc99349..8a5b29b4 100644
--- a/altosdroid/res/values/strings.xml
+++ b/altosdroid/res/values/strings.xml
@@ -27,6 +27,7 @@
<!-- Options Menu -->
<string name="connect_device">Connect a device</string>
+ <string name="disconnect_device">Disconnect device</string>
<string name="quit">Quit</string>
<string name="select_freq">Select radio frequency</string>
<string name="select_rate">Select data rate</string>
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 {