altosdroid: Move pause before reopening bluetooth into connec thread
authorKeith Packard <keithp@keithp.com>
Wed, 27 May 2015 06:02:43 +0000 (23:02 -0700)
committerKeith Packard <keithp@keithp.com>
Wed, 27 May 2015 06:02:43 +0000 (23:02 -0700)
This avoids stalling the UI while waiting for TBT to boot.

Signed-off-by: Keith Packard <keithp@keithp.com>
altosdroid/src/org/altusmetrum/AltosDroid/AltosBluetooth.java
altosdroid/src/org/altusmetrum/AltosDroid/TelemetryService.java

index e68b188..d506ff5 100644 (file)
@@ -41,19 +41,19 @@ public class AltosBluetooth extends AltosDroidLink {
 
        private ConnectThread    connect_thread = null;
 
-       private BluetoothAdapter adapter;
+       private BluetoothDevice  device;
        private BluetoothSocket  socket;
        private InputStream      input;
        private OutputStream     output;
+       private boolean          pause;
 
        // Constructor
-       public AltosBluetooth(BluetoothDevice device, Handler handler) {
+       public AltosBluetooth(BluetoothDevice device, Handler handler, boolean pause) {
                super(handler);
-//             set_debug(D);
-               adapter = BluetoothAdapter.getDefaultAdapter();
+               this.device = device;
                this.handler = handler;
+               this.pause = pause;
 
-               create_socket(device);
                connect_thread = new ConnectThread();
                connect_thread.start();
        }
@@ -64,6 +64,7 @@ public class AltosBluetooth extends AltosDroidLink {
                        return;
                }
 
+               AltosDebug.check_ui("connected\n");
                try {
                        synchronized(this) {
                                if (socket != null) {
@@ -141,9 +142,17 @@ public class AltosBluetooth extends AltosDroidLink {
                        if (D) Log.d(TAG, "ConnectThread: BEGIN");
                        setName("ConnectThread");
 
+                       if (pause) {
+                               try {
+                                       Thread.sleep(4000);
+                               } catch (InterruptedException e) {
+                               }
+                       }
+
+                       create_socket(device);
                        // Always cancel discovery because it will slow down a connection
                        try {
-                               adapter.cancelDiscovery();
+                               BluetoothAdapter.getDefaultAdapter().cancelDiscovery();
                        } catch (Exception e) {
                                if (D) Log.d(TAG, String.format("cancelDiscovery exception %s", e.toString()));
                        }
index 82c546c..ed7b75a 100644 (file)
@@ -341,12 +341,6 @@ public class TelemetryService extends Service implements LocationListener {
                BluetoothDevice device = bluetooth_adapter.getRemoteDevice(address.address);
 
                disconnect(false);
-               if (pause) {
-                       try {
-                               Thread.sleep(4000);
-                       } catch (InterruptedException e) {
-                       }
-               }
                this.address = address;
                if (D) Log.d(TAG, String.format("start_altos_bluetooth(): Connecting to %s (%s)", device.getName(), device.getAddress()));
                altos_link = new AltosBluetooth(device, handler);
@@ -450,12 +444,14 @@ public class TelemetryService extends Service implements LocationListener {
                // Move us into the foreground.
                startForeground(NOTIFICATION, notification);
 
-               String  action = intent.getAction();
+               if (intent != null) {
+                       String  action = intent.getAction();
 
-               if (action.equals(AltosDroid.ACTION_BLUETOOTH)) {
-                       DeviceAddress address = AltosDroidPreferences.active_device();
-                       if (address != null && !address.address.startsWith("USB"))
-                               start_altos_bluetooth(address, false);
+                       if (action.equals(AltosDroid.ACTION_BLUETOOTH)) {
+                               DeviceAddress address = AltosDroidPreferences.active_device();
+                               if (address != null && !address.address.startsWith("USB"))
+                                       start_altos_bluetooth(address, false);
+                       }
                }
 
                // We want this service to continue running until it is explicitly