altosdroid: add handling when restarting BT. delay start after stop.
[fw/altos] / altosdroid / src / org / altusmetrum / AltosDroid / TelemetryService.java
index 7cd233ab646528b5805b0875084409300f4fada6..3181d1614764edce1ce7fc6b8712bcd4599ba86f 100644 (file)
@@ -27,10 +27,12 @@ import android.app.PendingIntent;
 import android.app.Service;
 import android.bluetooth.BluetoothDevice;
 import android.content.Intent;
+import android.os.Bundle;
 import android.os.IBinder;
 import android.os.Handler;
 import android.os.Message;
 import android.os.Messenger;
+import android.os.RemoteException;
 import android.util.Log;
 import android.widget.Toast;
 
@@ -55,6 +57,10 @@ public class TelemetryService extends Service {
        public static final int STATE_CONNECTING = 2;
        public static final int STATE_CONNECTED  = 3;
 
+       // Key names received from the TelemetryService Handler
+       public static final String KEY_DEVNAME = "key_devname";
+       public static final String KEY_TOAST   = "key_toast";
+
        // Unique Identification Number for the Notification.
        // We use it on Notification start, and to cancel it.
        private int NOTIFICATION = R.string.telemetry_service_label;
@@ -98,6 +104,12 @@ public class TelemetryService extends Service {
                                break;
                        case MSG_CONNECTED:
                                if (D) Log.d(TAG, "Connected to device");
+                               s.mConnectedDeviceName = msg.getData().getString(KEY_DEVNAME);
+                               Message m = Message.obtain(null, AltosDroid.MSG_DEVNAME);
+                               Bundle b = new Bundle();
+                               b.putString(AltosDroid.KEY_DEVNAME, s.mConnectedDeviceName);
+                               m.setData(b);
+                               s.sendMessageToClients(m);
                                s.setState(STATE_CONNECTED);
                                s.mAltosBluetooth.add_monitor(s.telem);
                                break;
@@ -129,9 +141,14 @@ public class TelemetryService extends Service {
        }
 
        private void startAltosBluetooth(BluetoothDevice d) {
+               if (mAltosBluetooth == null) {
                        if (D) Log.i(TAG, "Connecting to " + d.getName());
                        mAltosBluetooth = new AltosBluetooth(d, mHandler);
                        setState(STATE_CONNECTING);
+               } else {
+                       stopAltosBluetooth();
+                       mHandler.sendMessageDelayed(Message.obtain(null, MSG_CONNECT, d), 1000);
+               }
        }
 
        private synchronized void setState(int s) {