From 21d56493aabab41b584f549c577d07ace743de5d Mon Sep 17 00:00:00 2001 From: Aleksander Nowakowski Date: Thu, 19 Apr 2018 16:56:35 +0200 Subject: [PATCH] Battery level value available in the manager --- .../nrftoolbox/battery/BatteryManager.java | 79 ++++++++++++------- 1 file changed, 51 insertions(+), 28 deletions(-) diff --git a/app/src/main/java/no/nordicsemi/android/nrftoolbox/battery/BatteryManager.java b/app/src/main/java/no/nordicsemi/android/nrftoolbox/battery/BatteryManager.java index 72c5623f..526d9578 100644 --- a/app/src/main/java/no/nordicsemi/android/nrftoolbox/battery/BatteryManager.java +++ b/app/src/main/java/no/nordicsemi/android/nrftoolbox/battery/BatteryManager.java @@ -27,6 +27,8 @@ public abstract class BatteryManager extends private final static UUID BATTERY_LEVEL_CHARACTERISTIC_UUID = UUID.fromString("00002A19-0000-1000-8000-00805f9b34fb"); private BluetoothGattCharacteristic mBatteryLevelCharacteristic; + /** Last received Battery Level value. */ + private Integer mBatteryLevel; /** * The manager constructor. @@ -41,42 +43,62 @@ public abstract class BatteryManager extends protected abstract BatteryManagerGattCallback getGattCallback(); public void readBatteryLevelCharacteristic() { - readCharacteristic(mBatteryLevelCharacteristic) - .with(new BatteryLevelDataCallback() { - @Override - public void onBatteryLevelChanged(@NonNull final BluetoothDevice device, final int batteryLevel) { - mCallbacks.onBatteryLevelChanged(device, batteryLevel); - } + if (isConnected()) { + readCharacteristic(mBatteryLevelCharacteristic) + .with(new BatteryLevelDataCallback() { + @Override + public void onBatteryLevelChanged(@NonNull final BluetoothDevice device, final int batteryLevel) { + mBatteryLevel = batteryLevel; + mCallbacks.onBatteryLevelChanged(device, batteryLevel); + } - @Override - public void onInvalidDataReceived(@NonNull final BluetoothDevice device, final @NonNull Data data) { - log(LogContract.Log.Level.WARNING, "Invalid Battery Level data received: " + data); - } - }) - .fail(status -> log(LogContract.Log.Level.WARNING, "Battery Level characteristic not found")); + @Override + public void onInvalidDataReceived(@NonNull final BluetoothDevice device, final @NonNull Data data) { + log(LogContract.Log.Level.WARNING, "Invalid Battery Level data received: " + data); + } + }) + .fail(status -> log(LogContract.Log.Level.WARNING, "Battery Level characteristic not found")); + } } public void enableBatteryLevelCharacteristicNotifications() { - // If the Battery Level characteristic is null, the request will be ignored - enableNotifications(mBatteryLevelCharacteristic) - .with(new BatteryLevelDataCallback() { - @Override - public void onBatteryLevelChanged(@NonNull final BluetoothDevice device, final int batteryLevel) { - mCallbacks.onBatteryLevelChanged(device, batteryLevel); - } + if (isConnected()) { + // If the Battery Level characteristic is null, the request will be ignored + enableNotifications(mBatteryLevelCharacteristic) + .with(new BatteryLevelDataCallback() { + @Override + public void onBatteryLevelChanged(@NonNull final BluetoothDevice device, final int batteryLevel) { + mBatteryLevel = batteryLevel; + mCallbacks.onBatteryLevelChanged(device, batteryLevel); + } - @Override - public void onInvalidDataReceived(@NonNull final BluetoothDevice device, final @NonNull Data data) { - log(LogContract.Log.Level.WARNING, "Invalid Battery Level data received: " + data); - } - }) - .done(() -> log(LogContract.Log.Level.INFO, "Battery Level notifications enabled")) - .fail(status -> log(LogContract.Log.Level.WARNING, "Battery Level characteristic not found")); + @Override + public void onInvalidDataReceived(@NonNull final BluetoothDevice device, final @NonNull Data data) { + log(LogContract.Log.Level.WARNING, "Invalid Battery Level data received: " + data); + } + }) + .done(() -> log(LogContract.Log.Level.INFO, "Battery Level notifications enabled")) + .fail(status -> log(LogContract.Log.Level.WARNING, "Battery Level characteristic not found")); + } } + /** + * + */ public void disableBatteryLevelCharacteristicNotifications() { - disableNotifications(mBatteryLevelCharacteristic) - .done(() -> log(LogContract.Log.Level.INFO, "Battery Level notifications disabled")); + if (isConnected()) { + disableNotifications(mBatteryLevelCharacteristic) + .done(() -> log(LogContract.Log.Level.INFO, "Battery Level notifications disabled")); + } + } + + /** + * Returns the last received Battery Level value. + * The value is set to null when the device disconnects. + * @return Battery Level value, in percent. + */ + public Integer getBatteryLevel() { + return mBatteryLevel; } protected abstract class BatteryManagerGattCallback extends BleManagerGattCallback { @@ -99,6 +121,7 @@ public abstract class BatteryManager extends @Override protected void onDeviceDisconnected() { mBatteryLevelCharacteristic = null; + mBatteryLevel = null; } } }