diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/Huami2021ChunkedDecoder.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/Huami2021ChunkedDecoder.java index d9e22add37..a3d19f381d 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/Huami2021ChunkedDecoder.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/Huami2021ChunkedDecoder.java @@ -108,8 +108,7 @@ public class Huami2021ChunkedDecoder { if (sharedSessionKey == null) { // Should never happen LOG.warn("Got encrypted message, but there's no shared session key"); - currentHandle = null; - currentType = 0; + reset(); return false; } @@ -121,9 +120,8 @@ public class Huami2021ChunkedDecoder { buf = CryptoUtils.decryptAES(buf, messagekey); buf = ArrayUtils.subarray(buf, 0, currentLength); } catch (Exception e) { - LOG.warn("error decrypting " + e); - currentHandle = null; - currentType = 0; + LOG.warn("error decrypting {}", e.getMessage()); + reset(); return false; } } @@ -139,10 +137,14 @@ public class Huami2021ChunkedDecoder { } catch (final Exception e) { LOG.error("Failed to handle payload", e); } - currentHandle = null; - currentType = 0; + reset(); } return needsAck; } + + public void reset() { + currentHandle = null; + currentType = 0; + } } diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/Huami2021ChunkedEncoder.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/Huami2021ChunkedEncoder.java index 23a7b3d435..69b43042f8 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/Huami2021ChunkedEncoder.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/Huami2021ChunkedEncoder.java @@ -154,4 +154,9 @@ public class Huami2021ChunkedEncoder { count++; } } + + public void reset() { + writeHandle = 0; + encryptedSequenceNr = 0; + } } diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/HuamiFetcher.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/HuamiFetcher.java index b35b45172a..6db9b22e23 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/HuamiFetcher.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/HuamiFetcher.java @@ -45,6 +45,11 @@ public class HuamiFetcher { this.mSupport = mSupport; } + public void reset() { + fetchOperationQueue.clear(); + currentOperation = null; + } + public void onFetchRecordedData(final int dataTypes) { final GBDevice gbDevice = mSupport.getDevice(); final DeviceCoordinator coordinator = mSupport.getCoordinator(); diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/zeppos/ZeppOsBtbrSupport.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/zeppos/ZeppOsBtbrSupport.java index 14fb40b8c4..78b80e77ea 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/zeppos/ZeppOsBtbrSupport.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/zeppos/ZeppOsBtbrSupport.java @@ -124,6 +124,8 @@ public class ZeppOsBtbrSupport extends AbstractBTBRDeviceSupport implements Zepp @Override protected TransactionBuilder initializeDevice(final TransactionBuilder builder) { + packetBuffer.clear(); + write(builder, CMD_CHANNELS_GET, new byte[]{}); scheduleNextPing(25 * 60 * 1000L); return builder; diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/zeppos/ZeppOsSupport.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/zeppos/ZeppOsSupport.java index 364290734f..f3af6555d3 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/zeppos/ZeppOsSupport.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/zeppos/ZeppOsSupport.java @@ -257,10 +257,6 @@ public class ZeppOsSupport extends AbstractDeviceSupport this.communicator = communicator; } - ZeppOsCommunicator getCommunicator() { - return communicator; - } - @Override public void setContext(final GBDevice gbDevice, final BluetoothAdapter btAdapter, final Context context) { super.setContext(gbDevice, btAdapter, context); @@ -297,6 +293,10 @@ public class ZeppOsSupport extends AbstractDeviceSupport } protected void initializeDevice(final ZeppOsTransactionBuilder builder) { + huami2021ChunkedEncoder.reset(); + huami2021ChunkedDecoder.reset(); + fetcher.reset(); + builder.setDeviceState(getDevice(), GBDevice.State.AUTHENTICATING, getContext()); authenticationService.startAuthentication(builder); diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/zeppos/services/ZeppOsFindDeviceService.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/zeppos/services/ZeppOsFindDeviceService.java index 3cf269744e..046949883f 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/zeppos/services/ZeppOsFindDeviceService.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/zeppos/services/ZeppOsFindDeviceService.java @@ -129,6 +129,11 @@ public class ZeppOsFindDeviceService extends AbstractZeppOsService { @Override public void initialize(final ZeppOsTransactionBuilder builder) { + findWatchHandler.removeCallbacksAndMessages(null); + findPhoneHandler.removeCallbacksAndMessages(null); + findingWatch = false; + findPhoneStarted = false; + write(builder, CMD_CAPABILITIES_REQUEST); } diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/zeppos/services/ZeppOsHeartRateService.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/zeppos/services/ZeppOsHeartRateService.java index 87c0004532..985ec25c97 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/zeppos/services/ZeppOsHeartRateService.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/zeppos/services/ZeppOsHeartRateService.java @@ -91,6 +91,11 @@ public class ZeppOsHeartRateService extends AbstractZeppOsService { LOG.warn("Unexpected heart rate byte {}", String.format("0x%02x", payload[0])); } + @Override + public void initialize(final ZeppOsTransactionBuilder builder) { + realtimeHandler.removeCallbacksAndMessages(null); + } + @Override public void dispose() { realtimeHandler.removeCallbacksAndMessages(null); diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/zeppos/services/ZeppOsMusicService.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/zeppos/services/ZeppOsMusicService.java index 2b30eb3c65..80a7174227 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/zeppos/services/ZeppOsMusicService.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/zeppos/services/ZeppOsMusicService.java @@ -116,6 +116,9 @@ public class ZeppOsMusicService extends AbstractZeppOsService { @Override public void initialize(final ZeppOsTransactionBuilder builder) { + handler.removeCallbacksAndMessages(null); + isMusicAppStarted = false; + if (mediaManager == null) { mediaManager = new MediaManager(getContext()); } diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/zeppos/services/ZeppOsNotificationService.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/zeppos/services/ZeppOsNotificationService.java index 8d9aa50983..448dade6cf 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/zeppos/services/ZeppOsNotificationService.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/zeppos/services/ZeppOsNotificationService.java @@ -104,6 +104,9 @@ public class ZeppOsNotificationService extends AbstractZeppOsService { @Override public void initialize(final ZeppOsTransactionBuilder builder) { + mNotificationReplyAction.clear(); + mNotificationPictures.clear(); + write(builder, NOTIFICATION_CMD_CAPABILITIES_REQUEST); } diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/zeppos/services/ZeppOsWatchfaceService.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/zeppos/services/ZeppOsWatchfaceService.java index 6c4aab2219..398ea72863 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/zeppos/services/ZeppOsWatchfaceService.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/zeppos/services/ZeppOsWatchfaceService.java @@ -172,6 +172,8 @@ public class ZeppOsWatchfaceService extends AbstractZeppOsService { @Override public void initialize(final ZeppOsTransactionBuilder builder) { + watchfaces.clear(); + requestWatchfaces(builder); requestCurrentWatchface(builder); } diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/zeppos/services/ZeppOsWifiService.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/zeppos/services/ZeppOsWifiService.java index 2558db29a3..6230d114df 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/zeppos/services/ZeppOsWifiService.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/zeppos/services/ZeppOsWifiService.java @@ -28,6 +28,7 @@ import java.util.Locale; import nodomain.freeyourgadget.gadgetbridge.activities.devicesettings.DeviceSettingsPreferenceConst; import nodomain.freeyourgadget.gadgetbridge.deviceevents.GBDeviceEventUpdatePreferences; +import nodomain.freeyourgadget.gadgetbridge.model.ActivityKind; import nodomain.freeyourgadget.gadgetbridge.service.devices.huami.zeppos.ZeppOsSupport; import nodomain.freeyourgadget.gadgetbridge.service.devices.huami.zeppos.AbstractZeppOsService; import nodomain.freeyourgadget.gadgetbridge.service.devices.huami.zeppos.ZeppOsTransactionBuilder; diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/zeppos/services/ZeppOsWorkoutService.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/zeppos/services/ZeppOsWorkoutService.java index 2a4dae6404..06dc6f56aa 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/zeppos/services/ZeppOsWorkoutService.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/zeppos/services/ZeppOsWorkoutService.java @@ -34,6 +34,7 @@ import nodomain.freeyourgadget.gadgetbridge.service.devices.huami.HuamiUtils; import nodomain.freeyourgadget.gadgetbridge.service.devices.huami.zeppos.AbstractZeppOsService; import nodomain.freeyourgadget.gadgetbridge.service.devices.huami.zeppos.ZeppOsActivityType; import nodomain.freeyourgadget.gadgetbridge.service.devices.huami.zeppos.ZeppOsSupport; +import nodomain.freeyourgadget.gadgetbridge.service.devices.huami.zeppos.ZeppOsTransactionBuilder; public class ZeppOsWorkoutService extends AbstractZeppOsService { private static final Logger LOG = LoggerFactory.getLogger(ZeppOsWorkoutService.class); @@ -74,6 +75,13 @@ public class ZeppOsWorkoutService extends AbstractZeppOsService { return ENDPOINT; } + @Override + public void initialize(final ZeppOsTransactionBuilder builder) { + workoutNeedsGps = false; + workoutActivityKind = ActivityKind.UNKNOWN; + lastPhoneGpsSent = 0; + } + @Override public void handlePayload(final byte[] payload) { switch (payload[0]) {