diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/Huami2021Support.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/Huami2021Support.java index d0f0fcdb2..33838573d 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/Huami2021Support.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/Huami2021Support.java @@ -43,6 +43,8 @@ import android.net.Uri; import android.os.Handler; import android.widget.Toast; +import androidx.annotation.Nullable; + import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -57,10 +59,12 @@ import java.util.ArrayList; import java.util.Calendar; import java.util.Date; import java.util.HashMap; +import java.util.HashSet; import java.util.LinkedHashMap; import java.util.List; import java.util.Locale; import java.util.Map; +import java.util.Set; import java.util.UUID; import java.util.concurrent.TimeUnit; @@ -170,6 +174,7 @@ public abstract class Huami2021Support extends HuamiSupport implements ZeppOsFil private final ZeppOsLoyaltyCardService loyaltyCardService = new ZeppOsLoyaltyCardService(this); private final ZeppOsMusicService musicService = new ZeppOsMusicService(this); + private final Set mSupportedServices = new HashSet<>(); private final Map mServiceMap = new LinkedHashMap() {{ put(servicesService.getEndpoint(), servicesService); put(fileTransferService.getEndpoint(), fileTransferService); @@ -967,33 +972,69 @@ public abstract class Huami2021Support extends HuamiSupport implements ZeppOsFil @Override public void phase3Initialize(final TransactionBuilder builder) { + LOG.info("2021 phase3Initialize..."); + // Make sure that performInitialized is not called accidentally in here // (eg. by creating a new TransactionBuilder). // In those cases, the device will be initialized twice, which will change the shared - // session key during these phase3 requests and decrypting messages will fail + // session key during these requests and decrypting messages will fail - final Huami2021Coordinator coordinator = getCoordinator(); + // In here, we only request the list of supported services - they will all be initialized in + // initializeServices below + mSupportedServices.clear(); + servicesService.requestServices(builder); + } - LOG.info("2021 phase3Initialize..."); - setUserInfo(builder); + public void addSupportedService(final short endpoint) { + mSupportedServices.add(endpoint); + } - for (final HuamiVibrationPatternNotificationType type : coordinator.getVibrationPatternNotificationTypes(gbDevice)) { - // FIXME: Can we read these from the band? - final String typeKey = type.name().toLowerCase(Locale.ROOT); - setVibrationPattern(builder, HuamiConst.PREF_HUAMI_VIBRATION_PROFILE_PREFIX + typeKey); + public void initializeServices() { + LOG.info("2021 initializeServices..."); + + try { + final TransactionBuilder builder = createTransactionBuilder("initialize services"); + + // At this point we got the service list from phase 3, so we know which + // services are supported, and whether they are encrypted or not + + final Huami2021Coordinator coordinator = getCoordinator(); + + // TODO move this to a service + setUserInfo(builder); + + // TODO move this to a service + for (final HuamiVibrationPatternNotificationType type : coordinator.getVibrationPatternNotificationTypes(gbDevice)) { + // FIXME: Can we read these from the band? + final String typeKey = type.name().toLowerCase(Locale.ROOT); + setVibrationPattern(builder, HuamiConst.PREF_HUAMI_VIBRATION_PROFILE_PREFIX + typeKey); + } + + // TODO move these to a service + cannedMessagesService.requestCannedMessages(builder); + alarmsService.requestAlarms(builder); + + for (AbstractZeppOsService service : mServiceMap.values()) { + if (mSupportedServices.contains(service.getEndpoint())) { + // Only initialize supported services + service.initialize(builder); + } + } + + if (coordinator.supportsBluetoothPhoneCalls(gbDevice)) { + phoneService.requestCapabilities(builder); + phoneService.requestEnabled(builder); + } + + builder.queue(getQueue()); + } catch (Exception e) { + LOG.error("failed initializing device", e); } + } - cannedMessagesService.requestCannedMessages(builder); - alarmsService.requestAlarms(builder); - - for (AbstractZeppOsService service : mServiceMap.values()) { - service.initialize(builder); - } - - if (coordinator.supportsBluetoothPhoneCalls(gbDevice)) { - phoneService.requestCapabilities(builder); - phoneService.requestEnabled(builder); - } + @Nullable + public AbstractZeppOsService getService(final short endpoint) { + return mServiceMap.get(endpoint); } @Override @@ -1099,6 +1140,7 @@ public abstract class Huami2021Support extends HuamiSupport implements ZeppOsFil return; } + // TODO: Move these services to dedicated classes, so they get the encryption correctly switch (type) { case CHUNKED2021_ENDPOINT_AUTH: LOG.warn("Unexpected auth payload {}", GB.hexdump(payload)); diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/zeppos/AbstractZeppOsService.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/zeppos/AbstractZeppOsService.java index 2ea00c7d0..1b4780f55 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/zeppos/AbstractZeppOsService.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/zeppos/AbstractZeppOsService.java @@ -18,25 +18,44 @@ package nodomain.freeyourgadget.gadgetbridge.service.devices.huami.zeppos; import android.content.Context; +import androidx.annotation.Nullable; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + import nodomain.freeyourgadget.gadgetbridge.GBApplication; import nodomain.freeyourgadget.gadgetbridge.deviceevents.GBDeviceEvent; import nodomain.freeyourgadget.gadgetbridge.devices.DeviceCoordinator; import nodomain.freeyourgadget.gadgetbridge.devices.huami.Huami2021Coordinator; import nodomain.freeyourgadget.gadgetbridge.service.btle.TransactionBuilder; import nodomain.freeyourgadget.gadgetbridge.service.devices.huami.Huami2021Support; -import nodomain.freeyourgadget.gadgetbridge.util.DeviceHelper; +import nodomain.freeyourgadget.gadgetbridge.service.devices.huami.zeppos.services.ZeppOsAlexaService; import nodomain.freeyourgadget.gadgetbridge.util.Prefs; public abstract class AbstractZeppOsService { - private final Huami2021Support mSupport; + private static final Logger LOG = LoggerFactory.getLogger(ZeppOsAlexaService.class); - public AbstractZeppOsService(final Huami2021Support support) { + private final Huami2021Support mSupport; + private boolean encrypted; + + public AbstractZeppOsService(final Huami2021Support support, final boolean encryptedDefault) { this.mSupport = support; + this.encrypted = encryptedDefault; } public abstract short getEndpoint(); - public abstract boolean isEncrypted(); + public final boolean isEncrypted() { + return this.encrypted; + } + + public final void setEncrypted(final boolean encrypted) { + if (encrypted != this.encrypted) { + LOG.warn("Replacing encrypted flag for {}, {} -> {}", this.getClass().getSimpleName(), this.encrypted, encrypted); + } + + this.encrypted = encrypted; + } public abstract void handlePayload(final byte[] payload); @@ -52,6 +71,8 @@ public abstract class AbstractZeppOsService { public void initialize(final TransactionBuilder builder) { // Do nothing by default + // TODO implement a "quick initialize" that runs for the same firmware + Gb versions, since + // we will already know the capabilities } protected Huami2021Support getSupport() { @@ -91,6 +112,7 @@ public abstract class AbstractZeppOsService { return getSupport().getContext(); } + @Nullable protected static Boolean booleanFromByte(final byte b) { switch (b) { case 0x00: diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/zeppos/services/ZeppOsAgpsService.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/zeppos/services/ZeppOsAgpsService.java index 4938c9efb..86aa27b5c 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/zeppos/services/ZeppOsAgpsService.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/zeppos/services/ZeppOsAgpsService.java @@ -42,7 +42,7 @@ public class ZeppOsAgpsService extends AbstractZeppOsService { private Callback mCallback = null; public ZeppOsAgpsService(final Huami2021Support support) { - super(support); + super(support, false); } @Override @@ -50,11 +50,6 @@ public class ZeppOsAgpsService extends AbstractZeppOsService { return ENDPOINT; } - @Override - public boolean isEncrypted() { - return false; - } - @Override public void handlePayload(final byte[] payload) { switch (payload[0]) { diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/zeppos/services/ZeppOsAlarmsService.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/zeppos/services/ZeppOsAlarmsService.java index 8a1fe912c..fca35ec6b 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/zeppos/services/ZeppOsAlarmsService.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/zeppos/services/ZeppOsAlarmsService.java @@ -66,7 +66,7 @@ public class ZeppOsAlarmsService extends AbstractZeppOsService { public static final int FLAG_ENABLED = 0x04; public ZeppOsAlarmsService(final Huami2021Support support) { - super(support); + super(support, false); } @Override @@ -74,11 +74,6 @@ public class ZeppOsAlarmsService extends AbstractZeppOsService { return ENDPOINT; } - @Override - public boolean isEncrypted() { - return false; - } - @Override public void handlePayload(final byte[] payload) { switch (payload[0]) { diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/zeppos/services/ZeppOsAlexaService.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/zeppos/services/ZeppOsAlexaService.java index 209bc3304..9d674a87d 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/zeppos/services/ZeppOsAlexaService.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/zeppos/services/ZeppOsAlexaService.java @@ -83,7 +83,7 @@ public class ZeppOsAlexaService extends AbstractZeppOsService { final ByteArrayOutputStream voiceBuffer = new ByteArrayOutputStream(); public ZeppOsAlexaService(final Huami2021Support support) { - super(support); + super(support, true); } @Override @@ -91,11 +91,6 @@ public class ZeppOsAlexaService extends AbstractZeppOsService { return ENDPOINT; } - @Override - public boolean isEncrypted() { - return true; - } - @Override public void handlePayload(final byte[] payload) { switch (payload[0]) { diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/zeppos/services/ZeppOsAppsService.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/zeppos/services/ZeppOsAppsService.java index c017bd544..c81c68431 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/zeppos/services/ZeppOsAppsService.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/zeppos/services/ZeppOsAppsService.java @@ -55,7 +55,7 @@ public class ZeppOsAppsService extends AbstractZeppOsService { private final List apps = new ArrayList<>(); public ZeppOsAppsService(final Huami2021Support support) { - super(support); + super(support, false); } @Override @@ -63,11 +63,6 @@ public class ZeppOsAppsService extends AbstractZeppOsService { return ENDPOINT; } - @Override - public boolean isEncrypted() { - return false; - } - @Override public void handlePayload(final byte[] payload) { switch (payload[0]) { diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/zeppos/services/ZeppOsCalendarService.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/zeppos/services/ZeppOsCalendarService.java index 4aa035ef7..00dfd1637 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/zeppos/services/ZeppOsCalendarService.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/zeppos/services/ZeppOsCalendarService.java @@ -50,7 +50,7 @@ public class ZeppOsCalendarService extends AbstractZeppOsService { private int version = -1; public ZeppOsCalendarService(final Huami2021Support support) { - super(support); + super(support, false); } @Override @@ -58,11 +58,6 @@ public class ZeppOsCalendarService extends AbstractZeppOsService { return ENDPOINT; } - @Override - public boolean isEncrypted() { - return false; - } - @Override public void initialize(final TransactionBuilder builder) { requestCapabilities(builder); diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/zeppos/services/ZeppOsCannedMessagesService.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/zeppos/services/ZeppOsCannedMessagesService.java index 81ab60e21..ff765cb37 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/zeppos/services/ZeppOsCannedMessagesService.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/zeppos/services/ZeppOsCannedMessagesService.java @@ -59,7 +59,7 @@ public class ZeppOsCannedMessagesService extends AbstractZeppOsService { public static final byte CMD_REPLY_SMS_ALLOW = 0x0e; public ZeppOsCannedMessagesService(final Huami2021Support support) { - super(support); + super(support, false); } @Override @@ -67,11 +67,6 @@ public class ZeppOsCannedMessagesService extends AbstractZeppOsService { return ENDPOINT; } - @Override - public boolean isEncrypted() { - return false; - } - @Override public void handlePayload(final byte[] payload) { switch (payload[0]) { diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/zeppos/services/ZeppOsConfigService.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/zeppos/services/ZeppOsConfigService.java index 08a7a8ead..b338d9784 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/zeppos/services/ZeppOsConfigService.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/zeppos/services/ZeppOsConfigService.java @@ -97,7 +97,7 @@ public class ZeppOsConfigService extends AbstractZeppOsService { private final Map mGroupVersions = new HashMap<>(); public ZeppOsConfigService(final Huami2021Support support) { - super(support); + super(support, true); } @Override @@ -105,11 +105,6 @@ public class ZeppOsConfigService extends AbstractZeppOsService { return ENDPOINT; } - @Override - public boolean isEncrypted() { - return true; - } - @Override public void handlePayload(final byte[] payload) { switch (payload[0]) { diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/zeppos/services/ZeppOsContactsService.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/zeppos/services/ZeppOsContactsService.java index 37285f132..300e088e4 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/zeppos/services/ZeppOsContactsService.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/zeppos/services/ZeppOsContactsService.java @@ -47,7 +47,7 @@ public class ZeppOsContactsService extends AbstractZeppOsService { public static final String PREF_CONTACTS_SLOT_COUNT = "zepp_os_contacts_slot_count"; public ZeppOsContactsService(final Huami2021Support support) { - super(support); + super(support, true); } @Override @@ -55,11 +55,6 @@ public class ZeppOsContactsService extends AbstractZeppOsService { return ENDPOINT; } - @Override - public boolean isEncrypted() { - return true; - } - @Override public void handlePayload(final byte[] payload) { switch (payload[0]) { diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/zeppos/services/ZeppOsDisplayItemsService.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/zeppos/services/ZeppOsDisplayItemsService.java index 5933cce53..989d137de 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/zeppos/services/ZeppOsDisplayItemsService.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/zeppos/services/ZeppOsDisplayItemsService.java @@ -65,7 +65,7 @@ public class ZeppOsDisplayItemsService extends AbstractZeppOsService { public static final byte DISPLAY_ITEMS_SECTION_DISABLED = 0x03; public ZeppOsDisplayItemsService(final Huami2021Support support) { - super(support); + super(support, true); } @Override @@ -73,11 +73,6 @@ public class ZeppOsDisplayItemsService extends AbstractZeppOsService { return ENDPOINT; } - @Override - public boolean isEncrypted() { - return true; - } - @Override public void handlePayload(final byte[] payload) { switch (payload[0]) { diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/zeppos/services/ZeppOsFileTransferService.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/zeppos/services/ZeppOsFileTransferService.java index 54f0ead87..ff9c0386a 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/zeppos/services/ZeppOsFileTransferService.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/zeppos/services/ZeppOsFileTransferService.java @@ -56,7 +56,7 @@ public class ZeppOsFileTransferService extends AbstractZeppOsService { private int mChunkSize = -1; public ZeppOsFileTransferService(final Huami2021Support support) { - super(support); + super(support, false); } @Override @@ -64,11 +64,6 @@ public class ZeppOsFileTransferService extends AbstractZeppOsService { return ENDPOINT; } - @Override - public boolean isEncrypted() { - return false; - } - @Override public void handlePayload(final byte[] payload) { byte session; diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/zeppos/services/ZeppOsFtpServerService.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/zeppos/services/ZeppOsFtpServerService.java index 79226d5d6..a03776493 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/zeppos/services/ZeppOsFtpServerService.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/zeppos/services/ZeppOsFtpServerService.java @@ -47,7 +47,7 @@ public class ZeppOsFtpServerService extends AbstractZeppOsService { private Callback mCallback = null; public ZeppOsFtpServerService(final Huami2021Support support) { - super(support); + super(support, true); } @Override @@ -55,11 +55,6 @@ public class ZeppOsFtpServerService extends AbstractZeppOsService { return ENDPOINT; } - @Override - public boolean isEncrypted() { - return true; - } - @Override public void handlePayload(final byte[] payload) { switch (payload[0]) { diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/zeppos/services/ZeppOsHttpService.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/zeppos/services/ZeppOsHttpService.java index b33ca01cb..444a40199 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/zeppos/services/ZeppOsHttpService.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/zeppos/services/ZeppOsHttpService.java @@ -45,7 +45,7 @@ public class ZeppOsHttpService extends AbstractZeppOsService { public static final byte RESPONSE_NO_INTERNET = 0x02; public ZeppOsHttpService(final Huami2021Support support) { - super(support); + super(support, true); } @Override @@ -53,11 +53,6 @@ public class ZeppOsHttpService extends AbstractZeppOsService { return ENDPOINT; } - @Override - public boolean isEncrypted() { - return true; - } - @Override public void handlePayload(final byte[] payload) { switch (payload[0]) { diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/zeppos/services/ZeppOsLogsService.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/zeppos/services/ZeppOsLogsService.java index 80a183beb..4579ac2c6 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/zeppos/services/ZeppOsLogsService.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/zeppos/services/ZeppOsLogsService.java @@ -63,7 +63,7 @@ public class ZeppOsLogsService extends AbstractZeppOsService { private final SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss"); public ZeppOsLogsService(final Huami2021Support support) { - super(support); + super(support, false); } @Override @@ -71,11 +71,6 @@ public class ZeppOsLogsService extends AbstractZeppOsService { return ENDPOINT; } - @Override - public boolean isEncrypted() { - return false; - } - @Override public void handlePayload(final byte[] payload) { switch (payload[0]) { diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/zeppos/services/ZeppOsLoyaltyCardService.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/zeppos/services/ZeppOsLoyaltyCardService.java index 538159dee..545fc09c4 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/zeppos/services/ZeppOsLoyaltyCardService.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/zeppos/services/ZeppOsLoyaltyCardService.java @@ -58,7 +58,7 @@ public class ZeppOsLoyaltyCardService extends AbstractZeppOsService { public static final String PREF_VERSION = "zepp_os_loyalty_cards_version"; public ZeppOsLoyaltyCardService(final Huami2021Support support) { - super(support); + super(support, false); } @Override @@ -66,11 +66,6 @@ public class ZeppOsLoyaltyCardService extends AbstractZeppOsService { return ENDPOINT; } - @Override - public boolean isEncrypted() { - return false; - } - @Override public void handlePayload(final byte[] payload) { switch (payload[0]) { diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/zeppos/services/ZeppOsMorningUpdatesService.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/zeppos/services/ZeppOsMorningUpdatesService.java index 4dfe01f85..4da6d92e6 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/zeppos/services/ZeppOsMorningUpdatesService.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/zeppos/services/ZeppOsMorningUpdatesService.java @@ -66,7 +66,7 @@ public class ZeppOsMorningUpdatesService extends AbstractZeppOsService { }}; public ZeppOsMorningUpdatesService(Huami2021Support support) { - super(support); + super(support, false); } @Override @@ -74,11 +74,6 @@ public class ZeppOsMorningUpdatesService extends AbstractZeppOsService { return ENDPOINT; } - @Override - public boolean isEncrypted() { - return false; - } - @Override public void handlePayload(byte[] payload) { switch (payload[0]) { 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 611b26e32..9530a1067 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 @@ -45,7 +45,7 @@ public class ZeppOsMusicService extends AbstractZeppOsService { private static final byte BUTTON_VOLUME_DOWN = 0x06; public ZeppOsMusicService(final Huami2021Support support) { - super(support); + super(support, false); } @Override @@ -53,11 +53,6 @@ public class ZeppOsMusicService extends AbstractZeppOsService { return ENDPOINT; } - @Override - public boolean isEncrypted() { - return false; - } - @Override public void handlePayload(final byte[] payload) { switch (payload[0]) { 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 51a3f7de5..c1dda744f 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 @@ -75,7 +75,7 @@ public class ZeppOsNotificationService extends AbstractZeppOsService { private final ZeppOsFileTransferService fileTransferService; public ZeppOsNotificationService(final Huami2021Support support, final ZeppOsFileTransferService fileTransferService) { - super(support); + super(support, true); this.fileTransferService = fileTransferService; } @@ -84,11 +84,6 @@ public class ZeppOsNotificationService extends AbstractZeppOsService { return ENDPOINT; } - @Override - public boolean isEncrypted() { - return true; - } - @Override public void handlePayload(final byte[] payload) { final GBDeviceEventNotificationControl deviceEvtNotificationControl = new GBDeviceEventNotificationControl(); diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/zeppos/services/ZeppOsPhoneService.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/zeppos/services/ZeppOsPhoneService.java index 23a44e236..ece61b2a3 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/zeppos/services/ZeppOsPhoneService.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/zeppos/services/ZeppOsPhoneService.java @@ -55,7 +55,7 @@ public class ZeppOsPhoneService extends AbstractZeppOsService { private int version = 0; public ZeppOsPhoneService(final Huami2021Support support) { - super(support); + super(support, true); } @Override @@ -63,11 +63,6 @@ public class ZeppOsPhoneService extends AbstractZeppOsService { return ENDPOINT; } - @Override - public boolean isEncrypted() { - return true; - } - @Override public void handlePayload(final byte[] payload) { switch (payload[0]) { diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/zeppos/services/ZeppOsRemindersService.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/zeppos/services/ZeppOsRemindersService.java index c1c49f79f..8250eab40 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/zeppos/services/ZeppOsRemindersService.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/zeppos/services/ZeppOsRemindersService.java @@ -61,7 +61,7 @@ public class ZeppOsRemindersService extends AbstractZeppOsService { private static final String PREF_CAPABILITY = "huami_2021_capability_reminders"; public ZeppOsRemindersService(final Huami2021Support support) { - super(support); + super(support, false); } @Override @@ -69,11 +69,6 @@ public class ZeppOsRemindersService extends AbstractZeppOsService { return ENDPOINT; } - @Override - public boolean isEncrypted() { - return false; - } - @Override public void handlePayload(final byte[] payload) { switch (payload[0]) { diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/zeppos/services/ZeppOsServicesService.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/zeppos/services/ZeppOsServicesService.java index 1eb968544..4ce016505 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/zeppos/services/ZeppOsServicesService.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/zeppos/services/ZeppOsServicesService.java @@ -16,30 +16,15 @@ along with this program. If not, see . */ package nodomain.freeyourgadget.gadgetbridge.service.devices.huami.zeppos.services; -import android.annotation.SuppressLint; -import android.widget.Toast; - import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.nio.ByteBuffer; import java.nio.ByteOrder; -import java.nio.charset.StandardCharsets; -import java.text.SimpleDateFormat; -import java.util.Date; -import java.util.HashMap; -import java.util.HashSet; -import java.util.Map; -import java.util.Set; -import nodomain.freeyourgadget.gadgetbridge.activities.devicesettings.DeviceSettingsPreferenceConst; -import nodomain.freeyourgadget.gadgetbridge.deviceevents.GBDeviceEventUpdatePreferences; import nodomain.freeyourgadget.gadgetbridge.service.btle.TransactionBuilder; import nodomain.freeyourgadget.gadgetbridge.service.devices.huami.Huami2021Support; import nodomain.freeyourgadget.gadgetbridge.service.devices.huami.zeppos.AbstractZeppOsService; -import nodomain.freeyourgadget.gadgetbridge.util.GB; -import nodomain.freeyourgadget.gadgetbridge.util.Prefs; -import nodomain.freeyourgadget.gadgetbridge.util.StringUtils; public class ZeppOsServicesService extends AbstractZeppOsService { private static final Logger LOG = LoggerFactory.getLogger(ZeppOsServicesService.class); @@ -50,7 +35,7 @@ public class ZeppOsServicesService extends AbstractZeppOsService { public static final byte CMD_RET_LIST = 0x04; public ZeppOsServicesService(final Huami2021Support support) { - super(support); + super(support, false); } @Override @@ -58,11 +43,6 @@ public class ZeppOsServicesService extends AbstractZeppOsService { return ENDPOINT; } - @Override - public boolean isEncrypted() { - return false; - } - @Override public void handlePayload(final byte[] payload) { switch (payload[0]) { @@ -74,11 +54,6 @@ public class ZeppOsServicesService extends AbstractZeppOsService { } } - @Override - public void initialize(final TransactionBuilder builder) { - //requestServices(builder); - } - public void requestServices(final TransactionBuilder builder) { write(builder, CMD_GET_LIST); } @@ -95,11 +70,17 @@ public class ZeppOsServicesService extends AbstractZeppOsService { final byte encryptedByte = buf.get(); final Boolean encrypted = booleanFromByte(encryptedByte); - LOG.debug("Service: endpoint={} encrypted={}", String.format("%04x", endpoint), encrypted); + final AbstractZeppOsService service = getSupport().getService(endpoint); - // TODO use this to initialize the services supported by the device + LOG.debug("Service: endpoint={} encrypted={} known={}", String.format("%04x", endpoint), encrypted, service != null); + + if (service != null && encrypted != null) { + service.setEncrypted(encrypted); + } } + getSupport().initializeServices(); + final int remainingBytes = buf.limit() - buf.position(); if (remainingBytes != 0) { LOG.warn("There are {} bytes remaining in the buffer", remainingBytes); diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/zeppos/services/ZeppOsShortcutCardsService.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/zeppos/services/ZeppOsShortcutCardsService.java index 6a1aa8829..285d30f10 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/zeppos/services/ZeppOsShortcutCardsService.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/zeppos/services/ZeppOsShortcutCardsService.java @@ -124,7 +124,7 @@ public class ZeppOsShortcutCardsService extends AbstractZeppOsService { private int maxCards = 0; public ZeppOsShortcutCardsService(final Huami2021Support support) { - super(support); + super(support, true); } @Override @@ -132,11 +132,6 @@ public class ZeppOsShortcutCardsService extends AbstractZeppOsService { return ENDPOINT; } - @Override - public boolean isEncrypted() { - return true; - } - @Override public void handlePayload(final byte[] payload) { switch (payload[0]) { 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 d463bf19f..0603cb2cb 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 @@ -112,7 +112,7 @@ public class ZeppOsWatchfaceService extends AbstractZeppOsService { final List watchfaces = new ArrayList<>(); public ZeppOsWatchfaceService(final Huami2021Support support) { - super(support); + super(support, true); } @Override @@ -120,11 +120,6 @@ public class ZeppOsWatchfaceService extends AbstractZeppOsService { return ENDPOINT; } - @Override - public boolean isEncrypted() { - return true; - } - @Override public void handlePayload(final byte[] payload) { switch (payload[0]) { 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 ae8acc02f..da1ecf211 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 @@ -47,7 +47,7 @@ public class ZeppOsWifiService extends AbstractZeppOsService { private Callback mCallback = null; public ZeppOsWifiService(final Huami2021Support support) { - super(support); + super(support, true); } @Override @@ -55,11 +55,6 @@ public class ZeppOsWifiService extends AbstractZeppOsService { return ENDPOINT; } - @Override - public boolean isEncrypted() { - return true; - } - @Override public void handlePayload(final byte[] payload) { switch (payload[0]) {