From 87f9424ee392a78c587753060f7584d2ffdb042d Mon Sep 17 00:00:00 2001 From: Andreas Shimokawa Date: Fri, 29 Jun 2018 23:04:38 +0200 Subject: [PATCH 01/11] Amazfit Bip: allow flashing latest beta firmware --- .../devices/huami/amazfitbip/AmazfitBipFirmwareInfo.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/amazfitbip/AmazfitBipFirmwareInfo.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/amazfitbip/AmazfitBipFirmwareInfo.java index 2c218bc58..d5cbb360c 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/amazfitbip/AmazfitBipFirmwareInfo.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/amazfitbip/AmazfitBipFirmwareInfo.java @@ -151,7 +151,7 @@ public class AmazfitBipFirmwareInfo extends HuamiFirmwareInfo { String foundVersion = searchFirmwareVersion(bytes); if (foundVersion != null) { Version version = new Version(foundVersion); - if ((version.compareTo(new Version("0.0.8.00")) >= 0) && (version.compareTo(new Version("1.0.0.00")) < 0)) { + if ((version.compareTo(new Version("0.0.8.00")) >= 0) && (version.compareTo(new Version("1.0.5.00")) < 0)) { return HuamiFirmwareType.FIRMWARE; } } From 50eacf3f2235211c53404a859c8876d92de86385 Mon Sep 17 00:00:00 2001 From: Daniele Date: Wed, 27 Jun 2018 07:19:09 +0000 Subject: [PATCH 02/11] Translated using Weblate (Italian) Currently translated at 100.0% (498 of 498 strings) Translation: Freeyourgadget/Gadgetbridge Translate-URL: https://hosted.weblate.org/projects/freeyourgadget/gadgetbridge/it/ --- app/src/main/res/values-it/strings.xml | 63 ++++++++++++++++++++++---- 1 file changed, 54 insertions(+), 9 deletions(-) diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml index 6087eed05..930512dcc 100644 --- a/app/src/main/res/values-it/strings.xml +++ b/app/src/main/res/values-it/strings.xml @@ -404,14 +404,14 @@ \nNota: Non è necessario installare i file .res e .gps se questi sono gli stessi della versione precedentemente installata. \n \nPROCEDI A TUO RISCHIO E PERICOLO! - Si sta per installare il firmware %s sul Amazfit Cor. -\n -\nSi prega di installare prima il file .fw e successivamente il file .res. Il tuo smartwatch si riavvierà dopo l\'installazione del file .fw. -\n -\nNOTA: Non è necessario installare il file .res se risulta essere uguale a quello precedentemente installato. -\n -\nNON TESTATO: PROCEDI A TUO RISCHIO E PERICOLO! - Abilit swipe Sinistra/Destra nel grafico delle attività + Si sta per installare il firmware %s sul Amazfit Cor. +\n +\nSi prega di installare prima il file .fw e successivamente il file .res. Il tuo smartwatch si riavvierà dopo l\'installazione del file .fw. +\n +\nNOTA: Non è necessario installare il file .res se risulta essere uguale a quello precedentemente installato. +\n +\nPROCEDI A TUO RISCHIO E PERICOLO! + Abilita swipe Sinistra/Destra nel grafico delle attività Meteo Posizione meteo (CM/LOS) @@ -501,4 +501,49 @@ XWatch Acceso - + Blocca le notifiche da tutte le applicazioni + Consenti le notifiche da tutte le applicazioni + + + Si sta per installare il firmware %s sul Mi Band 3. +\n +\nSi prega di installare prima il file .fw e successivamente il file .res. Il tuo Miband si riavvierà dopo l\'installazione del file .fw. +\n +\nNOTA: Non è necessario installare il file .res se risulta essere uguale a quello precedentemente installato. +\n +\nNON TESTATO, POTREBBE DANNEGGIARE IL DISPOSITIVO IN MANIERA IRREVERSIBILE, PROCEDI A TUO RISCHIO E PERICOLO! + Modalità GATT client + Sperimentale, compatibile solo con Pebble 2, attivare solo in caso di problemi di connettività + "Recupero automatico dati delle attività" + Il recupero avviene quando lo schermo viene sbloccato. Funziona solo se è attivata una modalità di blocco! + + Traccia delle tua attività + Non misurato + Attività + Sonno leggero + Sonno profondo + Device non indossato + Corsa + Camminata + Nuoto + Attività sconosciuta + Attività + Bicicletta + Tapis roulant + Seleziona tutto + Condividi + Reset data di recupero + + Mi Band 3 + Q8 + Alipay (Scorciatoia) + Meteo (Scorciatoia) + Status + Attività + Meteo + Allarmi + Timer + Bussola + Impostazioni + Alipay + From 93032149975634a522283093df9be72a6859c687 Mon Sep 17 00:00:00 2001 From: Andreas Shimokawa Date: Sat, 30 Jun 2018 00:32:29 +0200 Subject: [PATCH 03/11] Amazfit Cor: allow flashing fonts (seem to be the same as for bip, untested) --- .../huami/amazfitcor/AmazfitCorFirmwareInfo.java | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/amazfitcor/AmazfitCorFirmwareInfo.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/amazfitcor/AmazfitCorFirmwareInfo.java index b5502f8e1..6cc74cb4a 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/amazfitcor/AmazfitCorFirmwareInfo.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/amazfitcor/AmazfitCorFirmwareInfo.java @@ -50,6 +50,10 @@ public class AmazfitCorFirmwareInfo extends HuamiFirmwareInfo { crcToVersion.put(64977, "RES 1.0.6.76"); crcToVersion.put(60501, "RES 1.0.7.52-71"); crcToVersion.put(31263, "RES 1.0.7.77-91"); + + // font + crcToVersion.put(61054, "8"); + crcToVersion.put(62291, "9 (Latin)"); } public AmazfitCorFirmwareInfo(byte[] bytes) { @@ -80,7 +84,13 @@ public class AmazfitCorFirmwareInfo extends HuamiFirmwareInfo { if (ArrayUtils.startsWith(bytes, WATCHFACE_HEADER)) { return HuamiFirmwareType.WATCHFACE; } - + if (ArrayUtils.startsWith(bytes, NEWFT_HEADER)) { + if (bytes[10] == 0x01) { + return HuamiFirmwareType.FONT; + } else if (bytes[10] == 0x02) { + return HuamiFirmwareType.FONT_LATIN; + } + } return HuamiFirmwareType.INVALID; } From d1cba544255b3a181708d7dd2f8be62cff982da3 Mon Sep 17 00:00:00 2001 From: Andreas Shimokawa Date: Sun, 1 Jul 2018 22:41:37 +0200 Subject: [PATCH 04/11] Mi Band 3: Allow flashing fonts (untested) --- .../service/devices/huami/HuamiFirmwareInfo.java | 2 ++ .../service/devices/huami/miband2/Mi2FirmwareInfo.java | 7 +++++-- .../service/devices/huami/miband3/MiBand3FirmwareInfo.java | 6 ++++++ 3 files changed, 13 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/HuamiFirmwareInfo.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/HuamiFirmwareInfo.java index b1ddc33ab..48bf42c9b 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/HuamiFirmwareInfo.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/HuamiFirmwareInfo.java @@ -48,6 +48,8 @@ public abstract class HuamiFirmwareInfo { 0x4e, 0x45, 0x5a, 0x4b }; + protected static final int FONT_TYPE_OFFSET = 0x9; + private HuamiFirmwareType firmwareType = HuamiFirmwareType.FIRMWARE; public String toVersion(int crc16) { diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/miband2/Mi2FirmwareInfo.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/miband2/Mi2FirmwareInfo.java index 8cccc9ceb..b9e842a03 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/miband2/Mi2FirmwareInfo.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/miband2/Mi2FirmwareInfo.java @@ -78,8 +78,11 @@ public class Mi2FirmwareInfo extends HuamiFirmwareInfo { } protected HuamiFirmwareType determineFirmwareType(byte[] bytes) { - if (ArrayUtils.startsWith(bytes, HuamiFirmwareInfo.FT_HEADER)) { - return HuamiFirmwareType.FONT; + if (ArrayUtils.startsWith(bytes, FT_HEADER)) { + if (bytes[FONT_TYPE_OFFSET] == 0x00 || bytes[FONT_TYPE_OFFSET] == (byte) 0xff) { + return HuamiFirmwareType.FONT; + } + return HuamiFirmwareType.INVALID; } if (ArrayUtils.equals(bytes, FW_HEADER, FW_HEADER_OFFSET) && (bytes[FW_MAGIC_OFFSET] == FW_MAGIC)) { diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/miband3/MiBand3FirmwareInfo.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/miband3/MiBand3FirmwareInfo.java index 2f5697fc0..fcfda8127 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/miband3/MiBand3FirmwareInfo.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/miband3/MiBand3FirmwareInfo.java @@ -53,6 +53,12 @@ public class MiBand3FirmwareInfo extends HuamiFirmwareInfo { @Override protected HuamiFirmwareType determineFirmwareType(byte[] bytes) { + if (ArrayUtils.startsWith(bytes, FT_HEADER)) { + if (bytes[FONT_TYPE_OFFSET] == 0x03 || bytes[FONT_TYPE_OFFSET] == 0x04) { + return HuamiFirmwareType.FONT; + } + return HuamiFirmwareType.INVALID; + } if (ArrayUtils.startsWith(bytes, RES_HEADER)) { if (bytes.length > 100000) { // don't know how to distinguish from Bip/Cor .res return HuamiFirmwareType.INVALID; From 91cbdfde104b006c05288cd308bc3c939beefd61 Mon Sep 17 00:00:00 2001 From: Martin Date: Sat, 30 Jun 2018 17:32:12 +0200 Subject: [PATCH 05/11] added time limited on auto-fetch, and removed the creation of multiple autoFetchReceivers --- .../activities/SettingsActivity.java | 20 +++++++++++++++++++ .../service/DeviceCommunicationService.java | 2 +- .../receivers/GBAutoFetchReceiver.java | 14 +++++++------ app/src/main/res/values/strings.xml | 2 ++ app/src/main/res/xml/preferences.xml | 7 +++++++ 5 files changed, 38 insertions(+), 7 deletions(-) diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/SettingsActivity.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/SettingsActivity.java index f76f4731f..dd383d033 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/SettingsActivity.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/SettingsActivity.java @@ -326,6 +326,26 @@ public class SettingsActivity extends AbstractSettingsActivity { } }); + pref = findPreference("auto_fetch_interval_limit"); + pref.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() { + @Override + public boolean onPreferenceChange(Preference preference, Object autoFetchInterval) { + String summary = String.format( + getApplicationContext().getString(R.string.pref_auto_fetch_limit_fetches_summary), + Integer.valueOf((String) autoFetchInterval)); + preference.setSummary(summary); + return true; + } + }); + + int autoFetchInterval = GBApplication.getPrefs().getInt("auto_fetch_interval_limit", 0); + summary = String.format( + getApplicationContext().getString(R.string.pref_auto_fetch_limit_fetches_summary), + (int) autoFetchInterval); + pref.setSummary(summary); + + + final Preference displayPages = findPreference("bip_display_items"); displayPages.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() { @Override diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/DeviceCommunicationService.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/DeviceCommunicationService.java index e2bdc2afc..3003a9394 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/DeviceCommunicationService.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/DeviceCommunicationService.java @@ -680,7 +680,7 @@ public class DeviceCommunicationService extends Service implements SharedPrefere } } if (GBApplication.getPrefs().getBoolean("auto_fetch_enabled", false) && - coordinator != null && coordinator.supportsActivityDataFetching()) { + coordinator != null && coordinator.supportsActivityDataFetching() && mGBAutoFetchReceiver == null) { mGBAutoFetchReceiver = new GBAutoFetchReceiver(); registerReceiver(mGBAutoFetchReceiver, new IntentFilter("android.intent.action.USER_PRESENT")); } diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/receivers/GBAutoFetchReceiver.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/receivers/GBAutoFetchReceiver.java index f632733f5..a77b643b7 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/receivers/GBAutoFetchReceiver.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/receivers/GBAutoFetchReceiver.java @@ -20,20 +20,22 @@ import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import org.apache.commons.lang3.time.DateUtils; +import java.util.Date; import nodomain.freeyourgadget.gadgetbridge.GBApplication; import nodomain.freeyourgadget.gadgetbridge.model.RecordedDataTypes; public class GBAutoFetchReceiver extends BroadcastReceiver { - private static final Logger LOG = LoggerFactory.getLogger(GBAutoFetchReceiver.class); + private Date lastSync = new Date(); @Override public void onReceive(Context context, Intent intent) { - //LOG.info("User is present!"); - GBApplication.deviceService().onFetchRecordedData(RecordedDataTypes.TYPE_ACTIVITY); + Date nextSync = DateUtils.addMinutes(lastSync, GBApplication.getPrefs().getInt("auto_fetch_interval_limit", 0)); + if (nextSync.before(new Date())) { + GBApplication.deviceService().onFetchRecordedData(RecordedDataTypes.TYPE_ACTIVITY); + lastSync = new Date(); + } } } - diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 58ccb152b..1b574c87c 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -202,6 +202,8 @@ Auto fetch activity data Fetch happens upon screen unlock. Only works if a lock mechanism is set! + Minimum time between fetches + Fetches every %d minutes Not connected Connecting diff --git a/app/src/main/res/xml/preferences.xml b/app/src/main/res/xml/preferences.xml index bdf887b7b..1aba679db 100644 --- a/app/src/main/res/xml/preferences.xml +++ b/app/src/main/res/xml/preferences.xml @@ -535,6 +535,13 @@ android:key="auto_fetch_enabled" android:title="@string/pref_auto_fetch" android:summary="@string/pref_auto_fetch_summary"/> + Date: Sun, 1 Jul 2018 23:07:39 +0200 Subject: [PATCH 06/11] Bump version, update changelogs --- CHANGELOG.md | 7 +++++++ app/build.gradle | 4 ++-- app/src/main/res/xml/changelog_master.xml | 7 +++++++ fastlane/metadata/android/en-US/changelogs/133.txt | 5 +++++ 4 files changed, 21 insertions(+), 2 deletions(-) create mode 100644 fastlane/metadata/android/en-US/changelogs/133.txt diff --git a/CHANGELOG.md b/CHANGELOG.md index fcaa33393..04f9f6793 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,12 @@ ### Changelog +#### Version 0.27.1 +* Pebble: Change appstore search to point to RomanPort's pebble appstore +* Mi Band 3: Allow flashing fonts (untested) +* Amazfit Bip: Allow flashing latest firmwares +* Amazfit Cor: Allow flashing Bip fonts (untested) +* Allow to limit auto fetch to a user configurable time interval + #### Version 0.27.0 * Initial support for Mi Band 3 (largely untested, needs to be connected to Mi Fit once) * Option for automatic activity sync after screen unlock diff --git a/app/build.gradle b/app/build.gradle index ae860a867..cc5d97294 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -25,8 +25,8 @@ android { targetSdkVersion 27 // Note: always bump BOTH versionCode and versionName! - versionName "0.27.0" - versionCode 132 + versionName "0.27.1" + versionCode 133 vectorDrawables.useSupportLibrary = true } buildTypes { diff --git a/app/src/main/res/xml/changelog_master.xml b/app/src/main/res/xml/changelog_master.xml index 5f0ed787e..b22a59188 100644 --- a/app/src/main/res/xml/changelog_master.xml +++ b/app/src/main/res/xml/changelog_master.xml @@ -1,5 +1,12 @@ + + Pebble: Change appstore search to point to RomanPort's pebble appstore + Mi Band 3: Allow flashing fonts (untested) + Amazfit Bip: Allow flashing latest firmwares + Amazfit Cor: Allow flashing Bip fonts (untested) + Allow to limit auto fetch to a user configurable time interval + Initial support for Mi Band 3 (largely untested, needs to be connected to Mi Fit once) Option for automatic activity sync after screen unlock diff --git a/fastlane/metadata/android/en-US/changelogs/133.txt b/fastlane/metadata/android/en-US/changelogs/133.txt new file mode 100644 index 000000000..be06947ed --- /dev/null +++ b/fastlane/metadata/android/en-US/changelogs/133.txt @@ -0,0 +1,5 @@ +* Pebble: Change appstore search to point to RomanPort's pebble appstore +* Mi Band 3: Allow flashing fonts (untested) +* Amazfit Bip: Allow flashing latest firmwares +* Amazfit Cor: Allow flashing Bip fonts (untested) +* Allow to limit auto fetch to a user configurable time interval From a3e22d573ff13208dad10b86ef50aea1922a0d4b Mon Sep 17 00:00:00 2001 From: Andreas Shimokawa Date: Sun, 1 Jul 2018 23:26:03 +0200 Subject: [PATCH 07/11] Amazfit Bip: Whitelist FW 1.0.2.00 --- .../devices/huami/amazfitbip/AmazfitBipFirmwareInfo.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/amazfitbip/AmazfitBipFirmwareInfo.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/amazfitbip/AmazfitBipFirmwareInfo.java index d5cbb360c..34b30e8a0 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/amazfitbip/AmazfitBipFirmwareInfo.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/amazfitbip/AmazfitBipFirmwareInfo.java @@ -93,6 +93,7 @@ public class AmazfitBipFirmwareInfo extends HuamiFirmwareInfo { crcToVersion.put(11062, "0.1.1.39"); crcToVersion.put(56670, "0.1.1.41"); crcToVersion.put(58736, "0.1.1.45"); + crcToVersion.put(2602, "1.0.2.00"); // resources crcToVersion.put(12586, "0.0.8.74"); @@ -114,6 +115,7 @@ public class AmazfitBipFirmwareInfo extends HuamiFirmwareInfo { crcToVersion.put(14334, "0.1.1.39"); crcToVersion.put(21109, "0.1.1.41"); crcToVersion.put(23073, "0.1.1.45"); + crcToVersion.put(59245, "1.0.2.00"); // gps crcToVersion.put(61520, "9367,8f79a91,0,0,"); From 6e34d313c7301e223ef966cd0e7568501da7cafd Mon Sep 17 00:00:00 2001 From: Andreas Shimokawa Date: Wed, 4 Jul 2018 23:32:35 +0200 Subject: [PATCH 08/11] Mi Band 3: allow setting language (english and spanish work) --- .../service/devices/huami/amazfitbip/AmazfitBipSupport.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/amazfitbip/AmazfitBipSupport.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/amazfitbip/AmazfitBipSupport.java index 2ff2f09f7..8ae653ac5 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/amazfitbip/AmazfitBipSupport.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/amazfitbip/AmazfitBipSupport.java @@ -454,7 +454,7 @@ public class AmazfitBipSupport extends MiBand2Support { builder.add(new ConditionalWriteAction(getCharacteristic(MiBand2Service.UUID_CHARACTERISTIC_3_CONFIGURATION)) { @Override protected byte[] checkCondition() { - if (gbDevice.getType() == DeviceType.AMAZFITBIP && new Version(gbDevice.getFirmwareVersion()).compareTo(new Version("0.1.0.77")) >= 0) { + if (gbDevice.getType() == DeviceType.MIBAND3 || (gbDevice.getType() == DeviceType.AMAZFITBIP && new Version(gbDevice.getFirmwareVersion()).compareTo(new Version("0.1.0.77")) >= 0)) { return command_new; } else { return command_old; From 3236e206574304014d5540b8a7bed09aa09ad8c4 Mon Sep 17 00:00:00 2001 From: Andreas Shimokawa Date: Sun, 8 Jul 2018 12:16:26 +0200 Subject: [PATCH 09/11] Amazfit Bip/Cor: rework fimware detection to rely on strings instead of version numbers The new version scheme and the fact that recent Bip and Cor firmwares are impossible to distinguish by comparing data at fixed offsets make it necessary to dynamically search for sequences of data. We do this now by searching for "Amazfit Bip Watch" and "Amazfit Cor". --- .../devices/huami/HuamiFirmwareInfo.java | 21 +++++++++++++++++++ .../amazfitbip/AmazfitBipFirmwareInfo.java | 9 ++------ .../amazfitcor/AmazfitCorFirmwareInfo.java | 9 ++------ 3 files changed, 25 insertions(+), 14 deletions(-) diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/HuamiFirmwareInfo.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/HuamiFirmwareInfo.java index 48bf42c9b..6d02ac199 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/HuamiFirmwareInfo.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/HuamiFirmwareInfo.java @@ -174,4 +174,25 @@ public abstract class HuamiFirmwareInfo { return null; } + protected boolean searchString32BitAligned(byte[] fwbytes, String findString) { + ByteBuffer stringBuf = ByteBuffer.wrap((findString + "\0").getBytes()); + stringBuf.order(ByteOrder.BIG_ENDIAN); + int[] findArray = new int[stringBuf.remaining() / 4]; + for (int i = 0; i < findArray.length; i++) { + findArray[i] = stringBuf.getInt(); + } + + ByteBuffer buf = ByteBuffer.wrap(fwbytes); + buf.order(ByteOrder.BIG_ENDIAN); + while (buf.remaining() > 3) { + int arrayPos = 0; + while (arrayPos < findArray.length && buf.remaining() > 3 && (buf.getInt() == findArray[arrayPos])) { + arrayPos++; + } + if (arrayPos == findArray.length) { + return true; + } + } + return false; + } } diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/amazfitbip/AmazfitBipFirmwareInfo.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/amazfitbip/AmazfitBipFirmwareInfo.java index 34b30e8a0..7457f22c2 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/amazfitbip/AmazfitBipFirmwareInfo.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/amazfitbip/AmazfitBipFirmwareInfo.java @@ -24,7 +24,6 @@ import nodomain.freeyourgadget.gadgetbridge.model.DeviceType; import nodomain.freeyourgadget.gadgetbridge.service.devices.huami.HuamiFirmwareInfo; import nodomain.freeyourgadget.gadgetbridge.service.devices.huami.HuamiFirmwareType; import nodomain.freeyourgadget.gadgetbridge.util.ArrayUtils; -import nodomain.freeyourgadget.gadgetbridge.util.Version; public class AmazfitBipFirmwareInfo extends HuamiFirmwareInfo { // gps detection is totally bogus, just the first 16 bytes @@ -150,12 +149,8 @@ public class AmazfitBipFirmwareInfo extends HuamiFirmwareInfo { return HuamiFirmwareType.GPS_CEP; } if (ArrayUtils.startsWith(bytes, FW_HEADER)) { - String foundVersion = searchFirmwareVersion(bytes); - if (foundVersion != null) { - Version version = new Version(foundVersion); - if ((version.compareTo(new Version("0.0.8.00")) >= 0) && (version.compareTo(new Version("1.0.5.00")) < 0)) { - return HuamiFirmwareType.FIRMWARE; - } + if (searchString32BitAligned(bytes, "Amazfit Bip Watch")) { + return HuamiFirmwareType.FIRMWARE; } return HuamiFirmwareType.INVALID; } diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/amazfitcor/AmazfitCorFirmwareInfo.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/amazfitcor/AmazfitCorFirmwareInfo.java index 6cc74cb4a..b7395e791 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/amazfitcor/AmazfitCorFirmwareInfo.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/amazfitcor/AmazfitCorFirmwareInfo.java @@ -24,7 +24,6 @@ import nodomain.freeyourgadget.gadgetbridge.model.DeviceType; import nodomain.freeyourgadget.gadgetbridge.service.devices.huami.HuamiFirmwareInfo; import nodomain.freeyourgadget.gadgetbridge.service.devices.huami.HuamiFirmwareType; import nodomain.freeyourgadget.gadgetbridge.util.ArrayUtils; -import nodomain.freeyourgadget.gadgetbridge.util.Version; public class AmazfitCorFirmwareInfo extends HuamiFirmwareInfo { // this is the same as Bip @@ -72,12 +71,8 @@ public class AmazfitCorFirmwareInfo extends HuamiFirmwareInfo { return HuamiFirmwareType.RES_COMPRESSED; } if (ArrayUtils.startsWith(bytes, FW_HEADER)) { - String foundVersion = searchFirmwareVersion(bytes); - if (foundVersion != null) { - Version version = new Version(foundVersion); - if ((version.compareTo(new Version("1.0.5.00")) >= 0) && (version.compareTo(new Version("2.0.0.00")) < 0)) { - return HuamiFirmwareType.FIRMWARE; - } + if (searchString32BitAligned(bytes, "Amazfit Cor")) { + return HuamiFirmwareType.FIRMWARE; } return HuamiFirmwareType.INVALID; } From f2ff1991da2643daebe53925709274ce96179fe7 Mon Sep 17 00:00:00 2001 From: cpfeiffer Date: Fri, 20 Apr 2018 20:30:01 +0200 Subject: [PATCH 10/11] Comment out chatty debug output --- .../gadgetbridge/activities/charts/ActivityAnalysis.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/charts/ActivityAnalysis.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/charts/ActivityAnalysis.java index 493a59702..ea53a18b2 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/charts/ActivityAnalysis.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/charts/ActivityAnalysis.java @@ -85,11 +85,11 @@ class ActivityAnalysis { } if (!stats.containsKey(steps)) { - LOG.info("Adding: " + steps); +// LOG.debug("Adding: " + steps); stats.put(steps, timeDifference); } else { long time = stats.get(steps); - LOG.info("Updating: " + steps + " " + timeDifference + time); +// LOG.debug("Updating: " + steps + " " + timeDifference + time); stats.put(steps, timeDifference + time); } } From 09a36aa5e72de23bc9127834a77165fb34a39d7b Mon Sep 17 00:00:00 2001 From: jonnsoft <> Date: Fri, 6 Jul 2018 15:15:14 +0200 Subject: [PATCH 11/11] MiBand3 pairing fix (cherry picked from commit 3656ed9648b28475c35764da8a5cbeb420cfc307) --- .../gadgetbridge/activities/DiscoveryActivity.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/DiscoveryActivity.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/DiscoveryActivity.java index 3ef33a824..f1c368844 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/DiscoveryActivity.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/DiscoveryActivity.java @@ -447,6 +447,10 @@ public class DiscoveryActivity extends AbstractGBActivity implements AdapterView LOG.warn("could not get BluetoothLeScanner()!"); return; } + if (newLeScanCallback == null) { + LOG.warn("newLeScanCallback == null!"); + return; + } bluetoothLeScanner.stopScan(newLeScanCallback); }