From 3609af3a18237f9f8e1d7eb79d8dcedcc0ca1752 Mon Sep 17 00:00:00 2001 From: vanous Date: Sun, 31 Oct 2021 17:36:04 +0100 Subject: [PATCH] Add batteryConfig - clarify battery index - icon and label settings --- .../activities/BatteryInfoActivity.java | 2 +- .../adapter/GBDeviceAdapterv2.java | 34 +++++++++++-------- .../devices/AbstractDeviceCoordinator.java | 8 +++++ .../devices/DeviceCoordinator.java | 3 ++ .../GalaxyBudsDeviceCoordinator.java | 10 ++++++ .../devices/nothing/Ear1Coordinator.java | 14 ++++++++ .../gadgetbridge/impl/GBDevice.java | 26 ++++++++++++++ .../gadgetbridge/model/BatteryConfig.java | 29 ++++++++++++++++ .../galaxy_buds/GalaxyBudsProtocol.java | 1 + .../gadgetbridge/util/DeviceHelper.java | 7 ++++ app/src/main/res/drawable/ic_cases.xml | 13 +++++++ .../main/res/drawable/ic_earbuds_battery.xml | 10 ++++++ app/src/main/res/values/strings.xml | 1 + 13 files changed, 143 insertions(+), 15 deletions(-) create mode 100644 app/src/main/java/nodomain/freeyourgadget/gadgetbridge/model/BatteryConfig.java create mode 100644 app/src/main/res/drawable/ic_cases.xml create mode 100644 app/src/main/res/drawable/ic_earbuds_battery.xml diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/BatteryInfoActivity.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/BatteryInfoActivity.java index 2a23e55af..3ea97fab6 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/BatteryInfoActivity.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/BatteryInfoActivity.java @@ -44,7 +44,7 @@ BatteryInfoActivity extends AbstractGBActivity { Bundle bundle = intent.getExtras(); if (bundle != null) { gbDevice = bundle.getParcelable(GBDevice.EXTRA_DEVICE); - batteryIndex = bundle.getInt("BATTERY_INDEX", 0); + batteryIndex = bundle.getInt(GBDevice.BATTERY_INDEX, 0); } else { throw new IllegalArgumentException("Must provide a device when invoking this activity"); } diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/adapter/GBDeviceAdapterv2.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/adapter/GBDeviceAdapterv2.java index e72bf87a1..6a7ec6fae 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/adapter/GBDeviceAdapterv2.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/adapter/GBDeviceAdapterv2.java @@ -155,34 +155,40 @@ public class GBDeviceAdapterv2 extends RecyclerView.Adapter getPairingActivity() { @@ -133,6 +141,8 @@ public class GalaxyBudsDeviceCoordinator extends AbstractDeviceCoordinator { } + + @Override public int[] getSupportedDeviceSpecificSettings(GBDevice device) { return new int[]{ diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/nothing/Ear1Coordinator.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/nothing/Ear1Coordinator.java index b63c97ff3..b1910ed46 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/nothing/Ear1Coordinator.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/nothing/Ear1Coordinator.java @@ -17,6 +17,7 @@ import nodomain.freeyourgadget.gadgetbridge.entities.Device; import nodomain.freeyourgadget.gadgetbridge.impl.GBDevice; import nodomain.freeyourgadget.gadgetbridge.impl.GBDeviceCandidate; import nodomain.freeyourgadget.gadgetbridge.model.ActivitySample; +import nodomain.freeyourgadget.gadgetbridge.model.BatteryConfig; import nodomain.freeyourgadget.gadgetbridge.model.DeviceType; public class Ear1Coordinator extends AbstractDeviceCoordinator { @@ -120,6 +121,19 @@ public class Ear1Coordinator extends AbstractDeviceCoordinator { } + @Override + public int getBatteryCount() { + return 3; + } + + @Override + public BatteryConfig[] getBatteryConfig() { + BatteryConfig battery1 = new BatteryConfig(0, R.drawable.ic_cases, R.string.box); + BatteryConfig battery2 = new BatteryConfig(1, R.drawable.ic_earbuds_battery, R.string.right); + BatteryConfig battery3 = new BatteryConfig(2, R.drawable.ic_earbuds_battery, R.string.left); + return new BatteryConfig[]{battery1, battery2, battery3}; + } + @Override public int[] getSupportedDeviceSpecificSettings(GBDevice device) { return new int[] { 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 d2f0827cb..16424f04d 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/impl/GBDevice.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/impl/GBDevice.java @@ -60,6 +60,8 @@ public class GBDevice implements Parcelable { private static final Logger LOG = LoggerFactory.getLogger(GBDevice.class); public static final short RSSI_UNKNOWN = 0; public static final short BATTERY_UNKNOWN = -1; + public static final short BATTERY_ICON_DEFAULT = -1; + public static final short BATTERY_LABEL_DEFAULT = -1; private static final short BATTERY_THRESHOLD_PERCENT = 10; public static final String EXTRA_DEVICE = "device"; public static final String EXTRA_UUID = "extraUUID"; @@ -68,6 +70,7 @@ public class GBDevice implements Parcelable { private static final String DEVINFO_FW2_VER = "FW2: "; private static final String DEVINFO_ADDR = "ADDR: "; private static final String DEVINFO_ADDR2 = "ADDR2: "; + public static final String BATTERY_INDEX = "battery_index"; private String mName; private String mAlias; private final String mAddress; @@ -83,6 +86,8 @@ public class GBDevice implements Parcelable { private float[] mBatteryVoltage = {BATTERY_UNKNOWN, BATTERY_UNKNOWN, BATTERY_UNKNOWN}; private short mBatteryThresholdPercent = BATTERY_THRESHOLD_PERCENT; private BatteryState[] mBatteryState = {UNKNOWN, UNKNOWN, UNKNOWN}; + private int[] mBatteryIcons = {BATTERY_ICON_DEFAULT, BATTERY_ICON_DEFAULT, BATTERY_ICON_DEFAULT}; + private int[] mBatteryLabels = {BATTERY_LABEL_DEFAULT, BATTERY_LABEL_DEFAULT, BATTERY_LABEL_DEFAULT}; private short mRssi = RSSI_UNKNOWN; private String mBusyTask; @@ -120,6 +125,8 @@ public class GBDevice implements Parcelable { mBatteryVoltage = in.createFloatArray(); mBatteryThresholdPercent = (short) in.readInt(); mBatteryState = ordinalsToEnums(in.createIntArray()); + mBatteryIcons = in.createIntArray(); + mBatteryLabels = in.createIntArray(); mRssi = (short) in.readInt(); mBusyTask = in.readString(); mDeviceInfos = in.readArrayList(getClass().getClassLoader()); @@ -146,6 +153,8 @@ public class GBDevice implements Parcelable { dest.writeFloatArray(mBatteryVoltage); dest.writeInt(mBatteryThresholdPercent); dest.writeIntArray(enumsToOrdinals(mBatteryState)); + dest.writeIntArray(mBatteryIcons); + dest.writeIntArray(mBatteryLabels); dest.writeInt(mRssi); dest.writeString(mBusyTask); dest.writeList(mDeviceInfos); @@ -347,6 +356,7 @@ public class GBDevice implements Parcelable { } private void unsetDynamicState() { + setBatteryLevel(BATTERY_UNKNOWN, 0); setBatteryLevel(BATTERY_UNKNOWN, 1); setBatteryLevel(BATTERY_UNKNOWN, 2); @@ -569,6 +579,22 @@ public class GBDevice implements Parcelable { this.mBatteryThresholdPercent = batteryThresholdPercent; } + public int getBatteryIcon(int index) { + return this.mBatteryIcons[index]; + } + + public void setBatteryIcon(int icon, int index) { + this.mBatteryIcons[index] = icon; + } + + public int getBatteryLabel(int index) { + return this.mBatteryLabels[index]; + } + + public void setBatteryLabel(int label, int index) { + this.mBatteryLabels[index] = label; + } + @Override public String toString() { return "Device " + getName() + ", " + getAddress() + ", " + getStateString(false); diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/model/BatteryConfig.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/model/BatteryConfig.java new file mode 100644 index 000000000..aa495e81b --- /dev/null +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/model/BatteryConfig.java @@ -0,0 +1,29 @@ +package nodomain.freeyourgadget.gadgetbridge.model; + +public class BatteryConfig { + + private final int batteryIndex; + private final int icon; + private final int label; + + public BatteryConfig(int batteryIndex, int icon, int label) { + this.batteryIndex = batteryIndex; + this.icon = icon; + this.label = label; + } + + public int getBatteryIndex() { + return batteryIndex; + } + + public int icon() { + return icon; + } + + public int label() { + return label; + } + +} + + diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/galaxy_buds/GalaxyBudsProtocol.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/galaxy_buds/GalaxyBudsProtocol.java index f61b55a76..4ea8957a7 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/galaxy_buds/GalaxyBudsProtocol.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/galaxy_buds/GalaxyBudsProtocol.java @@ -16,6 +16,7 @@ import java.util.List; import java.util.UUID; import nodomain.freeyourgadget.gadgetbridge.GBApplication; +import nodomain.freeyourgadget.gadgetbridge.R; import nodomain.freeyourgadget.gadgetbridge.activities.devicesettings.DeviceSettingsPreferenceConst; import nodomain.freeyourgadget.gadgetbridge.deviceevents.GBDeviceEvent; import nodomain.freeyourgadget.gadgetbridge.deviceevents.GBDeviceEventBatteryInfo; diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/util/DeviceHelper.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/util/DeviceHelper.java index 4ea75b6c6..1bc6eb8e4 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/util/DeviceHelper.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/util/DeviceHelper.java @@ -118,6 +118,7 @@ import nodomain.freeyourgadget.gadgetbridge.entities.Device; import nodomain.freeyourgadget.gadgetbridge.entities.DeviceAttributes; import nodomain.freeyourgadget.gadgetbridge.impl.GBDevice; import nodomain.freeyourgadget.gadgetbridge.impl.GBDeviceCandidate; +import nodomain.freeyourgadget.gadgetbridge.model.BatteryConfig; import nodomain.freeyourgadget.gadgetbridge.model.DeviceType; public class DeviceHelper { @@ -340,6 +341,12 @@ public class DeviceHelper { public GBDevice toGBDevice(Device dbDevice) { DeviceType deviceType = DeviceType.fromKey(dbDevice.getType()); GBDevice gbDevice = new GBDevice(dbDevice.getIdentifier(), dbDevice.getName(), dbDevice.getAlias(), deviceType); + DeviceCoordinator coordinator = getCoordinator(gbDevice); + for (BatteryConfig batteryConfig : coordinator.getBatteryConfig()) { + gbDevice.setBatteryIcon(batteryConfig.icon(), batteryConfig.getBatteryIndex()); + gbDevice.setBatteryLabel(batteryConfig.label(), batteryConfig.getBatteryIndex()); + } + List deviceAttributesList = dbDevice.getDeviceAttributesList(); if (deviceAttributesList.size() > 0) { gbDevice.setModel(dbDevice.getModel()); diff --git a/app/src/main/res/drawable/ic_cases.xml b/app/src/main/res/drawable/ic_cases.xml new file mode 100644 index 000000000..1f973ff21 --- /dev/null +++ b/app/src/main/res/drawable/ic_cases.xml @@ -0,0 +1,13 @@ + + + + diff --git a/app/src/main/res/drawable/ic_earbuds_battery.xml b/app/src/main/res/drawable/ic_earbuds_battery.xml new file mode 100644 index 000000000..113734683 --- /dev/null +++ b/app/src/main/res/drawable/ic_earbuds_battery.xml @@ -0,0 +1,10 @@ + + + diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 6e9c485e5..5ece8c503 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -383,6 +383,7 @@ Other Left Right + Case Horizontal Vertical No valid user data given, using dummy user data for now.