From eb39ce93670a6d40ea65dd784da54724e97ea67f Mon Sep 17 00:00:00 2001 From: Daniele Gobbetti Date: Fri, 21 Aug 2015 08:41:57 +0200 Subject: [PATCH] Further improvements: - append a string on the control center when the device is charging - battery status string is no more, welcome battery state enum - the notification will not be shown when the device is charging, even if the level is below threshold --- .../gadgetbridge/adapter/GBDeviceAdapter.java | 6 ++++ .../GBDeviceEventBatteryInfo.java | 11 +++---- .../gadgetbridge/impl/GBDevice.java | 16 +++++----- .../service/AbstractDeviceSupport.java | 8 +++-- .../service/devices/miband/BatteryInfo.java | 31 ++++++++++++------- .../service/devices/miband/MiBandSupport.java | 1 + app/src/main/res/values/strings.xml | 4 --- 7 files changed, 44 insertions(+), 33 deletions(-) diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/adapter/GBDeviceAdapter.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/adapter/GBDeviceAdapter.java index e671360f3..a92bbbdce 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/adapter/GBDeviceAdapter.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/adapter/GBDeviceAdapter.java @@ -11,6 +11,7 @@ import android.widget.TextView; import java.util.List; +import nodomain.freeyourgadget.gadgetbridge.deviceevents.GBDeviceEventBatteryInfo; import nodomain.freeyourgadget.gadgetbridge.impl.GBDevice; import nodomain.freeyourgadget.gadgetbridge.R; @@ -59,6 +60,11 @@ public class GBDeviceAdapter extends ArrayAdapter { short batteryLevel = device.getBatteryLevel(); if (batteryLevel != GBDevice.BATTERY_UNKNOWN) { batteryStatusLabel.setText("BAT: " + device.getBatteryLevel() + "%"); + GBDeviceEventBatteryInfo.BatteryState batteryState = device.getBatteryState(); + if (GBDeviceEventBatteryInfo.BatteryState.BATTERY_CHARGING.equals(batteryState) || + GBDeviceEventBatteryInfo.BatteryState.BATTERY_CHARGING_FULL.equals(batteryState)) { + batteryStatusLabel.append(" CHG"); + } } else { batteryStatusLabel.setText(""); } diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/deviceevents/GBDeviceEventBatteryInfo.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/deviceevents/GBDeviceEventBatteryInfo.java index 78c315916..2fe75c162 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/deviceevents/GBDeviceEventBatteryInfo.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/deviceevents/GBDeviceEventBatteryInfo.java @@ -6,8 +6,6 @@ import java.util.GregorianCalendar; public class GBDeviceEventBatteryInfo extends GBDeviceEvent { public GregorianCalendar lastChargeTime= null; public BatteryState state = BatteryState.UNKNOWN; - //TODO: I think the string should be deprecated in favor of the Enum above - public String status; public short level = 50; public int numCharges = -1; @@ -17,10 +15,11 @@ public class GBDeviceEventBatteryInfo extends GBDeviceEvent { public enum BatteryState { UNKNOWN, - CHARGE_FULL, - CHARGE_MEDIUM, - CHARGE_LOW, - CHARGING, + BATTERY_NORMAL, + BATTERY_LOW, + BATTERY_CHARGING, + BATTERY_CHARGING_FULL, + BATTERY_NOT_CHARGING_FULL } public boolean extendedInfoAvailable() { diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/impl/GBDevice.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/impl/GBDevice.java index 5c7a346e1..987d65868 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/impl/GBDevice.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/impl/GBDevice.java @@ -9,6 +9,7 @@ import android.support.v4.content.LocalBroadcastManager; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import nodomain.freeyourgadget.gadgetbridge.deviceevents.GBDeviceEventBatteryInfo.BatteryState; import nodomain.freeyourgadget.gadgetbridge.model.DeviceType; import nodomain.freeyourgadget.gadgetbridge.GBApplication; import nodomain.freeyourgadget.gadgetbridge.R; @@ -42,6 +43,7 @@ public class GBDevice implements Parcelable { private short mBatteryThresholdPercent = BATTERY_THRESHOLD_PERCENT; //TODO: get rid of String mBatteryStatus in favor of Enum mBatteryState private String mBatteryStatus; + private BatteryState mBatteryState; private short mRssi = RSSI_UNKNOWN; private String mBusyTask; @@ -180,7 +182,7 @@ public class GBDevice implements Parcelable { private void unsetDynamicState() { setBatteryLevel(BATTERY_UNKNOWN); - setBatteryStatus(null); + setBatteryState(BatteryState.UNKNOWN); setFirmwareVersion(null); setRssi(RSSI_UNKNOWN); if (mBusyTask != null) { @@ -284,18 +286,14 @@ public class GBDevice implements Parcelable { } } - /** - * Returns a string representation of the battery state. - */ - public String getBatteryStatus() { - return mBatteryStatus != null ? mBatteryStatus : GBApplication.getContext().getString(R.string._unknown_); + public BatteryState getBatteryState() { + return mBatteryState; } - public void setBatteryStatus(String batteryStatus) { - mBatteryStatus = batteryStatus; + public void setBatteryState(BatteryState mBatteryState) { + this.mBatteryState = mBatteryState; } - public short getBatteryThresholdPercent() { return mBatteryThresholdPercent; } diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/AbstractDeviceSupport.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/AbstractDeviceSupport.java index 037a12f2d..4e32f6832 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/AbstractDeviceSupport.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/AbstractDeviceSupport.java @@ -228,9 +228,13 @@ public abstract class AbstractDeviceSupport implements DeviceSupport { Context context = getContext(); LOG.info("Got BATTERY_INFO device event"); gbDevice.setBatteryLevel(deviceEvent.level); - gbDevice.setBatteryStatus(deviceEvent.status); + gbDevice.setBatteryState(deviceEvent.state); - if (deviceEvent.level <= gbDevice.getBatteryThresholdPercent()) { + //show the notification if the battery level is below threshold and only if not connected to charger + if (deviceEvent.level <= gbDevice.getBatteryThresholdPercent() && + (GBDeviceEventBatteryInfo.BatteryState.BATTERY_LOW.equals(deviceEvent.state) || + GBDeviceEventBatteryInfo.BatteryState.BATTERY_NORMAL.equals(deviceEvent.state)) + ) { GB.updateBatteryNotification(context.getString(R.string.notif_battery_low_percent, gbDevice.getName(), deviceEvent.level), deviceEvent.extendedInfoAvailable() ? context.getString(R.string.notif_battery_low_percent, gbDevice.getName(), deviceEvent.level) + "\n" + diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/miband/BatteryInfo.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/miband/BatteryInfo.java index f21bef05e..53bf6c5f6 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/miband/BatteryInfo.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/miband/BatteryInfo.java @@ -3,10 +3,15 @@ package nodomain.freeyourgadget.gadgetbridge.service.devices.miband; import java.util.Calendar; import java.util.GregorianCalendar; -import nodomain.freeyourgadget.gadgetbridge.GBApplication; -import nodomain.freeyourgadget.gadgetbridge.R; +import nodomain.freeyourgadget.gadgetbridge.deviceevents.GBDeviceEventBatteryInfo.BatteryState; public class BatteryInfo extends AbstractInfo { + public static final byte DEVICE_BATTERY_NORMAL = 0; + public static final byte DEVICE_BATTERY_LOW = 1; + public static final byte DEVICE_BATTERY_CHARGING = 2; + public static final byte DEVICE_BATTERY_CHARGING_FULL = 3; + public static final byte DEVICE_BATTERY_CHARGE_OFF = 4; + public BatteryInfo(byte[] data) { super(data); } @@ -18,21 +23,23 @@ public class BatteryInfo extends AbstractInfo { return 50; // actually unknown } - public String getStatus() { + public BatteryState getState() { if (mData.length >= 10) { int value = mData[9]; switch (value) { - case 1: - return GBApplication.getContext().getString(R.string.battery_low); - case 2: - return GBApplication.getContext().getString(R.string.battery_medium); - case 3: - return GBApplication.getContext().getString(R.string.battery_full); - case 4: - return GBApplication.getContext().getString(R.string.battery_not_charging); + case DEVICE_BATTERY_NORMAL: + return BatteryState.BATTERY_NORMAL; + case DEVICE_BATTERY_LOW: + return BatteryState.BATTERY_LOW; + case DEVICE_BATTERY_CHARGING: + return BatteryState.BATTERY_CHARGING; + case DEVICE_BATTERY_CHARGING_FULL: + return BatteryState.BATTERY_CHARGING_FULL; + case DEVICE_BATTERY_CHARGE_OFF: + return BatteryState.BATTERY_NOT_CHARGING_FULL; } } - return GBApplication.getContext().getString(R.string._unknown_); + return BatteryState.UNKNOWN; } public GregorianCalendar getLastChargeTime() { diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/miband/MiBandSupport.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/miband/MiBandSupport.java index be9a5db93..db2afa64c 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/miband/MiBandSupport.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/miband/MiBandSupport.java @@ -737,6 +737,7 @@ public class MiBandSupport extends AbstractBTLEDeviceSupport { if (status == BluetoothGatt.GATT_SUCCESS) { BatteryInfo info = new BatteryInfo(value); batteryCmd.level = ((short) info.getLevelInPercent()); + batteryCmd.state = info.getState(); batteryCmd.lastChargeTime = info.getLastChargeTime(); batteryCmd.numCharges = info.getNumCharges(); handleGBDeviceEvent(batteryCmd); diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 4bd5358b0..37490d5e6 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -74,10 +74,6 @@ tap a device to connect Cannot connect. BT address invalid? Gadgetbridge running - low - medium - full - not charging installing binary %1$d/%2$d installation failed! installation successful