diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/xiaomi/XiaomiEncryptedSupport.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/xiaomi/XiaomiEncryptedSupport.java index fc5719b70..600bef3b4 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/xiaomi/XiaomiEncryptedSupport.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/xiaomi/XiaomiEncryptedSupport.java @@ -88,10 +88,6 @@ public class XiaomiEncryptedSupport extends XiaomiSupport { @Override protected void startAuthentication(final TransactionBuilder builder) { - // FIXME why is this needed? We get an NPE without it - getDevice().setFirmwareVersion("..."); - //getDevice().setFirmwareVersion2("..."); - authService.startEncryptedHandshake(builder); } } diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/xiaomi/XiaomiSupport.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/xiaomi/XiaomiSupport.java index 485bc0df2..5c0581272 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/xiaomi/XiaomiSupport.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/xiaomi/XiaomiSupport.java @@ -78,6 +78,8 @@ public abstract class XiaomiSupport extends AbstractBTLEDeviceSupport { protected final XiaomiSystemService systemService = new XiaomiSystemService(this); protected final XiaomiCalendarService calendarService = new XiaomiCalendarService(this); + private String mFirmwareVersion = null; + private final Map mServiceMap = new LinkedHashMap() {{ put(XiaomiAuthService.COMMAND_TYPE, authService); put(XiaomiMusicService.COMMAND_TYPE, musicService); @@ -107,6 +109,11 @@ public abstract class XiaomiSupport extends AbstractBTLEDeviceSupport { final BluetoothGattCharacteristic btCharacteristicActivityData = getCharacteristic(getCharacteristicActivityData()); final BluetoothGattCharacteristic btCharacteristicDataUpload = getCharacteristic(getCharacteristicDataUpload()); + // FIXME unsetDynamicState unsets the fw version, which causes problems.. + if (getDevice().getFirmwareVersion() == null && mFirmwareVersion != null) { + getDevice().setFirmwareVersion(mFirmwareVersion); + } + if (btCharacteristicCommandRead == null || btCharacteristicCommandWrite == null) { LOG.warn("Characteristics are null, will attempt to reconnect"); builder.add(new SetDeviceStateAction(getDevice(), GBDevice.State.WAITING_FOR_RECONNECT, getContext())); @@ -150,6 +157,11 @@ public abstract class XiaomiSupport extends AbstractBTLEDeviceSupport { @Override public void setContext(final GBDevice gbDevice, final BluetoothAdapter btAdapter, final Context context) { + // FIXME unsetDynamicState unsets the fw version, which causes problems.. + if (mFirmwareVersion == null && gbDevice.getFirmwareVersion() != null) { + mFirmwareVersion = gbDevice.getFirmwareVersion(); + } + super.setContext(gbDevice, btAdapter, context); for (final AbstractXiaomiService service : mServiceMap.values()) { service.setContext(context);