diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/huawei/HuaweiBRCoordinator.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/huawei/HuaweiBRCoordinator.java index 1edaf55af..2088c962d 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/huawei/HuaweiBRCoordinator.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/huawei/HuaweiBRCoordinator.java @@ -30,6 +30,7 @@ import java.util.Collections; import java.util.List; import de.greenrobot.dao.query.QueryBuilder; +import nodomain.freeyourgadget.gadgetbridge.R; import nodomain.freeyourgadget.gadgetbridge.GBApplication; import nodomain.freeyourgadget.gadgetbridge.activities.devicesettings.DeviceSpecificSettings; import nodomain.freeyourgadget.gadgetbridge.activities.devicesettings.DeviceSpecificSettingsCustomizer; @@ -83,6 +84,11 @@ public abstract class HuaweiBRCoordinator extends AbstractBLClassicDeviceCoordin return huaweiCoordinator.getSupportedLanguageSettings(device); } + @Override + public int[] getSupportedDeviceSpecificAuthenticationSettings() { + return new int[]{R.xml.devicesettings_huawei_account}; + } + @Override public int getBondingStyle(){ return BONDING_STYLE_ASK; diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/huawei/HuaweiConstants.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/huawei/HuaweiConstants.java index d2c2e9acf..4941e83db 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/huawei/HuaweiConstants.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/huawei/HuaweiConstants.java @@ -71,6 +71,7 @@ public final class HuaweiConstants { public static final String PREF_HUAWEI_ADDRESS = "huawei_address"; public static final String PREF_HUAWEI_WORKMODE = "workmode"; public static final String PREF_HUAWEI_TRUSLEEP = "trusleep"; + public static final String PREF_HUAWEI_ACCOUNT = "huawei_account"; public static final String PREF_HUAWEI_DND_LIFT_WRIST_TYPE = "dnd_lift_wrist_type"; // SharedPref for 0x01 0x1D public static final String PREF_HUAWEI_DEBUG_REQUEST = "debug_huawei_request"; diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/huawei/HuaweiLECoordinator.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/huawei/HuaweiLECoordinator.java index ee25083e8..a828fc0be 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/huawei/HuaweiLECoordinator.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/huawei/HuaweiLECoordinator.java @@ -30,6 +30,7 @@ import java.util.Collections; import java.util.List; import de.greenrobot.dao.query.QueryBuilder; +import nodomain.freeyourgadget.gadgetbridge.R; import nodomain.freeyourgadget.gadgetbridge.activities.devicesettings.DeviceSpecificSettings; import nodomain.freeyourgadget.gadgetbridge.activities.devicesettings.DeviceSpecificSettingsCustomizer; import nodomain.freeyourgadget.gadgetbridge.GBException; @@ -82,7 +83,12 @@ public abstract class HuaweiLECoordinator extends AbstractBLEDeviceCoordinator i public String[] getSupportedLanguageSettings(GBDevice device) { return huaweiCoordinator.getSupportedLanguageSettings(device); } - + + @Override + public int[] getSupportedDeviceSpecificAuthenticationSettings() { + return new int[]{R.xml.devicesettings_huawei_account}; + } + @Override public int getBondingStyle(){ return BONDING_STYLE_NONE; diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/huawei/packets/AccountRelated.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/huawei/packets/AccountRelated.java index c0e516208..ecfb88d9c 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/huawei/packets/AccountRelated.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/huawei/packets/AccountRelated.java @@ -26,15 +26,18 @@ public class AccountRelated { public static final byte id = 0x01; public static class Request extends HuaweiPacket { - public Request (ParamsProvider paramsProvider) { + public Request (ParamsProvider paramsProvider, String account) { super(paramsProvider); this.serviceId = AccountRelated.id; this.commandId = id; - this.tlv = new HuaweiTLV() - .put(0x01); - + this.tlv = new HuaweiTLV(); + if (account.length() > 0) { + tlv.put(0x01, account); + } else { + tlv.put(0x01); + } this.complete = true; } } @@ -50,14 +53,19 @@ public class AccountRelated { public static final byte id = 0x05; public static class Request extends HuaweiPacket { - public Request (ParamsProvider paramsProvider, boolean accountPairingOptimization) { + public Request (ParamsProvider paramsProvider, boolean accountPairingOptimization, String account) { super(paramsProvider); this.serviceId = AccountRelated.id; this.commandId = id; - this.tlv = new HuaweiTLV() - .put(0x01, (byte)0x00); + this.tlv = new HuaweiTLV(); + if (account.length() > 0) { + tlv.put(0x01, account); + } else { + tlv.put(0x01, (byte)0x00); + } + if (accountPairingOptimization) { this.tlv.put(0x03, (byte)0x01); } diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huawei/requests/SendAccountRequest.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huawei/requests/SendAccountRequest.java index d442ea2a1..8ca704bf6 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huawei/requests/SendAccountRequest.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huawei/requests/SendAccountRequest.java @@ -21,7 +21,9 @@ import org.slf4j.LoggerFactory; import java.util.List; +import nodomain.freeyourgadget.gadgetbridge.GBApplication; import nodomain.freeyourgadget.gadgetbridge.GBException; +import nodomain.freeyourgadget.gadgetbridge.devices.huawei.HuaweiConstants; import nodomain.freeyourgadget.gadgetbridge.devices.huawei.HuaweiPacket.CryptoException; import nodomain.freeyourgadget.gadgetbridge.devices.huawei.packets.AccountRelated; import nodomain.freeyourgadget.gadgetbridge.service.devices.huawei.HuaweiSupportProvider; @@ -37,8 +39,11 @@ public class SendAccountRequest extends Request { @Override protected List createRequest() throws RequestCreationException { + String account = GBApplication + .getDeviceSpecificSharedPrefs(supportProvider.getDevice().getAddress()) + .getString(HuaweiConstants.PREF_HUAWEI_ACCOUNT, "").trim(); try { - return new AccountRelated.SendAccountToDevice.Request(paramsProvider).serialize(); + return new AccountRelated.SendAccountToDevice.Request(paramsProvider, account).serialize(); } catch (CryptoException e) { throw new RequestCreationException(e); } diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huawei/requests/SendExtendedAccountRequest.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huawei/requests/SendExtendedAccountRequest.java index 8881e9a11..45d3a1bd0 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huawei/requests/SendExtendedAccountRequest.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huawei/requests/SendExtendedAccountRequest.java @@ -22,6 +22,8 @@ import org.slf4j.LoggerFactory; import java.util.List; +import nodomain.freeyourgadget.gadgetbridge.GBApplication; +import nodomain.freeyourgadget.gadgetbridge.devices.huawei.HuaweiConstants; import nodomain.freeyourgadget.gadgetbridge.devices.huawei.HuaweiPacket.CryptoException; import nodomain.freeyourgadget.gadgetbridge.devices.huawei.packets.AccountRelated; import nodomain.freeyourgadget.gadgetbridge.service.devices.huawei.HuaweiSupportProvider; @@ -37,10 +39,14 @@ public class SendExtendedAccountRequest extends Request { @Override protected List createRequest() throws Request.RequestCreationException { + String account = GBApplication + .getDeviceSpecificSharedPrefs(supportProvider.getDevice().getAddress()) + .getString(HuaweiConstants.PREF_HUAWEI_ACCOUNT, "").trim(); try { return new AccountRelated.SendExtendedAccountToDevice.Request( paramsProvider, - supportProvider.getHuaweiCoordinator().supportsDiffAccountPairingOptimization()) + supportProvider.getHuaweiCoordinator().supportsDiffAccountPairingOptimization(), + account) .serialize(); } catch (CryptoException e) { throw new Request.RequestCreationException(e); diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 29e75c227..745d006a3 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -2812,4 +2812,6 @@ Heart rate Oximetry SPO2 + Huawei Account + Huawei account used in pairing process. Setting it allows to pair without factory reset. diff --git a/app/src/main/res/xml/devicesettings_huawei_account.xml b/app/src/main/res/xml/devicesettings_huawei_account.xml new file mode 100644 index 000000000..6797b0462 --- /dev/null +++ b/app/src/main/res/xml/devicesettings_huawei_account.xml @@ -0,0 +1,9 @@ + + + + \ No newline at end of file