diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/AbstractDeviceSupport.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/AbstractDeviceSupport.java
index db0aa9725..8dd73618a 100644
--- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/AbstractDeviceSupport.java
+++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/AbstractDeviceSupport.java
@@ -21,11 +21,11 @@ public abstract class AbstractDeviceSupport implements DeviceSupport {
public boolean isConnected() {
return gbDevice.isConnected();
}
-
+
protected boolean isInitialized() {
return gbDevice.isInitialized();
}
-
+
@Override
public GBDevice getDevice() {
return gbDevice;
diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/DeviceSupport.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/DeviceSupport.java
index 692ddefef..7ac419dc0 100644
--- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/DeviceSupport.java
+++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/DeviceSupport.java
@@ -7,10 +7,10 @@ import android.content.Context;
* Provides support for a specific device. Has hooks to manage the life cycle
* of a device: instances of this interface will be created, initialized, and disposed
* as needed.
- *
+ *
* Implementations need to act accordingly, in order to establish, reestablish or close
* the connection to the device.
- *
+ *
* This interface is agnostic to the kind transport, i.e. whether the device is connected
* via Bluetooth, Bluetooth LE, Wifi or something else.
*/
@@ -18,7 +18,7 @@ public interface DeviceSupport extends EventHandler {
public void initialize(GBDevice gbDevice, BluetoothAdapter btAdapter, Context context);
public boolean isConnected();
-
+
public boolean connect();
public void dispose();
diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/GBDevice.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/GBDevice.java
index 6de7fdf24..d86ce6ab1 100644
--- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/GBDevice.java
+++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/GBDevice.java
@@ -36,11 +36,11 @@ public class GBDevice {
public boolean isConnected() {
return state.ordinal() >= State.CONNECTED.ordinal();
}
-
+
public boolean isInitialized() {
return state.ordinal() >= State.INITIALIZED.ordinal();
}
-
+
public State getState() {
return state;
}
diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/btle/AbstractBTLEDeviceSupport.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/btle/AbstractBTLEDeviceSupport.java
index 5f2cf2052..11c22d6d3 100644
--- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/btle/AbstractBTLEDeviceSupport.java
+++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/btle/AbstractBTLEDeviceSupport.java
@@ -1,5 +1,10 @@
package nodomain.freeyourgadget.gadgetbridge.btle;
+import android.bluetooth.BluetoothGatt;
+import android.bluetooth.BluetoothGattCharacteristic;
+import android.bluetooth.BluetoothGattService;
+import android.util.Log;
+
import java.io.IOException;
import java.util.HashMap;
import java.util.HashSet;
@@ -8,19 +13,14 @@ import java.util.Set;
import java.util.UUID;
import nodomain.freeyourgadget.gadgetbridge.AbstractDeviceSupport;
-import android.bluetooth.BluetoothGatt;
-import android.bluetooth.BluetoothGattCharacteristic;
-import android.bluetooth.BluetoothGattService;
-import android.util.Log;
/**
- *
* @see TransactionBuilder
* @see BtLEQueue
*/
public abstract class AbstractBTLEDeviceSupport extends AbstractDeviceSupport implements GattCallback {
private static final String TAG = "AbstractBTLEDeviceSupport";
-
+
private BtLEQueue mQueue;
private HashMap mAvailableCharacteristics;
private Set mSupportedServices = new HashSet<>(4);
@@ -35,6 +35,7 @@ public abstract class AbstractBTLEDeviceSupport extends AbstractDeviceSupport im
/**
* Subclasses should populate the given builder to initialize the device (if necessary).
+ *
* @param builder
* @return the same builder as passed as the argument
*/
@@ -48,13 +49,14 @@ public abstract class AbstractBTLEDeviceSupport extends AbstractDeviceSupport im
mQueue.dispose();
}
}
-
+
/**
* Send commands like this to the device:
*
* perform("sms notification").write(someCharacteristic, someByteArray).queue(getQueue());
*
* TODO: support orchestration of multiple reads and writes depending on returned values
+ *
* @see #performConnected(Transaction)
* @see #initializeDevice(TransactionBuilder)
*/
@@ -73,7 +75,6 @@ public abstract class AbstractBTLEDeviceSupport extends AbstractDeviceSupport im
}
/**
- *
* @param transaction
* @throws IOException
* @see {@link #performInitialized(String)}
@@ -90,10 +91,11 @@ public abstract class AbstractBTLEDeviceSupport extends AbstractDeviceSupport im
public BtLEQueue getQueue() {
return mQueue;
}
-
+
/**
* Subclasses should call this method to add services they support.
* Only supported services will be queried for characteristics.
+ *
* @param aSupportedService
* @see #getCharacteristic(UUID)
*/
@@ -104,6 +106,7 @@ public abstract class AbstractBTLEDeviceSupport extends AbstractDeviceSupport im
/**
* Returns the characteristic matching the given UUID. Only characteristics
* are returned whose service is marked as supported.
+ *
* @param uuid
* @return the characteristic for the given UUID or null
* @see #addSupportedService(UUID)
@@ -122,7 +125,7 @@ public abstract class AbstractBTLEDeviceSupport extends AbstractDeviceSupport im
return;
}
Set supportedServices = getSupportedServices();
-
+
for (BluetoothGattService service : discoveredGattServices) {
if (supportedServices.contains(service.getUuid())) {
List characteristics = service.getCharacteristics();
@@ -146,27 +149,27 @@ public abstract class AbstractBTLEDeviceSupport extends AbstractDeviceSupport im
@Override
public void onConnectionStateChange(BluetoothGatt gatt, int status, int newState) {
}
-
+
@Override
public void onServicesDiscovered(BluetoothGatt gatt) {
gattServicesDiscovered(getQueue().getSupportedGattServices());
}
-
+
@Override
public void onCharacteristicRead(BluetoothGatt gatt,
- BluetoothGattCharacteristic characteristic, int status) {
+ BluetoothGattCharacteristic characteristic, int status) {
}
-
+
@Override
public void onCharacteristicWrite(BluetoothGatt gatt,
- BluetoothGattCharacteristic characteristic, int status) {
+ BluetoothGattCharacteristic characteristic, int status) {
}
-
+
@Override
public void onCharacteristicChanged(BluetoothGatt gatt,
- BluetoothGattCharacteristic characteristic) {
+ BluetoothGattCharacteristic characteristic) {
}
-
+
public void onReadRemoteRssi(BluetoothGatt gatt, int rssi, int status) {
}
}
diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/btle/BtLEAction.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/btle/BtLEAction.java
index 2e261e314..15508eea3 100644
--- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/btle/BtLEAction.java
+++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/btle/BtLEAction.java
@@ -7,7 +7,7 @@ import android.bluetooth.BluetoothGattCharacteristic;
* The Bluedroid implementation only allows performing one GATT request at a time.
* As they are asynchronous anyway, we encapsulate every GATT request (read and write)
* inside a runnable action.
- *
+ *
* These actions are then executed one after another, ensuring that every action's result
* has been posted before invoking the next action.
*/
@@ -17,20 +17,22 @@ public abstract class BtLEAction {
public BtLEAction() {
this(null);
}
-
+
public BtLEAction(BluetoothGattCharacteristic characteristic) {
this.characteristic = characteristic;
}
-
+
public abstract boolean run(BluetoothGatt gatt);
+
/**
* Returns the GATT characteristic being read/written/...
+ *
* @return the GATT characteristic, or null
*/
public BluetoothGattCharacteristic getCharacteristic() {
return characteristic;
}
-
+
public String toString() {
BluetoothGattCharacteristic characteristic = getCharacteristic();
String uuid = characteristic == null ? "(null)" : characteristic.getUuid().toString();
diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/btle/BtLEQueue.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/btle/BtLEQueue.java
index bbb42b81f..c1a106a90 100644
--- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/btle/BtLEQueue.java
+++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/btle/BtLEQueue.java
@@ -1,14 +1,5 @@
package nodomain.freeyourgadget.gadgetbridge.btle;
-import java.util.Collections;
-import java.util.List;
-import java.util.concurrent.BlockingQueue;
-import java.util.concurrent.CountDownLatch;
-import java.util.concurrent.LinkedBlockingQueue;
-
-import nodomain.freeyourgadget.gadgetbridge.DeviceSupport;
-import nodomain.freeyourgadget.gadgetbridge.GBDevice;
-import nodomain.freeyourgadget.gadgetbridge.GBDevice.State;
import android.bluetooth.BluetoothAdapter;
import android.bluetooth.BluetoothDevice;
import android.bluetooth.BluetoothGatt;
@@ -19,69 +10,79 @@ import android.bluetooth.BluetoothProfile;
import android.content.Context;
import android.util.Log;
+import java.util.Collections;
+import java.util.List;
+import java.util.concurrent.BlockingQueue;
+import java.util.concurrent.CountDownLatch;
+import java.util.concurrent.LinkedBlockingQueue;
+
+import nodomain.freeyourgadget.gadgetbridge.DeviceSupport;
+import nodomain.freeyourgadget.gadgetbridge.GBDevice;
+import nodomain.freeyourgadget.gadgetbridge.GBDevice.State;
+
/**
* One queue/thread per connectable device.
*/
public final class BtLEQueue {
private static final String TAG = BtLEQueue.class.getSimpleName();
-
+
private GBDevice mGbDevice;
private BluetoothAdapter mBluetoothAdapter;
private BluetoothGatt mBluetoothGatt;
private volatile BlockingQueue mTransactions = new LinkedBlockingQueue();
private volatile boolean mDisposed;
private volatile boolean mAbortTransaction;
-
+
private Context mContext;
private CountDownLatch mWaitForActionResultLatch;
private CountDownLatch mConnectionLatch;
private BluetoothGattCharacteristic mWaitCharacteristic;
private GattCallback mExternalGattCallback;
-
+
private Thread dispatchThread = new Thread("Bluetooth GATT Dispatcher") {
public void run() {
- while (!mDisposed) {
- try {
- Transaction transaction = mTransactions.take();
- if (!isConnected()) {
- // TODO: request connection and initialization from the outside and wait until finished
-
- // wait until the connection succeeds before running the actions
- // Note that no automatic connection is performed. This has to be triggered
- // on the outside typically by the DeviceSupport. The reason is that
- // devices have different kinds of initializations and this class has no
- // idea about them.
- mConnectionLatch = new CountDownLatch(1);
- mConnectionLatch.await();
- mConnectionLatch = null;
- }
-
- mAbortTransaction = false;
- // Run all actions of the transaction until one doesn't succeed
- for (BtLEAction action : transaction.getActions()) {
- mWaitCharacteristic = action.getCharacteristic();
- if (action.run(mBluetoothGatt)) {
- mWaitForActionResultLatch = new CountDownLatch(1);
- mWaitForActionResultLatch.await();
- mWaitForActionResultLatch = null;
- if (mAbortTransaction) {
- break;
- }
- } else {
- Log.e(TAG, "Action returned false: " + action);
- break; // abort the transaction
- }
- }
- } catch (InterruptedException ignored) {
- mWaitForActionResultLatch = null;
- mConnectionLatch = null;
- } finally {
- mWaitCharacteristic = null;
- }
- }
- Log.i(TAG, "Queue Dispatch Thread terminated.");
- }
+ while (!mDisposed) {
+ try {
+ Transaction transaction = mTransactions.take();
+ if (!isConnected()) {
+ // TODO: request connection and initialization from the outside and wait until finished
+
+ // wait until the connection succeeds before running the actions
+ // Note that no automatic connection is performed. This has to be triggered
+ // on the outside typically by the DeviceSupport. The reason is that
+ // devices have different kinds of initializations and this class has no
+ // idea about them.
+ mConnectionLatch = new CountDownLatch(1);
+ mConnectionLatch.await();
+ mConnectionLatch = null;
+ }
+
+ mAbortTransaction = false;
+ // Run all actions of the transaction until one doesn't succeed
+ for (BtLEAction action : transaction.getActions()) {
+ mWaitCharacteristic = action.getCharacteristic();
+ if (action.run(mBluetoothGatt)) {
+ mWaitForActionResultLatch = new CountDownLatch(1);
+ mWaitForActionResultLatch.await();
+ mWaitForActionResultLatch = null;
+ if (mAbortTransaction) {
+ break;
+ }
+ } else {
+ Log.e(TAG, "Action returned false: " + action);
+ break; // abort the transaction
+ }
+ }
+ } catch (InterruptedException ignored) {
+ mWaitForActionResultLatch = null;
+ mConnectionLatch = null;
+ } finally {
+ mWaitCharacteristic = null;
+ }
+ }
+ Log.i(TAG, "Queue Dispatch Thread terminated.");
+ }
};
public BtLEQueue(BluetoothAdapter bluetoothAdapter, GBDevice gbDevice, GattCallback externalGattCallback, Context context) {
@@ -89,10 +90,10 @@ public final class BtLEQueue {
mGbDevice = gbDevice;
mExternalGattCallback = externalGattCallback;
mContext = context;
-
+
dispatchThread.start();
}
-
+
protected boolean isConnected() {
return mGbDevice.isConnected();
}
@@ -101,7 +102,7 @@ public final class BtLEQueue {
* Connects to the given remote device. Note that this does not perform any device
* specific initialization. This should be done in the specific {@link DeviceSupport}
* class.
- *
+ *
* @return true whether the connection attempt was successfully triggered
*/
public boolean connect() {
@@ -114,7 +115,7 @@ public final class BtLEQueue {
setDeviceConnectionState(result ? State.CONNECTING : State.NOT_CONNECTED);
return result;
}
-
+
private void setDeviceConnectionState(State newState) {
mGbDevice.setState(newState);
mGbDevice.sendDeviceUpdateIntent(mContext);
@@ -139,24 +140,25 @@ public final class BtLEQueue {
}
setDeviceConnectionState(State.NOT_CONNECTED);
}
-
+
public void dispose() {
if (mDisposed) {
return;
}
mDisposed = true;
// try {
- disconnect();
- dispatchThread.interrupt();
- dispatchThread = null;
+ disconnect();
+ dispatchThread.interrupt();
+ dispatchThread = null;
// dispatchThread.join();
// } catch (InterruptedException ex) {
// Log.e(TAG, "Exception while disposing BtLEQueue", ex);
// }
}
-
+
/**
* Adds a transaction to the end of the queue.
+ *
* @param transaction
*/
public void add(Transaction transaction) {
@@ -164,11 +166,11 @@ public final class BtLEQueue {
mTransactions.add(transaction);
}
}
-
+
public void clear() {
mTransactions.clear();
}
-
+
/**
* Retrieves a list of supported GATT services on the connected device. This should be
* invoked only after {@code BluetoothGatt#discoverServices()} completes successfully.
@@ -188,21 +190,21 @@ public final class BtLEQueue {
@Override
public void onConnectionStateChange(BluetoothGatt gatt, int status, int newState) {
switch (newState) {
- case BluetoothProfile.STATE_CONNECTED:
- Log.i(TAG, "Connected to GATT server.");
- setDeviceConnectionState(State.CONNECTED);
- // Attempts to discover services after successful connection.
- Log.i(TAG, "Attempting to start service discovery:" +
- mBluetoothGatt.discoverServices());
- break;
- case BluetoothProfile.STATE_DISCONNECTED:
- Log.i(TAG, "Disconnected from GATT server.");
- handleDisconnected();
- break;
- case BluetoothProfile.STATE_CONNECTING:
- Log.i(TAG, "Connecting to GATT server...");
- setDeviceConnectionState(State.CONNECTING);
- break;
+ case BluetoothProfile.STATE_CONNECTED:
+ Log.i(TAG, "Connected to GATT server.");
+ setDeviceConnectionState(State.CONNECTED);
+ // Attempts to discover services after successful connection.
+ Log.i(TAG, "Attempting to start service discovery:" +
+ mBluetoothGatt.discoverServices());
+ break;
+ case BluetoothProfile.STATE_DISCONNECTED:
+ Log.i(TAG, "Disconnected from GATT server.");
+ handleDisconnected();
+ break;
+ case BluetoothProfile.STATE_CONNECTING:
+ Log.i(TAG, "Connecting to GATT server...");
+ setDeviceConnectionState(State.CONNECTING);
+ break;
}
}
@@ -223,7 +225,7 @@ public final class BtLEQueue {
if (status == BluetoothGatt.GATT_SUCCESS) {
Log.e(TAG, "Writing characteristic " + characteristic.getUuid() + " succeeded.");
} else {
- Log.e(TAG, "Writing characteristic " + characteristic.getUuid() + " failed: "+ status);
+ Log.e(TAG, "Writing characteristic " + characteristic.getUuid() + " failed: " + status);
}
if (mExternalGattCallback != null) {
mExternalGattCallback.onCharacteristicWrite(gatt, characteristic, status);
@@ -258,7 +260,7 @@ public final class BtLEQueue {
mExternalGattCallback.onReadRemoteRssi(gatt, rssi, status);
}
}
-
+
private void checkWaitingCharacteristic(BluetoothGattCharacteristic characteristic, int status) {
if (status != BluetoothGatt.GATT_SUCCESS) {
mAbortTransaction = true;
diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/btle/GattCallback.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/btle/GattCallback.java
index ce20371d5..35d6915f1 100644
--- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/btle/GattCallback.java
+++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/btle/GattCallback.java
@@ -28,40 +28,40 @@ import android.bluetooth.BluetoothGattCharacteristic;
public interface GattCallback {
/**
- * @see BluetoothGattCallback#onConnectionStateChange(BluetoothGatt, int, int)
* @param gatt
* @param status
* @param newState
+ * @see BluetoothGattCallback#onConnectionStateChange(BluetoothGatt, int, int)
*/
public void onConnectionStateChange(BluetoothGatt gatt, int status, int newState);
/**
- * @see BluetoothGattCallback#onServicesDiscovered(BluetoothGatt, int)
* @param gatt
+ * @see BluetoothGattCallback#onServicesDiscovered(BluetoothGatt, int)
*/
public void onServicesDiscovered(BluetoothGatt gatt);
/**
- * @see BluetoothGattCallback#onCharacteristicRead(BluetoothGatt, BluetoothGattCharacteristic, int)
* @param gatt
* @param characteristic
* @param status
+ * @see BluetoothGattCallback#onCharacteristicRead(BluetoothGatt, BluetoothGattCharacteristic, int)
*/
public void onCharacteristicRead(BluetoothGatt gatt, BluetoothGattCharacteristic characteristic, int status);
/**
- * @see BluetoothGattCallback#onCharacteristicWrite(BluetoothGatt, BluetoothGattCharacteristic, int)
* @param gatt
* @param characteristic
* @param status
+ * @see BluetoothGattCallback#onCharacteristicWrite(BluetoothGatt, BluetoothGattCharacteristic, int)
*/
public void onCharacteristicWrite(BluetoothGatt gatt,
BluetoothGattCharacteristic characteristic, int status);
/**
- * @see BluetoothGattCallback#onCharacteristicChanged(BluetoothGatt, BluetoothGattCharacteristic)
* @param gatt
* @param characteristic
+ * @see BluetoothGattCallback#onCharacteristicChanged(BluetoothGatt, BluetoothGattCharacteristic)
*/
public void onCharacteristicChanged(BluetoothGatt gatt,
BluetoothGattCharacteristic characteristic);
@@ -92,10 +92,10 @@ public interface GattCallback {
// public void onReliableWriteCompleted(BluetoothGatt gatt, int status);
/**
- * @see BluetoothGattCallback#onReadRemoteRssi(BluetoothGatt, int, int)
* @param gatt
* @param rssi
* @param status
+ * @see BluetoothGattCallback#onReadRemoteRssi(BluetoothGatt, int, int)
*/
public void onReadRemoteRssi(BluetoothGatt gatt, int rssi, int status);
diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/btle/ReadAction.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/btle/ReadAction.java
index 598bbb4b7..e0c545b54 100644
--- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/btle/ReadAction.java
+++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/btle/ReadAction.java
@@ -14,7 +14,7 @@ public class ReadAction extends BtLEAction {
public ReadAction(BluetoothGattCharacteristic characteristic) {
super(characteristic);
}
-
+
@Override
public boolean run(BluetoothGatt gatt) {
return gatt.readCharacteristic(getCharacteristic());
diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/btle/Transaction.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/btle/Transaction.java
index 8c4c4ce63..562c3fe14 100644
--- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/btle/Transaction.java
+++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/btle/Transaction.java
@@ -8,7 +8,7 @@ import java.util.Locale;
/**
* Groups a bunch of {@link BtLEAction actions} together, making sure
* that upon failure of one action, all subsequent actions are discarded.
- *
+ *
* @author TREND
*/
public class Transaction {
@@ -18,19 +18,19 @@ public class Transaction {
public Transaction(String taskName) {
this.mName = taskName;
}
-
+
public String getTaskName() {
return mName;
}
-
+
public void add(BtLEAction action) {
mActions.add(action);
}
-
+
public List getActions() {
return Collections.unmodifiableList(mActions);
}
-
+
public boolean isEmpty() {
return mActions.isEmpty();
}
diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/btle/TransactionBuilder.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/btle/TransactionBuilder.java
index 40ae8e0e6..d008fd2cc 100644
--- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/btle/TransactionBuilder.java
+++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/btle/TransactionBuilder.java
@@ -7,11 +7,11 @@ public class TransactionBuilder {
private static final String TAG = TransactionBuilder.class.getSimpleName();
private Transaction mTransaction;
-
+
public TransactionBuilder(String taskName) {
mTransaction = new Transaction(taskName);
}
-
+
public TransactionBuilder read(BluetoothGattCharacteristic characteristic) {
if (characteristic == null) {
Log.w(TAG, "Unable to read characteristic: null");
@@ -20,7 +20,7 @@ public class TransactionBuilder {
ReadAction action = new ReadAction(characteristic);
return add(action);
}
-
+
public TransactionBuilder write(BluetoothGattCharacteristic characteristic, byte[] data) {
if (characteristic == null) {
Log.w(TAG, "Unable to write characteristic: null");
@@ -29,19 +29,20 @@ public class TransactionBuilder {
WriteAction action = new WriteAction(characteristic, data);
return add(action);
}
-
+
public TransactionBuilder wait(int millis) {
WaitAction action = new WaitAction(millis);
return add(action);
}
-
+
public TransactionBuilder add(BtLEAction action) {
mTransaction.add(action);
return this;
}
-
+
/**
* To be used as the final step to execute the transaction by the given queue.
+ *
* @param queue
*/
public void queue(BtLEQueue queue) {
diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/btle/WaitAction.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/btle/WaitAction.java
index b0cf424dd..851f7d5e8 100644
--- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/btle/WaitAction.java
+++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/btle/WaitAction.java
@@ -7,7 +7,7 @@ public class WaitAction extends BtLEAction {
private int mMillis;
public WaitAction(int millis) {
- mMillis = millis;
+ mMillis = millis;
}
@Override
diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/btle/WriteAction.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/btle/WriteAction.java
index 4925a8ace..b09092766 100644
--- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/btle/WriteAction.java
+++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/btle/WriteAction.java
@@ -17,7 +17,7 @@ public class WriteAction extends BtLEAction {
super(characteristic);
this.value = value;
}
-
+
@Override
public boolean run(BluetoothGatt gatt) {
if (getCharacteristic().setValue(value)) {
diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/miband/MiBandService.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/miband/MiBandService.java
index 6d11bcfdd..23341a646 100644
--- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/miband/MiBandService.java
+++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/miband/MiBandService.java
@@ -184,7 +184,7 @@ public class MiBandService {
*/
- private static Map MIBAND_DEBUG;
+ private static Map MIBAND_DEBUG;
static {
MIBAND_DEBUG = new HashMap<>();
diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/miband/MiBandSupport.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/miband/MiBandSupport.java
index f652d64ac..a072f975e 100644
--- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/miband/MiBandSupport.java
+++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/miband/MiBandSupport.java
@@ -1,14 +1,15 @@
package nodomain.freeyourgadget.gadgetbridge.miband;
+import android.bluetooth.BluetoothGatt;
+import android.bluetooth.BluetoothGattCharacteristic;
+import android.util.Log;
+
import java.io.IOException;
import java.util.UUID;
import nodomain.freeyourgadget.gadgetbridge.GBCommand;
import nodomain.freeyourgadget.gadgetbridge.btle.AbstractBTLEDeviceSupport;
import nodomain.freeyourgadget.gadgetbridge.btle.TransactionBuilder;
-import android.bluetooth.BluetoothGatt;
-import android.bluetooth.BluetoothGattCharacteristic;
-import android.util.Log;
public class MiBandSupport extends AbstractBTLEDeviceSupport {
@@ -28,7 +29,7 @@ public class MiBandSupport extends AbstractBTLEDeviceSupport {
public boolean useAutoConnect() {
return true;
}
-
+
private byte[] getDefaultNotification() {
final int vibrateTimes = 1;
final long vibrateDuration = 250l;
@@ -47,7 +48,7 @@ public class MiBandSupport extends AbstractBTLEDeviceSupport {
}
private byte[] getNotification(long vibrateDuration, int vibrateTimes, int flashTimes, int flashColour, int originalColour, long flashDuration) {
- byte[] vibrate = new byte[]{ (byte) 8, (byte) 1 };
+ byte[] vibrate = new byte[]{(byte) 8, (byte) 1};
byte r = 6;
byte g = 0;
byte b = 6;
@@ -72,6 +73,7 @@ public class MiBandSupport extends AbstractBTLEDeviceSupport {
/**
* Part of device initialization process. Do not call manually.
+ *
* @param builder
* @return
*/
@@ -84,6 +86,7 @@ public class MiBandSupport extends AbstractBTLEDeviceSupport {
/**
* Part of device initialization process. Do not call manually.
+ *
* @param builder
* @return
*/
@@ -161,7 +164,7 @@ public class MiBandSupport extends AbstractBTLEDeviceSupport {
@Override
public void onCharacteristicWrite(BluetoothGatt gatt,
- BluetoothGattCharacteristic characteristic, int status) {
+ BluetoothGattCharacteristic characteristic, int status) {
UUID characteristicUUID = characteristic.getUuid();
if (MiBandService.UUID_CHARACTERISTIC_PAIR.equals(characteristicUUID)) {
handlePairResult(characteristic.getValue(), status);
diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/miband/UserInfo.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/miband/UserInfo.java
index dbca48040..1ecc8412a 100644
--- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/miband/UserInfo.java
+++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/miband/UserInfo.java
@@ -17,6 +17,7 @@ public class UserInfo {
/**
* Creates a default user info.
+ *
* @param btAddress the address of the MI Band to connect to.
*/
public static UserInfo getDefault(String btAddress) {
@@ -25,6 +26,7 @@ public class UserInfo {
/**
* Creates a user info with the given data
+ *
* @param address the address of the MI Band to connect to.
*/
public UserInfo(String address, String alias, int gender, int age, int height, int weight, int type) {
@@ -53,7 +55,7 @@ public class UserInfo {
sequence[8] = (byte) (type & 0xff);
for (int u = 9; u < 19; u++)
- sequence[u] = alias.getBytes()[u-9];
+ sequence[u] = alias.getBytes()[u - 9];
byte[] crcSequence = new byte[19];
for (int u = 0; u < crcSequence.length; u++)
@@ -80,7 +82,7 @@ public class UserInfo {
sum = (byte) ((sum & 0xff) & 0x01);
crc = (byte) ((crc & 0xff) >>> 1);
if (sum != 0) {
- crc = (byte)((crc & 0xff) ^ 0x8c);
+ crc = (byte) ((crc & 0xff) ^ 0x8c);
}
extract = (byte) ((extract & 0xff) >>> 1);
}
diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/pebble/PebbleSupport.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/pebble/PebbleSupport.java
index c49e7ea44..93e0ac9e8 100644
--- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/pebble/PebbleSupport.java
+++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/pebble/PebbleSupport.java
@@ -25,7 +25,7 @@ public class PebbleSupport extends AbstractBTDeviceSupport {
protected GBDeviceIoThread createDeviceIOThread() {
return new PebbleIoThread(getDevice(), getDeviceProtocol(), getBluetoothAdapter(), getContext());
}
-
+
@Override
public boolean useAutoConnect() {
return false;