From 93117993e13734773a850b587ad4b1766054ce16 Mon Sep 17 00:00:00 2001 From: Andreas Shimokawa Date: Sun, 15 Jul 2018 03:04:43 +0200 Subject: [PATCH 01/32] Bump version, start changelog --- CHANGELOG.md | 5 +++++ app/build.gradle | 4 ++-- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 04f9f6793..166e3292a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,10 @@ ### Changelog +#### Version 0.28.0 (WIP) +* Inital support for ZeTime +* Amazfit Bip/Cor: Rework firmware detection to cope with new version scheme +* Mi Band 3: support setting language (english and spanish tested) + #### Version 0.27.1 * Pebble: Change appstore search to point to RomanPort's pebble appstore * Mi Band 3: Allow flashing fonts (untested) diff --git a/app/build.gradle b/app/build.gradle index cc5d97294..13bb7b231 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.1" - versionCode 133 + versionName "0.28.0" + versionCode 134 vectorDrawables.useSupportLibrary = true } buildTypes { From b0814c1bbdf15ec175d752d6dd41f71b96fc2e6e Mon Sep 17 00:00:00 2001 From: Marius Cornescu Date: Wed, 11 Jul 2018 19:06:49 +0000 Subject: [PATCH 02/32] Added translation using Weblate (Romanian) --- app/src/main/res/values-ro/strings.xml | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 app/src/main/res/values-ro/strings.xml diff --git a/app/src/main/res/values-ro/strings.xml b/app/src/main/res/values-ro/strings.xml new file mode 100644 index 000000000..a6b3daec9 --- /dev/null +++ b/app/src/main/res/values-ro/strings.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file From f95ff167679ab3cf4e0e78751f2d69cfeb6bf928 Mon Sep 17 00:00:00 2001 From: Marius Cornescu Date: Wed, 11 Jul 2018 19:08:46 +0000 Subject: [PATCH 03/32] Translated using Weblate (Romanian) Currently translated at 10.6% (53 of 500 strings) Translation: Freeyourgadget/Gadgetbridge Translate-URL: https://hosted.weblate.org/projects/freeyourgadget/gadgetbridge/ro/ --- app/src/main/res/values-ro/strings.xml | 70 +++++++++++++++++++++++++- 1 file changed, 68 insertions(+), 2 deletions(-) diff --git a/app/src/main/res/values-ro/strings.xml b/app/src/main/res/values-ro/strings.xml index a6b3daec9..4802c7b71 100644 --- a/app/src/main/res/values-ro/strings.xml +++ b/app/src/main/res/values-ro/strings.xml @@ -1,2 +1,68 @@ - - \ No newline at end of file + +Gadgetbridge + + Gadgetbridge + Setari + Debug + Iesire + Doneaza + Sincronizeaza + Gaseste bratara + Conecteaza + Deconecteaza + Sterge bratara + Sterge %1$s + Va fi stearsa bratara si datele asociate! + Deschide meniul de navigatie + Inchide meniul de navigatie + Apasati lung pentru a deconecta + Manager aplicatii + Reinstaleaza + Activeaza + Dezactiveaza + Activeaza Masurare ritm cardiac + Dezactiveaza Masurare ritm cardiac + Activeaza Aplicatie meteo + Dezactiveaza Aplicatie meteo + Configureaza + Notificari blocate + Blocheaza toate notificarile + Permite toate notificarile + + + Calendare blocate + + Instalare firmware + Esti pe punctul de a instala firmware-ul %1$s si %2$s, in locul celor deja instalate pe Mi Band. + Firmware-ul a fost testat si este compatibil cu Gadgetbridge. + Setari + + Setari generale + Conectare la bratara cand Bluetooth este pornit + Porneste automat + Reconecteare automata + Implicit + Data si Timp + Sincronizare timp + Tema + Deschis + Intunecat + + Limba + + Notificari + Apeluri telefonice + SMS + Suport notificari generice + ... si cand ecranul este pornit + Intotdeauna + Cand ecranul este oprit + Niciodata + + Afiseaza numele si numarul + Ascunde numele, afiseaza numarul + Afiseaza numele, ascunde numarul + Ascunde numele si numarul + + Meteo + From 2fe0b0e6e61bdc5daefd47e03aa3247fb753ce27 Mon Sep 17 00:00:00 2001 From: Marius Cornescu Date: Thu, 12 Jul 2018 17:43:55 +0000 Subject: [PATCH 04/32] Translated using Weblate (Romanian) Currently translated at 17.0% (85 of 500 strings) Translation: Freeyourgadget/Gadgetbridge Translate-URL: https://hosted.weblate.org/projects/freeyourgadget/gadgetbridge/ro/ --- app/src/main/res/values-ro/strings.xml | 63 +++++++++++++++++++++++++- 1 file changed, 61 insertions(+), 2 deletions(-) diff --git a/app/src/main/res/values-ro/strings.xml b/app/src/main/res/values-ro/strings.xml index 4802c7b71..5dba73e15 100644 --- a/app/src/main/res/values-ro/strings.xml +++ b/app/src/main/res/values-ro/strings.xml @@ -3,7 +3,7 @@ Gadgetbridge Setari - Debug + Depaneaza Iesire Doneaza Sincronizeaza @@ -65,4 +65,63 @@ Ascunde numele si numarul Meteo - + Captura ecran + Se deconecteaza + Se conecteaza + Capturez ecranul dispozitivului + + + Depanare + + Aplicatii instalate + Fete de ceas instalate + Sterge + Cauta in magazinul Pebble + Instaleaza aplicatie notificari meteo + Muta la inceput + + Esti pe punctul de a instala firmware-ul %s in locul celui deja instalat pe Mi Band. + Esti pe punctul de a instala firmware-ul %s pe Amazfit Bip. +\n +\nAi grija sa instalezi fisierul .fw, apoi fisierul .res, si in final fisierul .gps. Ceasul va reporni dupa ce se instaleaza fisierul .fw. +\n +\nNota: Nu este necesar sa instalezi fisierele .res si .gps daca aceste fisiere sunt identice cu cele instalate anterior. +\n +\nCONTINUATI PE RISCUL DUMNEAVOASTRA! + Esti pe punctul de a instala firmware-ul %s pe Amazfit Cor. +\n +\nAi grija sa instalezi fisierul .fw, si apoi fisierul .res. Ceasul va reporni dupa ce se instaleaza fisierul .fw. +\n +\nNota: Nu este necesar sa instalezi fisierul .res daca acest fisier este identic cu cel instalat anterior. +\n +\nCONTINUATI PE RISCUL DUMNEAVOASTRA! + Esti pe punctul de a instala firmware-ul %s pe Mi Band 3. +\n +\nAi grija sa instalezi fisierul .fw, si apoi fisierul .res. Ceasul va reporni dupa ce se instaleaza fisierul .fw. +\n +\nNota: Nu este necesar sa instalezi fisierul .res daca acest fisier este identic cu cel instalat anterior. +\n +\nNETESTAT, V-AR PUTEA BLOCA ECHIPAMENTUL, CONTINUATI PE RISCUL DUMNEAVOASTRA! + Acest firmware nu a fost testat si ar putea sa nu fie compatibil cu Gadgetbridge. +\n +\nTe DESCURAJAM sa-l instalezi pe Mi Band! + Optiuni dezvoltator + Adresa Mi Band + + Setari Pebble + + Sincronizeaza Misfit + Dezactivand aceasta optiune va opri Pebble 2/LE sa vibreze la apeluri + + Notificari normale + Latitudine + Longitudine + Meteo (Scurtatura) + Activitate + Meteo + Alarma + Cronometru + Compas + Setari + Alipay + From 27ea72202151f28660cd9370e20e301d836312b5 Mon Sep 17 00:00:00 2001 From: Andreas Shimokawa Date: Mon, 16 Jul 2018 13:37:08 +0200 Subject: [PATCH 05/32] bump gradle plugin version --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index 0fbc9d45b..98e051161 100644 --- a/build.gradle +++ b/build.gradle @@ -6,7 +6,7 @@ buildscript { google() } dependencies { - classpath 'com.android.tools.build:gradle:3.1.2' + classpath 'com.android.tools.build:gradle:3.1.3' // NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files From dc1e8316301270504d2fe8e0a4c6d9af99331738 Mon Sep 17 00:00:00 2001 From: Andreas Shimokawa Date: Mon, 16 Jul 2018 13:38:51 +0200 Subject: [PATCH 06/32] Mi Band 3: Fix Pairing, this MIGHT break pairing for other devices (Bip/Cor/Mi Band 2) --- .../gadgetbridge/devices/miband/MiBand2Service.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/miband/MiBand2Service.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/miband/MiBand2Service.java index b52a7b736..3bb2eb843 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/miband/MiBand2Service.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/miband/MiBand2Service.java @@ -101,7 +101,7 @@ public class MiBand2Service { /** * In some logs it's 0x0... */ - public static final byte AUTH_BYTE = 0x8; + public static final byte AUTH_BYTE = 0x00; // maybe not really activity data, but steps? public static final byte COMMAND_FETCH_DATA = 0x02; From 46f3686764d14e9f87e97d8ee9c68ccb654e5c41 Mon Sep 17 00:00:00 2001 From: Andreas Shimokawa Date: Mon, 16 Jul 2018 14:19:02 +0200 Subject: [PATCH 07/32] Mi Band 3: Also send AQI for weather to make current temperature appear --- .../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 8ae653ac5..58f2c41c8 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 @@ -247,7 +247,7 @@ public class AmazfitBipSupport extends MiBand2Support { LOG.error("Error sending current weather", ex); } - if (gbDevice.getType() == DeviceType.AMAZFITBIP) { + if (gbDevice.getType() != DeviceType.AMAZFITCOR) { try { TransactionBuilder builder; builder = performInitialized("Sending air quality index"); From f2aa71e32cb0f0b2f319c78f32021cb73b964a6c Mon Sep 17 00:00:00 2001 From: Andreas Shimokawa Date: Mon, 16 Jul 2018 14:36:52 +0200 Subject: [PATCH 08/32] Amazfit Bip: Support Russian language. Closes #1145 --- .../devices/huami/amazfitbip/AmazfitBipSupport.java | 12 ++++++++++-- app/src/main/res/values/arrays.xml | 2 ++ app/src/main/res/values/strings.xml | 1 + 3 files changed, 13 insertions(+), 2 deletions(-) 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 58f2c41c8..e4edd33e7 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 @@ -50,12 +50,12 @@ import nodomain.freeyourgadget.gadgetbridge.service.btle.actions.ConditionalWrit import nodomain.freeyourgadget.gadgetbridge.service.btle.profiles.alertnotification.AlertCategory; import nodomain.freeyourgadget.gadgetbridge.service.btle.profiles.alertnotification.AlertNotificationProfile; import nodomain.freeyourgadget.gadgetbridge.service.btle.profiles.alertnotification.NewAlert; -import nodomain.freeyourgadget.gadgetbridge.service.devices.huami.amazfitbip.operations.AmazfitBipFetchLogsOperation; import nodomain.freeyourgadget.gadgetbridge.service.devices.huami.HuamiIcon; -import nodomain.freeyourgadget.gadgetbridge.service.devices.miband.NotificationStrategy; +import nodomain.freeyourgadget.gadgetbridge.service.devices.huami.amazfitbip.operations.AmazfitBipFetchLogsOperation; import nodomain.freeyourgadget.gadgetbridge.service.devices.huami.miband2.MiBand2Support; import nodomain.freeyourgadget.gadgetbridge.service.devices.huami.miband2.operations.FetchActivityOperation; import nodomain.freeyourgadget.gadgetbridge.service.devices.huami.miband2.operations.FetchSportsSummaryOperation; +import nodomain.freeyourgadget.gadgetbridge.service.devices.miband.NotificationStrategy; import nodomain.freeyourgadget.gadgetbridge.util.Prefs; import nodomain.freeyourgadget.gadgetbridge.util.StringUtils; import nodomain.freeyourgadget.gadgetbridge.util.Version; @@ -427,6 +427,10 @@ public class AmazfitBipSupport extends MiBand2Support { command_old = AmazfitBipService.COMMAND_SET_LANGUAGE_SPANISH; localeString = "es_ES"; break; + case 4: + command_old = AmazfitBipService.COMMAND_SET_LANGUAGE_ENGLISH; + localeString = "ru_RU"; + break; default: switch (language) { case "zh": @@ -442,6 +446,10 @@ public class AmazfitBipSupport extends MiBand2Support { command_old = AmazfitBipService.COMMAND_SET_LANGUAGE_SPANISH; localeString = "es_ES"; break; + case "ru": + command_old = AmazfitBipService.COMMAND_SET_LANGUAGE_ENGLISH; + localeString = "ru_RU"; + break; default: command_old = AmazfitBipService.COMMAND_SET_LANGUAGE_ENGLISH; localeString = "en_US"; diff --git a/app/src/main/res/values/arrays.xml b/app/src/main/res/values/arrays.xml index b1e70e8d7..8a55f30e1 100644 --- a/app/src/main/res/values/arrays.xml +++ b/app/src/main/res/values/arrays.xml @@ -258,6 +258,7 @@ @string/traditional_chinese @string/english @string/spanish + @string/russian @@ -266,6 +267,7 @@ 1 2 3 + 4 diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index fd44522e4..dabc94303 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -421,6 +421,7 @@ Traditional Chinese English Spanish + Russian About to transfer data since %1$s From 78734f50cc4aaad31a0c341f36957cad99098d45 Mon Sep 17 00:00:00 2001 From: Andreas Shimokawa Date: Mon, 16 Jul 2018 14:49:58 +0200 Subject: [PATCH 09/32] Update changelog and readme --- CHANGELOG.md | 3 +++ README.md | 4 ++++ 2 files changed, 7 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 166e3292a..394f48eb2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,7 +3,10 @@ #### Version 0.28.0 (WIP) * Inital support for ZeTime * Amazfit Bip/Cor: Rework firmware detection to cope with new version scheme +* Amazfit Bip: Support setting language to Russian * Mi Band 3: support setting language (english and spanish tested) +* Mi Band 3: Fix pairing +* Mi Band 3: Send AQI to enable display of current temperature #### Version 0.27.1 * Pebble: Change appstore search to point to RomanPort's pebble appstore diff --git a/README.md b/README.md index 7648d0cfc..2ef0d14c1 100644 --- a/README.md +++ b/README.md @@ -26,11 +26,13 @@ vendor's servers. * Pebble 2 [Wiki](https://github.com/Freeyourgadget/Gadgetbridge/wiki/Pebble) * Mi Band, Mi Band 1A, Mi Band 1S [Wiki](https://github.com/Freeyourgadget/Gadgetbridge/wiki/Mi-Band) * Mi Band 2 [Wiki](https://github.com/Freeyourgadget/Gadgetbridge/wiki/Mi-Band-2) +* Mi Band 3 [Wiki](https://github.com/Freeyourgadget/Gadgetbridge/wiki/Mi-Band-3) * Amazfit Bip [Wiki](https://github.com/Freeyourgadget/Gadgetbridge/wiki/Amazfit-Bip) * Amazfit Cor (no maintainer) [Wiki](https://github.com/Freeyourgadget/Gadgetbridge/wiki/Amazfit-Cor) * HPlus Devices (e.g. ZeBand) [Wiki](https://github.com/Freeyourgadget/Gadgetbridge/wiki/HPlus) * Teclast H10, H30 (WIP) * NO.1 F1 (WIP) +* ZeTime (WIP) * Liveview * Vibratissimo (experimental) * XWatch (Affordable Chinese Casio-like smartwatches) @@ -92,6 +94,8 @@ For more information read [this wiki article](https://github.com/Freeyourgadget/ * João Paulo Barraca (HPlus) * Vitaly Svyastyn (NO.1 F1) * Sami Alaoui (Teclast H30) +* "ladbsoft" (XWatch) +* Sebastian Kranz (ZeTime) ## Contribute From 7cad1fe2d3a9d1bc463ceff43138d6d4a83b1d70 Mon Sep 17 00:00:00 2001 From: Yaron Shahrabani Date: Sun, 15 Jul 2018 06:07:58 +0000 Subject: [PATCH 10/32] Translated using Weblate (Hebrew) Currently translated at 100.0% (501 of 501 strings) Translation: Freeyourgadget/Gadgetbridge Translate-URL: https://hosted.weblate.org/projects/freeyourgadget/gadgetbridge/he/ --- app/src/main/res/values-he/strings.xml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/app/src/main/res/values-he/strings.xml b/app/src/main/res/values-he/strings.xml index 1e37004d5..a7692dcd3 100644 --- a/app/src/main/res/values-he/strings.xml +++ b/app/src/main/res/values-he/strings.xml @@ -551,4 +551,6 @@ זמן מזערי בין אחזורים מתבצע אחזור כל %s דקות + MyKronoz ZeTime + From aa143577f8ac21270ca0de7a7bb4d3a4634f8a7f Mon Sep 17 00:00:00 2001 From: Andreas Shimokawa Date: Mon, 16 Jul 2018 15:16:23 +0200 Subject: [PATCH 11/32] Amazfit Cor: Support language switching on newer firmwares I shamelessly assumed the firmware version (chose the version that was included in the same Mi Fit version when bip started to support the new command) --- CHANGELOG.md | 1 + .../service/devices/huami/amazfitbip/AmazfitBipSupport.java | 4 +++- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 394f48eb2..a1aa19197 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,7 @@ * Inital support for ZeTime * Amazfit Bip/Cor: Rework firmware detection to cope with new version scheme * Amazfit Bip: Support setting language to Russian +* Amazfit Cor: Support language switching on newer firmwares * Mi Band 3: support setting language (english and spanish tested) * Mi Band 3: Fix pairing * Mi Band 3: Send AQI to enable display of current temperature 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 e4edd33e7..9d7a7277b 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 @@ -462,7 +462,9 @@ public class AmazfitBipSupport extends MiBand2Support { builder.add(new ConditionalWriteAction(getCharacteristic(MiBand2Service.UUID_CHARACTERISTIC_3_CONFIGURATION)) { @Override protected byte[] checkCondition() { - if (gbDevice.getType() == DeviceType.MIBAND3 || (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) || + (gbDevice.getType() == DeviceType.AMAZFITCOR && new Version(gbDevice.getFirmwareVersion()).compareTo(new Version("1.0.7.23")) >= 0)) { return command_new; } else { return command_old; From eef38d46807804d490333497c543b3839baa0fc8 Mon Sep 17 00:00:00 2001 From: Andreas Shimokawa Date: Tue, 17 Jul 2018 00:29:36 +0200 Subject: [PATCH 12/32] Only use 0x00 as auth flags on Mi Band 3 - to not disturb other devices --- .../devices/miband/MiBand2Service.java | 2 +- .../devices/huami/miband2/MiBand2Support.java | 15 ++++++++++----- .../huami/miband2/operations/InitOperation.java | 10 ++++++---- 3 files changed, 17 insertions(+), 10 deletions(-) diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/miband/MiBand2Service.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/miband/MiBand2Service.java index 3bb2eb843..59e2e0408 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/miband/MiBand2Service.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/miband/MiBand2Service.java @@ -101,7 +101,7 @@ public class MiBand2Service { /** * In some logs it's 0x0... */ - public static final byte AUTH_BYTE = 0x00; + public static final byte AUTH_BYTE = 0x08; // maybe not really activity data, but steps? public static final byte COMMAND_FETCH_DATA = 0x02; diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/miband2/MiBand2Support.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/miband2/MiBand2Support.java index ab1d4dbe6..9e95d853b 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/miband2/MiBand2Support.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/miband2/MiBand2Support.java @@ -57,6 +57,7 @@ import nodomain.freeyourgadget.gadgetbridge.deviceevents.GBDeviceEventFindPhone; import nodomain.freeyourgadget.gadgetbridge.deviceevents.GBDeviceEventVersionInfo; import nodomain.freeyourgadget.gadgetbridge.devices.SampleProvider; import nodomain.freeyourgadget.gadgetbridge.devices.huami.ActivateDisplayOnLift; +import nodomain.freeyourgadget.gadgetbridge.devices.huami.HuamiConst; import nodomain.freeyourgadget.gadgetbridge.devices.huami.HuamiCoordinator; import nodomain.freeyourgadget.gadgetbridge.devices.huami.HuamiFWHelper; import nodomain.freeyourgadget.gadgetbridge.devices.huami.amazfitbip.AmazfitBipService; @@ -69,7 +70,6 @@ import nodomain.freeyourgadget.gadgetbridge.devices.miband.MiBandConst; import nodomain.freeyourgadget.gadgetbridge.devices.miband.MiBandCoordinator; import nodomain.freeyourgadget.gadgetbridge.devices.miband.MiBandService; import nodomain.freeyourgadget.gadgetbridge.devices.miband.VibrationProfile; -import nodomain.freeyourgadget.gadgetbridge.devices.huami.HuamiConst; import nodomain.freeyourgadget.gadgetbridge.entities.DaoSession; import nodomain.freeyourgadget.gadgetbridge.entities.Device; import nodomain.freeyourgadget.gadgetbridge.entities.MiBandActivitySample; @@ -84,6 +84,7 @@ import nodomain.freeyourgadget.gadgetbridge.model.CalendarEvents; import nodomain.freeyourgadget.gadgetbridge.model.CallSpec; import nodomain.freeyourgadget.gadgetbridge.model.CannedMessagesSpec; import nodomain.freeyourgadget.gadgetbridge.model.DeviceService; +import nodomain.freeyourgadget.gadgetbridge.model.DeviceType; import nodomain.freeyourgadget.gadgetbridge.model.MusicSpec; import nodomain.freeyourgadget.gadgetbridge.model.MusicStateSpec; import nodomain.freeyourgadget.gadgetbridge.model.NotificationSpec; @@ -103,13 +104,13 @@ import nodomain.freeyourgadget.gadgetbridge.service.btle.profiles.heartrate.Hear import nodomain.freeyourgadget.gadgetbridge.service.devices.common.SimpleNotification; import nodomain.freeyourgadget.gadgetbridge.service.devices.huami.HuamiBatteryInfo; import nodomain.freeyourgadget.gadgetbridge.service.devices.huami.HuamiDeviceEvent; -import nodomain.freeyourgadget.gadgetbridge.service.devices.miband.NotificationStrategy; -import nodomain.freeyourgadget.gadgetbridge.service.devices.miband.RealtimeSamplesSupport; import nodomain.freeyourgadget.gadgetbridge.service.devices.huami.miband2.actions.StopNotificationAction; import nodomain.freeyourgadget.gadgetbridge.service.devices.huami.miband2.operations.FetchActivityOperation; import nodomain.freeyourgadget.gadgetbridge.service.devices.huami.miband2.operations.FetchSportsSummaryOperation; import nodomain.freeyourgadget.gadgetbridge.service.devices.huami.miband2.operations.InitOperation; import nodomain.freeyourgadget.gadgetbridge.service.devices.huami.miband2.operations.UpdateFirmwareOperation; +import nodomain.freeyourgadget.gadgetbridge.service.devices.miband.NotificationStrategy; +import nodomain.freeyourgadget.gadgetbridge.service.devices.miband.RealtimeSamplesSupport; import nodomain.freeyourgadget.gadgetbridge.util.GB; import nodomain.freeyourgadget.gadgetbridge.util.NotificationUtils; import nodomain.freeyourgadget.gadgetbridge.util.Prefs; @@ -209,7 +210,11 @@ public class MiBand2Support extends AbstractBTLEDeviceSupport { try { boolean authenticate = needsAuth; needsAuth = false; - new InitOperation(authenticate, this, builder).perform(); + byte authFlags = MiBand2Service.AUTH_BYTE; + if (gbDevice.getType() == DeviceType.MIBAND3) { + authFlags = 0x00; + } + new InitOperation(authenticate, authFlags, this, builder).perform(); characteristicHRControlPoint = getCharacteristic(GattCharacteristic.UUID_CHARACTERISTIC_HEART_RATE_CONTROL_POINT); } catch (IOException e) { GB.toast(getContext(), "Initializing Mi Band 2 failed", Toast.LENGTH_SHORT, GB.ERROR, e); @@ -219,7 +224,7 @@ public class MiBand2Support extends AbstractBTLEDeviceSupport { /** * Returns the given date/time (calendar) as a byte sequence, suitable for sending to the - * Mi Band 2 (or derivative). The band appears to not handle DST offsets, so we simply add this + * Mi Band 2 (or derivative). The band appears to not handle DST offsets, so we simply add this * to the timezone. * @param calendar * @param precision diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/miband2/operations/InitOperation.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/miband2/operations/InitOperation.java index 93204f441..d110289eb 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/miband2/operations/InitOperation.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/miband2/operations/InitOperation.java @@ -49,10 +49,12 @@ public class InitOperation extends AbstractBTLEOperation { private final TransactionBuilder builder; private final boolean needsAuth; + private final byte authFlags; - public InitOperation(boolean needsAuth, MiBand2Support support, TransactionBuilder builder) { + public InitOperation(boolean needsAuth, byte authFlags, MiBand2Support support, TransactionBuilder builder) { super(support); this.needsAuth = needsAuth; + this.authFlags = authFlags; this.builder = builder; builder.setGattCallback(this); } @@ -63,7 +65,7 @@ public class InitOperation extends AbstractBTLEOperation { if (needsAuth) { builder.add(new SetDeviceStateAction(getDevice(), GBDevice.State.AUTHENTICATING, getContext())); // write key to miband2 - byte[] sendKey = org.apache.commons.lang3.ArrayUtils.addAll(new byte[]{MiBand2Service.AUTH_SEND_KEY, MiBand2Service.AUTH_BYTE}, getSecretKey()); + byte[] sendKey = org.apache.commons.lang3.ArrayUtils.addAll(new byte[]{MiBand2Service.AUTH_SEND_KEY, authFlags}, getSecretKey()); builder.write(getCharacteristic(MiBand2Service.UUID_CHARACTERISTIC_AUTH), sendKey); } else { builder.add(new SetDeviceStateAction(getDevice(), GBDevice.State.INITIALIZING, getContext())); @@ -73,7 +75,7 @@ public class InitOperation extends AbstractBTLEOperation { } private byte[] requestAuthNumber() { - return new byte[]{MiBand2Service.AUTH_REQUEST_RANDOM_AUTH_NUMBER, MiBand2Service.AUTH_BYTE}; + return new byte[]{MiBand2Service.AUTH_REQUEST_RANDOM_AUTH_NUMBER, authFlags}; } private byte[] getSecretKey() { @@ -105,7 +107,7 @@ public class InitOperation extends AbstractBTLEOperation { // md5?? byte[] eValue = handleAESAuth(value, getSecretKey()); byte[] responseValue = org.apache.commons.lang3.ArrayUtils.addAll( - new byte[]{MiBand2Service.AUTH_SEND_ENCRYPTED_AUTH_NUMBER, MiBand2Service.AUTH_BYTE}, eValue); + new byte[]{MiBand2Service.AUTH_SEND_ENCRYPTED_AUTH_NUMBER, authFlags}, eValue); TransactionBuilder builder = createTransactionBuilder("Sending the encrypted random key to the band"); builder.write(characteristic, responseValue); From 1f6850a4b32568f7eb90f414f18d540ed7fabd2b Mon Sep 17 00:00:00 2001 From: Andreas Shimokawa Date: Tue, 17 Jul 2018 16:01:41 +0200 Subject: [PATCH 13/32] update changelogs --- CHANGELOG.md | 4 ++-- app/src/main/res/xml/changelog_master.xml | 10 +++++++++- fastlane/metadata/android/en-US/changelogs/134.txt | 7 +++++++ 3 files changed, 18 insertions(+), 3 deletions(-) create mode 100644 fastlane/metadata/android/en-US/changelogs/134.txt diff --git a/CHANGELOG.md b/CHANGELOG.md index a1aa19197..455bc44d9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,7 +1,7 @@ ### Changelog -#### Version 0.28.0 (WIP) -* Inital support for ZeTime +#### Version 0.28.0 +* Initial support for ZeTime * Amazfit Bip/Cor: Rework firmware detection to cope with new version scheme * Amazfit Bip: Support setting language to Russian * Amazfit Cor: Support language switching on newer firmwares diff --git a/app/src/main/res/xml/changelog_master.xml b/app/src/main/res/xml/changelog_master.xml index b22a59188..d43375fc0 100644 --- a/app/src/main/res/xml/changelog_master.xml +++ b/app/src/main/res/xml/changelog_master.xml @@ -1,5 +1,13 @@ - + + Initial support for ZeTime + Amazfit Bip/Cor: Rework firmware detection to cope with new version scheme + Amazfit Bip: Support setting language to Russian + Amazfit Cor: Support language switching on newer firmwares + Mi Band 3: support setting language (english and spanish tested) + Mi Band 3: Fix pairing + Mi Band 3: Send AQI to enable display of current temperature + Pebble: Change appstore search to point to RomanPort's pebble appstore Mi Band 3: Allow flashing fonts (untested) diff --git a/fastlane/metadata/android/en-US/changelogs/134.txt b/fastlane/metadata/android/en-US/changelogs/134.txt new file mode 100644 index 000000000..887942422 --- /dev/null +++ b/fastlane/metadata/android/en-US/changelogs/134.txt @@ -0,0 +1,7 @@ +* Initial support for ZeTime +* Amazfit Bip/Cor: Rework firmware detection to cope with new version scheme +* Amazfit Bip: Support setting language to Russian +* Amazfit Cor: Support language switching on newer firmwares +* Mi Band 3: support setting language (english and spanish tested) +* Mi Band 3: Fix pairing +* Mi Band 3: Send AQI to enable display of current temperature From c7125f78cf9e6ecb3c02e0ec1a637ff9bb36e0b0 Mon Sep 17 00:00:00 2001 From: Andreas Shimokawa Date: Tue, 17 Jul 2018 16:12:15 +0200 Subject: [PATCH 14/32] no comment --- app/src/main/res/xml/changelog_master.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/app/src/main/res/xml/changelog_master.xml b/app/src/main/res/xml/changelog_master.xml index d43375fc0..64ce04aec 100644 --- a/app/src/main/res/xml/changelog_master.xml +++ b/app/src/main/res/xml/changelog_master.xml @@ -1,4 +1,5 @@ + Initial support for ZeTime Amazfit Bip/Cor: Rework firmware detection to cope with new version scheme From 2468ad9d7f9ba0d6904b98e308144d258d4bbf0c Mon Sep 17 00:00:00 2001 From: Yaron Shahrabani Date: Tue, 17 Jul 2018 06:46:02 +0000 Subject: [PATCH 15/32] Translated using Weblate (Hebrew) Currently translated at 100.0% (502 of 502 strings) Translation: Freeyourgadget/Gadgetbridge Translate-URL: https://hosted.weblate.org/projects/freeyourgadget/gadgetbridge/he/ --- app/src/main/res/values-he/strings.xml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/app/src/main/res/values-he/strings.xml b/app/src/main/res/values-he/strings.xml index a7692dcd3..95dc9117f 100644 --- a/app/src/main/res/values-he/strings.xml +++ b/app/src/main/res/values-he/strings.xml @@ -553,4 +553,6 @@ MyKronoz ZeTime + רוסית + From 7fb0ad0dfd3b068deb3ed5f103574a8560c7be43 Mon Sep 17 00:00:00 2001 From: Denis Date: Tue, 17 Jul 2018 11:11:30 +0000 Subject: [PATCH 16/32] Translated using Weblate (Russian) Currently translated at 93.8% (471 of 502 strings) Translation: Freeyourgadget/Gadgetbridge Translate-URL: https://hosted.weblate.org/projects/freeyourgadget/gadgetbridge/ru/ --- app/src/main/res/values-ru/strings.xml | 81 +++++++++++++++++++------- 1 file changed, 59 insertions(+), 22 deletions(-) diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml index 522c74578..edc4e8914 100644 --- a/app/src/main/res/values-ru/strings.xml +++ b/app/src/main/res/values-ru/strings.xml @@ -82,7 +82,7 @@ Когда экран выключен Никогда Конфиденциальность - Вызов режима конфиденциальности + Конфиденциальность вызовов Отображать имя и номер Скрывать имя, но отображать номер Скрывать номер, но отображать имя @@ -159,7 +159,7 @@ Gadgetbridge запущен установка бинарного файла %1$d/%2$d Установка не удалась - Установка завершена + Установлено ВЫ ПЫТАЕТЕСЬ УСТАНОВИТЬ ПРОШИВКУ, ПРОДОЛЖАЙТЕ НА СВОЙ СТРАХ И РИСК.\n\n\n Эта прошивка для ревизии устройства: %s Вы собираетесь установить приложение:\n\n\n%1$s версия %2$s от %3$s\n Недоступно @@ -218,7 +218,7 @@ Чат Навигация Социальные сети - Найти потерянное устройство + Поиск потерянного устройства Отмените, чтобы прекратить вибрацию. Ваша активность Завести Будильник @@ -236,7 +236,7 @@ Будильник был послан на устройство! Нет данных. Синхронизировать устройство? Будет передано %1$s данных, начиная с %2$s - Цель шагов на каждый день + Ежедневная цель шагов Произошла ошибка при выполнении \'%1$s\' Ваша активность (АЛЬФА) Подключиться не удалось: %1$s @@ -316,7 +316,7 @@ Версия прошивки: %1$s Ошибка создания каталога для лог-файлов: %1$s "Версия устройства: " - Происходит обновление прошивки + Обновление прошивки Прошивка не отправлена Пульс Пульс @@ -334,16 +334,16 @@ Ошибка экспорта настроек: %1$s Импортировать данные? Точно перезаписать текущую базу данных? Все текущие данные вашей активности (если они есть) будут утеряны. - Импорт успешно завершён. + Импортировано. Ошибка импорта базы данных: %1$s Ошибка импорта настроек: %1$s Удалить данные по вашей активности? Действительно удалить всю базу данных? Все данные о вашей активности и информация о ваших устройствах будут утеряны. - Данные успешно удалены. + Данные удалены. Удалить базу данных не получилось. Удалить данные по предыдущей активности? Точно удалить старые данные об активности? Все не импортированные данные об активности будут утеряны. - Устаревшие данные по вашей активности успешно удалены. + Устаревшие данные активности удалены. Удалить устаревшие данные по вашей активности не получилось. Перезаписать Отмена @@ -378,7 +378,7 @@ Не удалось выполнить привязку к %1$s. Попытка соединения с: %1$s Включить Bluetooth для обнаружения устройств. - Привязка к %1$s успешно выполнена. + Связано с %1$s. Выполнить сопряжение с %1$s ? Выберите \"Сопряжение\" для сопряжения ваших устройств. Если не получилось, попробуйте снова без сопряжения. Сопряжение @@ -387,19 +387,20 @@ Подключить Заблокированные календари - "Вы собираетесь установить прошивку %s на ваш Amazfit Bip. + Вы собираетесь установить прошивку %s на ваш Amazfit Bip. +\n +\nСоблюдайте последовательность: вначале установите файл .fw, затем .res, и затем .gps. После установки файла .fw часы перезагрузятся. \n -\nПеред этим, пожалуйста, установите файл .gps, файл .res и последним — .fw файл. После установки .fw файла устройство перезагрузится. -\nОбратите внимание: если файлы .gps и .res такие же, как в текущей версии, их не нужно переустанавливать. -\n -\nВы действуете на свой страх и риск!" - Вы собираетесь установить прошивку %s на ваш Amazonfit Cor. -\n -\nПеред этим, пожалуйста, установите файл .res и файл .fw. После установки файла .fw ваше устройство перезагрузится. -\n -\nОбратие внимание: если версия файла .res совпадает с предыдущей, его не нужно переустанавливать. -\n -\nЭту прошивку не проверяли, поэтому есть вероятность сломать ваше устройство. Действуйте на свой страх и риск! +\nОбратите внимание: если файлы .gps и .res такие же, как в текущей версии, их не нужно переустанавливать. +\n +\nВЫ ДЕЙСТВУЕТЕ НА СВОЙ СТРАХ И РИСК! + Вы собираетесь установить прошивку %s на ваш Amazfit Cor. +\n +\nСоблюдайте последовательность: вначале установите файл .fw, затем .res. После установки файла .fw часы перезагрузятся. +\n +\nОбратите внимание: если версия файла .res совпадает с установленной, его не нужно переустанавливать. +\n +\nВЫ ДЕЙСТВУЕТЕ НА СВОЙ СТРАХ И РИСК! Включить жесты \"провести направо и налево\" в графиках активности Заблокировать Календари @@ -481,4 +482,40 @@ Погода Компас Настройки - + Заблокировать все + Разблокировать все + + + Вы собираетесь установить прошивку %s на ваш Mi Band 3. +\n +\nСоблюдайте последовательность: вначале установите файл .fw, затем .res. После установки файла .fw часы перезагрузятся. +\n +\nОбратите внимание: если версия файла .res совпадает с установленной, его не нужно переустанавливать. +\n +\nНЕ ПРОВЕРЯЛОСЬ, ЕСТЬ ВЕРОЯТНОСТЬ СЛОМАТЬ ВАШЕ УСТРОЙСТВО. ВЫ ДЕЙСТВУЕТЕ НА СВОЙ СТРАХ И РИСК! + Местоположение для погоды (CM/LOS) + + Подключаться только в режиме GATT-клиента + Экспериментальные настройки только для Pebble 2. Попробуйте, если есть проблемы с соединением. + Автоматический экспорт данных + Включить автоматический экспорт + Путь экспорта + Интервал экспорта + Экспортировать каждые %d часов + + Испанский + Русский + + Не измерялось + Активность + Неизвестная активность + Беговая дорожка + Прошивка GPS + Ресурсы + Неизвестное устройство + Pebble + Amazfit Bip + Amazfit Cor + Alipay (ярлык) + Alipay + From cdad2ba67d92223047a46068a477241fb83fa159 Mon Sep 17 00:00:00 2001 From: K0L0B0G Date: Tue, 17 Jul 2018 11:27:54 +0000 Subject: [PATCH 17/32] Translated using Weblate (Russian) Currently translated at 93.8% (471 of 502 strings) Translation: Freeyourgadget/Gadgetbridge Translate-URL: https://hosted.weblate.org/projects/freeyourgadget/gadgetbridge/ru/ --- app/src/main/res/values-ru/strings.xml | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml index edc4e8914..5eed409a3 100644 --- a/app/src/main/res/values-ru/strings.xml +++ b/app/src/main/res/values-ru/strings.xml @@ -518,4 +518,11 @@ Amazfit Cor Alipay (ярлык) Alipay - +Вкл. + Выбрать все + Поделиться + Прошивка + Погода (ярлык) + Будильник + Таймер + From d1253348dccdeaa0cedc43312d97582924a81650 Mon Sep 17 00:00:00 2001 From: Andreas Shimokawa Date: Thu, 19 Jul 2018 12:00:17 +0200 Subject: [PATCH 18/32] Mi Band 3: whitelist tested firmware, res and font --- .../service/devices/huami/miband3/MiBand3FirmwareInfo.java | 5 +++++ 1 file changed, 5 insertions(+) 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 fcfda8127..124b96d48 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 @@ -43,8 +43,13 @@ public class MiBand3FirmwareInfo extends HuamiFirmwareInfo { static { // firmware + crcToVersion.put(55852, "1.2.0.8"); // resources + crcToVersion.put(54724, "1.2.0.8"); + + // font + crcToVersion.put(19775, "1"); } public MiBand3FirmwareInfo(byte[] bytes) { From e96dcc69abbacfea81335ca302b05963f1f4987c Mon Sep 17 00:00:00 2001 From: Andreas Shimokawa Date: Sat, 21 Jul 2018 17:18:08 +0200 Subject: [PATCH 19/32] Amazfit Bip: try to support weather in newer firmwares --- .../devices/miband/MiBand2Service.java | 2 ++ .../huami/amazfitbip/AmazfitBipSupport.java | 8 +++-- .../devices/huami/miband2/MiBand2Support.java | 32 ++++++++++++++++++- 3 files changed, 39 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/miband/MiBand2Service.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/miband/MiBand2Service.java index 59e2e0408..8fedb3d58 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/miband/MiBand2Service.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/miband/MiBand2Service.java @@ -50,6 +50,8 @@ public class MiBand2Service { public static final UUID UUID_CHARACTERISTIC_AUTH = UUID.fromString("00000009-0000-3512-2118-0009af100700"); public static final UUID UUID_CHARACTERISTIC_DEVICEEVENT = UUID.fromString("00000010-0000-3512-2118-0009af100700"); + public static final UUID UUID_CHARACTERISTIC_CHUNKEDTRANSFER = UUID.fromString("00000020-0000-3512-2118-0009af100700"); + public static final int ALERT_LEVEL_NONE = 0; public static final int ALERT_LEVEL_MESSAGE = 1; public static final int ALERT_LEVEL_PHONE_CALL = 2; 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 9d7a7277b..f4f288fbb 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 @@ -310,7 +310,6 @@ public class AmazfitBipSupport extends MiBand2Support { for (WeatherSpec.Forecast forecast : weatherSpec.forecasts) { condition = HuamiWeatherConditions.mapToAmazfitBipWeatherCode(forecast.conditionCode); - buf.put(condition); buf.put(condition); buf.put((byte) (forecast.maxTemp - 273)); @@ -321,7 +320,12 @@ public class AmazfitBipSupport extends MiBand2Support { } } - builder.write(getCharacteristic(AmazfitBipService.UUID_CHARACTERISTIC_WEATHER), buf.array()); + if (characteristicChunked != null) { + writeToChunked(builder, 1, buf.array()); + } else { + builder.write(getCharacteristic(AmazfitBipService.UUID_CHARACTERISTIC_WEATHER), buf.array()); + } + builder.queue(getQueue()); } catch (Exception ex) { LOG.error("Error sending weather forecast", ex); diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/miband2/MiBand2Support.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/miband2/MiBand2Support.java index 9e95d853b..6cda41620 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/miband2/MiBand2Support.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/miband2/MiBand2Support.java @@ -156,7 +156,8 @@ public class MiBand2Support extends AbstractBTLEDeviceSupport { } }; - BluetoothGattCharacteristic characteristicHRControlPoint; + private BluetoothGattCharacteristic characteristicHRControlPoint; + protected BluetoothGattCharacteristic characteristicChunked; private boolean needsAuth; private volatile boolean telephoneRinging; @@ -216,6 +217,7 @@ public class MiBand2Support extends AbstractBTLEDeviceSupport { } new InitOperation(authenticate, authFlags, this, builder).perform(); characteristicHRControlPoint = getCharacteristic(GattCharacteristic.UUID_CHARACTERISTIC_HEART_RATE_CONTROL_POINT); + characteristicChunked = getCharacteristic(MiBand2Service.UUID_CHARACTERISTIC_CHUNKEDTRANSFER); } catch (IOException e) { GB.toast(getContext(), "Initializing Mi Band 2 failed", Toast.LENGTH_SHORT, GB.ERROR, e); } @@ -1609,6 +1611,34 @@ public class MiBand2Support extends AbstractBTLEDeviceSupport { return this; } + protected void writeToChunked(TransactionBuilder builder, int type, byte[] data) { + final int MAX_CHUNKLENGTH = 17; + int remaining = data.length; + byte count = 0; + while (remaining > 0) { + int copybytes = Math.min(remaining, MAX_CHUNKLENGTH); + byte[] chunk = new byte[copybytes + 3]; + + byte flags = 0; + if (remaining <= MAX_CHUNKLENGTH) { + flags |= 0x80; // last chunk + if (count == 0) { + flags |= 0x40; // weird but true + } + } else if (count > 0) { + flags |= 0x40; // consecutive chunk + } + + chunk[0] = 0; + chunk[1] = (byte) (flags | type); + chunk[2] = (byte) (count & 0xff); + + System.arraycopy(data, count++ * MAX_CHUNKLENGTH, chunk, 3, copybytes); + builder.write(characteristicChunked, chunk); + remaining -= copybytes; + } + } + public void phase2Initialize(TransactionBuilder builder) { LOG.info("phase2Initialize..."); requestBatteryInfo(builder); From 86a15a7c7bd96043e69d1c1982e52aa6dd49bd91 Mon Sep 17 00:00:00 2001 From: K0L0B0G Date: Wed, 18 Jul 2018 07:23:32 +0000 Subject: [PATCH 20/32] Translated using Weblate (Russian) Currently translated at 96.6% (485 of 502 strings) Translation: Freeyourgadget/Gadgetbridge Translate-URL: https://hosted.weblate.org/projects/freeyourgadget/gadgetbridge/ru/ --- app/src/main/res/values-ru/strings.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml index 5eed409a3..0e1c12f14 100644 --- a/app/src/main/res/values-ru/strings.xml +++ b/app/src/main/res/values-ru/strings.xml @@ -525,4 +525,5 @@ Погода (ярлык) Будильник Таймер + Велопрогулка From 8141076e25a1e70443cafd85a04dbf3b4077a487 Mon Sep 17 00:00:00 2001 From: Denis Date: Wed, 18 Jul 2018 07:27:55 +0000 Subject: [PATCH 21/32] Translated using Weblate (Russian) Currently translated at 96.6% (485 of 502 strings) Translation: Freeyourgadget/Gadgetbridge Translate-URL: https://hosted.weblate.org/projects/freeyourgadget/gadgetbridge/ru/ --- app/src/main/res/values-ru/strings.xml | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml index 0e1c12f14..6953ed01f 100644 --- a/app/src/main/res/values-ru/strings.xml +++ b/app/src/main/res/values-ru/strings.xml @@ -87,7 +87,7 @@ Скрывать имя, но отображать номер Скрывать номер, но отображать имя Скрывать имя и номер - Нежелательные приложения + Заблокированные приложения Сохранённые сообщения Ответы Общий суффикс @@ -526,4 +526,18 @@ Будильник Таймер Велопрогулка + Тестовое устройство + Mi Band + Mi Band 2 + Mi Band 3 + Vibratissimo + LiveView + HPlus + Makibes F68 + Exrizu K8 + Q8 + Teclast H30 + XWatch + MyKronoz ZeTime + From 290c6c53fb45a59e9b79520f65ee63354d22012a Mon Sep 17 00:00:00 2001 From: Daniele Gobbetti Date: Sun, 22 Jul 2018 11:52:25 +0200 Subject: [PATCH 22/32] Fix wrong mapping yahoo weather conditions to openweathermap. --- .../nodomain/freeyourgadget/gadgetbridge/model/Weather.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/model/Weather.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/model/Weather.java index f2c5a9cf6..1319db113 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/model/Weather.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/model/Weather.java @@ -433,7 +433,7 @@ public class Weather { return 801; case 45: //thundershowers case 47: //isolated thundershowers - return 621; + return 211; case 3200: //not available default: return -1; From a5dd88df53cefae064be67a218943ee8eafc421a Mon Sep 17 00:00:00 2001 From: Daniele Gobbetti Date: Sun, 22 Jul 2018 14:52:17 +0200 Subject: [PATCH 23/32] Fix discovery on devices with Android version < Lollipop also reduce the amount of lines logged in discovery activity. --- .../gadgetbridge/activities/DiscoveryActivity.java | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) 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 b53f5fd98..94bf18c15 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/DiscoveryActivity.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/DiscoveryActivity.java @@ -231,9 +231,7 @@ public class DiscoveryActivity extends AbstractGBActivity implements AdapterView public void logMessageContent(byte[] value) { if (value != null) { - for (byte b : value) { - LOG.warn("DATA: " + String.format("0x%2x", b) + " - " + (char) (b & 0xff)); - } + LOG.warn("DATA: " + GB.hexdump(value, 0, value.length)); } } @@ -630,7 +628,7 @@ public class DiscoveryActivity extends AbstractGBActivity implements AdapterView super.onPause(); stopBTDiscovery(); stopBTLEDiscovery(); - if (GB.supportsBluetoothLE()) { + if (GBApplication.isRunningLollipopOrLater()) { stopNewBTLEDiscovery(); } } From 67a1191a3c89e22d7d67708a7935441d20d3bd47 Mon Sep 17 00:00:00 2001 From: Daniele Gobbetti Date: Sun, 22 Jul 2018 16:11:32 +0200 Subject: [PATCH 24/32] Use UTC timezone in GPX points Fixes #1152 --- .../gadgetbridge/export/GPXExporter.java | 2 +- .../gadgetbridge/util/DateTimeUtils.java | 18 +++++++++++++++++- 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/export/GPXExporter.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/export/GPXExporter.java index 323575782..2773f9208 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/export/GPXExporter.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/export/GPXExporter.java @@ -131,7 +131,7 @@ public class GPXExporter implements ActivityTrackExporter { ser.attribute(NS_DEFAULT, "lon", formatLocation(location.getLongitude())); ser.attribute(NS_DEFAULT, "lat", formatLocation(location.getLatitude())); ser.startTag(NS_DEFAULT, "ele").text(formatLocation(location.getAltitude())).endTag(NS_DEFAULT, "ele"); - ser.startTag(NS_DEFAULT, "time").text(formatTime(point.getTime())).endTag(NS_DEFAULT, "time"); + ser.startTag(NS_DEFAULT, "time").text(DateTimeUtils.formatIso8601UTC(point.getTime())).endTag(NS_DEFAULT, "time"); String description = point.getDescription(); if (description != null) { ser.startTag(NS_DEFAULT, "desc").text(description).endTag(NS_DEFAULT, "desc"); diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/util/DateTimeUtils.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/util/DateTimeUtils.java index b9a577ce8..2977a56fa 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/util/DateTimeUtils.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/util/DateTimeUtils.java @@ -51,7 +51,12 @@ public class DateTimeUtils { @Override public StringBuffer format(Date date, StringBuffer toAppendTo, FieldPosition pos) { StringBuffer rfcFormat = super.format(date, toAppendTo, pos); - return rfcFormat.insert(rfcFormat.length() - 2, ":"); + if (this.getTimeZone().equals(TimeZone.getTimeZone("UTC"))) { + rfcFormat.setLength(rfcFormat.length()-5); + return rfcFormat.append("Z"); + } else { + return rfcFormat.insert(rfcFormat.length() - 2, ":"); + } } }; //no public access, we have to workaround Android bugs @@ -64,6 +69,17 @@ public class DateTimeUtils { if(GBApplication.isRunningNougatOrLater()){ return new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssXXX", Locale.US).format(date); } + ISO_8601_FORMAT.setTimeZone(TimeZone.getDefault()); + return ISO_8601_FORMAT.format(date); + } + + public static String formatIso8601UTC(Date date) { + if(GBApplication.isRunningNougatOrLater()){ + final SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssXXX", Locale.US); + sdf.setTimeZone(TimeZone.getTimeZone("UTC")); + return sdf.format(date); + } + ISO_8601_FORMAT.setTimeZone(TimeZone.getTimeZone("UTC")); return ISO_8601_FORMAT.format(date); } From 2da6749a4091a23ef1560adfd7161bd40bd674c7 Mon Sep 17 00:00:00 2001 From: Daniele Gobbetti Date: Sun, 22 Jul 2018 16:12:09 +0200 Subject: [PATCH 25/32] Add activity kind (if known) to gpx filename Fixes #1161 --- .../FetchSportsDetailsOperation.java | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/miband2/operations/FetchSportsDetailsOperation.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/miband2/operations/FetchSportsDetailsOperation.java index 721e4867a..5700a45dc 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/miband2/operations/FetchSportsDetailsOperation.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/miband2/operations/FetchSportsDetailsOperation.java @@ -30,12 +30,14 @@ import java.util.concurrent.TimeUnit; import nodomain.freeyourgadget.gadgetbridge.GBApplication; import nodomain.freeyourgadget.gadgetbridge.Logging; +import nodomain.freeyourgadget.gadgetbridge.R; import nodomain.freeyourgadget.gadgetbridge.database.DBHandler; import nodomain.freeyourgadget.gadgetbridge.devices.huami.amazfitbip.AmazfitBipService; import nodomain.freeyourgadget.gadgetbridge.devices.miband.MiBand2Service; import nodomain.freeyourgadget.gadgetbridge.entities.BaseActivitySummary; import nodomain.freeyourgadget.gadgetbridge.export.ActivityTrackExporter; import nodomain.freeyourgadget.gadgetbridge.export.GPXExporter; +import nodomain.freeyourgadget.gadgetbridge.model.ActivityKind; import nodomain.freeyourgadget.gadgetbridge.model.ActivityTrack; import nodomain.freeyourgadget.gadgetbridge.service.btle.BLETypeConversions; import nodomain.freeyourgadget.gadgetbridge.service.btle.TransactionBuilder; @@ -99,7 +101,22 @@ public class FetchSportsDetailsOperation extends AbstractFetchOperation { try { ActivityTrack track = parser.parse(buffer.toByteArray()); ActivityTrackExporter exporter = createExporter(); - String fileName = FileUtils.makeValidFileName("gadgetbridge-track-" + DateTimeUtils.formatIso8601(summary.getStartTime()) + ".gpx"); + String trackType = "track"; + switch (summary.getActivityKind()) { + case ActivityKind.TYPE_CYCLING: + trackType = getContext().getString(R.string.activity_type_biking); + break; + case ActivityKind.TYPE_RUNNING: + trackType = getContext().getString(R.string.activity_type_running); + break; + case ActivityKind.TYPE_WALKING: + trackType = getContext().getString(R.string.activity_type_walking); + break; + case ActivityKind.TYPE_SWIMMING: + trackType = getContext().getString(R.string.activity_type_swimming); + break; + } + String fileName = FileUtils.makeValidFileName("gadgetbridge-"+trackType.toLowerCase()+"-" + DateTimeUtils.formatIso8601(summary.getStartTime()) + ".gpx"); File targetFile = new File(FileUtils.getExternalFilesDir(), fileName); try { From 8b445bab20ec0445184c950cc1820922e0d749c4 Mon Sep 17 00:00:00 2001 From: Andreas Shimokawa Date: Sun, 22 Jul 2018 16:31:38 +0200 Subject: [PATCH 26/32] Bump version, add changelog --- CHANGELOG.md | 7 +++++++ app/build.gradle | 4 ++-- app/src/main/res/xml/changelog_master.xml | 7 +++++++ fastlane/metadata/android/en-US/changelogs/135.txt | 5 +++++ 4 files changed, 21 insertions(+), 2 deletions(-) create mode 100644 fastlane/metadata/android/en-US/changelogs/135.txt diff --git a/CHANGELOG.md b/CHANGELOG.md index 455bc44d9..8d6210945 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,12 @@ ### Changelog +#### Version 0.28.1 +* Fix wrong weather icon mapping in rare cases +* Fix device discovery on Android 4.4 +* Amazfit Bip: Use UTC in gpx tracks for better compatibility with external software +* Amazfit Bip: Add the (localized) activity type to the gpx filename +* Amazfit Bip: Fix weather on latest firmwares + #### Version 0.28.0 * Initial support for ZeTime * Amazfit Bip/Cor: Rework firmware detection to cope with new version scheme diff --git a/app/build.gradle b/app/build.gradle index 13bb7b231..26d186448 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.28.0" - versionCode 134 + versionName "0.28.1" + versionCode 135 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 64ce04aec..65decd4ac 100644 --- a/app/src/main/res/xml/changelog_master.xml +++ b/app/src/main/res/xml/changelog_master.xml @@ -1,5 +1,12 @@ + + Fix wrong weather icon mapping in rare cases + Fix device discovery on Android 4.4 + Amazfit Bip: Use UTC in gpx tracks for better compatibility with external software + Amazfit Bip: Add the (localized) activity type to the gpx filename + Amazfit Bip: Fix weather on latest firmwares + Initial support for ZeTime Amazfit Bip/Cor: Rework firmware detection to cope with new version scheme diff --git a/fastlane/metadata/android/en-US/changelogs/135.txt b/fastlane/metadata/android/en-US/changelogs/135.txt new file mode 100644 index 000000000..f71dfa789 --- /dev/null +++ b/fastlane/metadata/android/en-US/changelogs/135.txt @@ -0,0 +1,5 @@ +* Fix wrong weather icon mapping in rare cases +* Fix device discovery on Android 4.4 +* Amazfit Bip: Use UTC in gpx tracks for better compatibility with external software +* Amazfit Bip: Add the (localized) activity type to the gpx filename +* Amazfit Bip: Fix weather on latest firmwares From 872a91b0b5e89f1558733d8064165719a0b57b3d Mon Sep 17 00:00:00 2001 From: Andreas Shimokawa Date: Sun, 22 Jul 2018 16:39:37 +0200 Subject: [PATCH 27/32] Fix "Amazfit Bit" typo --- README.md | 2 +- app/src/main/res/values-pt-rBR/strings.xml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 2ef0d14c1..1ae6ce35c 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ Gadgetbridge ============ Gadgetbridge is an Android (4.4+) application which will allow you to use your -Pebble, Mi Band, Amazfit Bit and HPlus device (and more) without the vendor's closed source application +Pebble, Mi Band, Amazfit Bip and HPlus device (and more) without the vendor's closed source application and without the need to create an account and transmit any of your data to the vendor's servers. diff --git a/app/src/main/res/values-pt-rBR/strings.xml b/app/src/main/res/values-pt-rBR/strings.xml index 615bec7f0..a6b89a5b4 100644 --- a/app/src/main/res/values-pt-rBR/strings.xml +++ b/app/src/main/res/values-pt-rBR/strings.xml @@ -388,7 +388,7 @@ Intervalo de exportação Exportar a cada %d hora(s) - Ajustes do Amazfit Bit + Ajustes do Amazfit Bip Permita que seu dispositivo seja detectado. Os dispositivos já pareados não serão detectados. Para o Android 6 ou superior, é necessário habilitar a localização de GPS. Desative o Privacy Guard para o Gadgetbridge, pois o telefone poderá travar ou reiniciar caso esteja ativo. Se nenhum dispositivo for encontrado após alguns minutos, tente novamente após reiniciar seu aparelho telefônico. Medição diária dos batimentos cardíacos A cada minuto From 63cb70ac9a42423ef0534800004ebdb05cfdcc84 Mon Sep 17 00:00:00 2001 From: dakhnod Date: Mon, 23 Jul 2018 02:24:38 +0200 Subject: [PATCH 28/32] Fix missing sourceAppID field --- .../freeyourgadget/gadgetbridge/impl/GBDeviceService.java | 3 ++- .../freeyourgadget/gadgetbridge/model/DeviceService.java | 1 + .../gadgetbridge/service/DeviceCommunicationService.java | 2 ++ 3 files changed, 5 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/impl/GBDeviceService.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/impl/GBDeviceService.java index 71155069e..a2589679b 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/impl/GBDeviceService.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/impl/GBDeviceService.java @@ -142,7 +142,8 @@ public class GBDeviceService implements DeviceService { .putExtra(EXTRA_NOTIFICATION_ID, notificationSpec.id) .putExtra(EXTRA_NOTIFICATION_TYPE, notificationSpec.type) .putExtra(EXTRA_NOTIFICATION_SOURCENAME, notificationSpec.sourceName) - .putExtra(EXTRA_NOTIFICATION_PEBBLE_COLOR, notificationSpec.pebbleColor); + .putExtra(EXTRA_NOTIFICATION_PEBBLE_COLOR, notificationSpec.pebbleColor) + .putExtra(EXTRA_NOTIFICATION_SOURCEAPPID, notificationSpec.sourceAppId); invokeService(intent); } diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/model/DeviceService.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/model/DeviceService.java index 19b29939c..09fcc3b32 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/model/DeviceService.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/model/DeviceService.java @@ -71,6 +71,7 @@ public interface DeviceService extends EventHandler { String EXTRA_NOTIFICATION_PHONENUMBER = "notification_phonenumber"; String EXTRA_NOTIFICATION_SENDER = "notification_sender"; String EXTRA_NOTIFICATION_SOURCENAME = "notification_sourcename"; + String EXTRA_NOTIFICATION_SOURCEAPPID = "notification_sourceappid"; String EXTRA_NOTIFICATION_SUBJECT = "notification_subject"; String EXTRA_NOTIFICATION_TITLE = "notification_title"; String EXTRA_NOTIFICATION_TYPE = "notification_type"; 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 3003a9394..161e0f20e 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/DeviceCommunicationService.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/DeviceCommunicationService.java @@ -148,6 +148,7 @@ import static nodomain.freeyourgadget.gadgetbridge.model.DeviceService.EXTRA_NOT import static nodomain.freeyourgadget.gadgetbridge.model.DeviceService.EXTRA_NOTIFICATION_PEBBLE_COLOR; import static nodomain.freeyourgadget.gadgetbridge.model.DeviceService.EXTRA_NOTIFICATION_PHONENUMBER; import static nodomain.freeyourgadget.gadgetbridge.model.DeviceService.EXTRA_NOTIFICATION_SENDER; +import static nodomain.freeyourgadget.gadgetbridge.model.DeviceService.EXTRA_NOTIFICATION_SOURCEAPPID; import static nodomain.freeyourgadget.gadgetbridge.model.DeviceService.EXTRA_NOTIFICATION_SOURCENAME; import static nodomain.freeyourgadget.gadgetbridge.model.DeviceService.EXTRA_NOTIFICATION_SUBJECT; import static nodomain.freeyourgadget.gadgetbridge.model.DeviceService.EXTRA_NOTIFICATION_TITLE; @@ -348,6 +349,7 @@ public class DeviceCommunicationService extends Service implements SharedPrefere notificationSpec.pebbleColor = (byte) intent.getSerializableExtra(EXTRA_NOTIFICATION_PEBBLE_COLOR); notificationSpec.id = intent.getIntExtra(EXTRA_NOTIFICATION_ID, -1); notificationSpec.flags = intent.getIntExtra(EXTRA_NOTIFICATION_FLAGS, 0); + notificationSpec.sourceAppId = intent.getStringExtra(EXTRA_NOTIFICATION_SOURCEAPPID); if (notificationSpec.type == NotificationType.GENERIC_SMS && notificationSpec.phoneNumber != null) { notificationSpec.id = mRandom.nextInt(); // FIXME: add this in external SMS Receiver? From 63231ec49aef0b71d3d25f7136dfe345c62a70ff Mon Sep 17 00:00:00 2001 From: cpfeiffer Date: Fri, 27 Jul 2018 13:14:28 +0200 Subject: [PATCH 29/32] Revert "remove unused getPrimaryActivity() from coodinators, mark Mi Band HRX as non-heartrate" This reverts commit 495ba81edc229f7de574ddbb6ffdaf8a71e5618c. See discussion in https://github.com/Freeyourgadget/Gadgetbridge/issues/1165 --- .../gadgetbridge/devices/DeviceCoordinator.java | 9 +++++++++ .../gadgetbridge/devices/UnknownDeviceCoordinator.java | 5 +++++ .../gadgetbridge/devices/hplus/HPlusCoordinator.java | 5 +++++ .../devices/huami/miband2/MiBand2HRXCoordinator.java | 7 +++++++ .../gadgetbridge/devices/jyou/TeclastH30Coordinator.java | 5 +++++ .../devices/liveview/LiveviewCoordinator.java | 5 +++++ .../gadgetbridge/devices/miband/MiBandCoordinator.java | 5 +++++ .../gadgetbridge/devices/no1f1/No1F1Coordinator.java | 6 ++++++ .../gadgetbridge/devices/pebble/PebbleCoordinator.java | 5 +++++ .../devices/vibratissimo/VibratissimoCoordinator.java | 5 +++++ 10 files changed, 57 insertions(+) diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/DeviceCoordinator.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/DeviceCoordinator.java index 45d4150eb..d02f54ccb 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/DeviceCoordinator.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/DeviceCoordinator.java @@ -123,6 +123,15 @@ public interface DeviceCoordinator { @Nullable Class getPairingActivity(); + /** + * Returns the Activity class that will be used as the primary activity + * for the given device. + * + * @return the primary activity class, or null if none + */ + @Nullable + Class getPrimaryActivity(); + /** * Returns true if activity data fetching is supported by the device * (with this coordinator). diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/UnknownDeviceCoordinator.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/UnknownDeviceCoordinator.java index e35417449..171908c1a 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/UnknownDeviceCoordinator.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/UnknownDeviceCoordinator.java @@ -112,6 +112,11 @@ public class UnknownDeviceCoordinator extends AbstractDeviceCoordinator { return ControlCenterv2.class; } + @Override + public Class getPrimaryActivity() { + return null; + } + @Override public SampleProvider getSampleProvider(GBDevice device, DaoSession session) { return new UnknownSampleProvider(); diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/hplus/HPlusCoordinator.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/hplus/HPlusCoordinator.java index 44499980b..036db0110 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/hplus/HPlusCoordinator.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/hplus/HPlusCoordinator.java @@ -113,6 +113,11 @@ public class HPlusCoordinator extends AbstractDeviceCoordinator { return null; } + @Override + public Class getPrimaryActivity() { + return ChartsActivity.class; + } + @Override public InstallHandler findInstallHandler(Uri uri, Context context) { return null; diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/huami/miband2/MiBand2HRXCoordinator.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/huami/miband2/MiBand2HRXCoordinator.java index f45879b25..65ff8371b 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/huami/miband2/MiBand2HRXCoordinator.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/huami/miband2/MiBand2HRXCoordinator.java @@ -16,10 +16,12 @@ along with this program. If not, see . */ package nodomain.freeyourgadget.gadgetbridge.devices.huami.miband2; +import android.app.Activity; import android.bluetooth.BluetoothDevice; import android.content.Context; import android.net.Uri; import android.support.annotation.NonNull; +import android.support.annotation.Nullable; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -74,4 +76,9 @@ public class MiBand2HRXCoordinator extends HuamiCoordinator { return false; } + @Nullable + @Override + public Class getPrimaryActivity() { + return null; + } } diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/jyou/TeclastH30Coordinator.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/jyou/TeclastH30Coordinator.java index 4d3e98dbd..f5f26d2ee 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/jyou/TeclastH30Coordinator.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/jyou/TeclastH30Coordinator.java @@ -99,6 +99,11 @@ public class TeclastH30Coordinator extends AbstractDeviceCoordinator { return null; } + @Override + public Class getPrimaryActivity() { + return ChartsActivity.class; + } + @Override public InstallHandler findInstallHandler(Uri uri, Context context) { return null; diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/liveview/LiveviewCoordinator.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/liveview/LiveviewCoordinator.java index 7b93b6913..41ccdbae6 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/liveview/LiveviewCoordinator.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/liveview/LiveviewCoordinator.java @@ -54,6 +54,11 @@ public class LiveviewCoordinator extends AbstractDeviceCoordinator { return null; } + @Override + public Class getPrimaryActivity() { + return null; + } + @Override public InstallHandler findInstallHandler(Uri uri, Context context) { return null; diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/miband/MiBandCoordinator.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/miband/MiBandCoordinator.java index f9a2063c4..0682f722e 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/miband/MiBandCoordinator.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/miband/MiBandCoordinator.java @@ -110,6 +110,11 @@ public class MiBandCoordinator extends AbstractDeviceCoordinator { return MiBandPairingActivity.class; } + @Override + public Class getPrimaryActivity() { + return ChartsActivity.class; + } + @Override public SampleProvider getSampleProvider(GBDevice device, DaoSession session) { return new MiBandSampleProvider(device, session); diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/no1f1/No1F1Coordinator.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/no1f1/No1F1Coordinator.java index 373f59aac..7f9bfeb3f 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/no1f1/No1F1Coordinator.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/no1f1/No1F1Coordinator.java @@ -82,6 +82,12 @@ public class No1F1Coordinator extends AbstractDeviceCoordinator { return null; } + @Nullable + @Override + public Class getPrimaryActivity() { + return ChartsActivity.class; + } + @Override public boolean supportsActivityDataFetching() { return true; diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/pebble/PebbleCoordinator.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/pebble/PebbleCoordinator.java index d94a490f7..322dccc7b 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/pebble/PebbleCoordinator.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/pebble/PebbleCoordinator.java @@ -66,6 +66,11 @@ public class PebbleCoordinator extends AbstractDeviceCoordinator { return PebblePairingActivity.class; } + @Override + public Class getPrimaryActivity() { + return AppManagerActivity.class; + } + @Override protected void deleteDevice(@NonNull GBDevice gbDevice, @NonNull Device device, @NonNull DaoSession session) throws GBException { Long deviceId = device.getId(); diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/vibratissimo/VibratissimoCoordinator.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/vibratissimo/VibratissimoCoordinator.java index 55ca064bd..e99fc48d5 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/vibratissimo/VibratissimoCoordinator.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/vibratissimo/VibratissimoCoordinator.java @@ -55,6 +55,11 @@ public class VibratissimoCoordinator extends AbstractDeviceCoordinator { return null; } + @Override + public Class getPrimaryActivity() { + return VibrationActivity.class; + } + @Override public InstallHandler findInstallHandler(Uri uri, Context context) { return null; From 2147ab49482b4b607c9ce30e7c30d5c0f493e6bf Mon Sep 17 00:00:00 2001 From: Daniele Gobbetti Date: Fri, 27 Jul 2018 15:13:21 +0200 Subject: [PATCH 30/32] Revert "Revert "remove unused getPrimaryActivity() from coodinators, mark Mi Band HRX as non-heartrate"" This reverts commit 63231ec49aef0b71d3d25f7136dfe345c62a70ff. Please note that the comment of the reverted commit was inaccurate, as the Mi Band HRX was left untouched by it and is left untouched byt this commit. --- .../gadgetbridge/devices/DeviceCoordinator.java | 9 --------- .../gadgetbridge/devices/UnknownDeviceCoordinator.java | 5 ----- .../gadgetbridge/devices/hplus/HPlusCoordinator.java | 5 ----- .../devices/huami/miband2/MiBand2HRXCoordinator.java | 7 ------- .../gadgetbridge/devices/jyou/TeclastH30Coordinator.java | 5 ----- .../devices/liveview/LiveviewCoordinator.java | 5 ----- .../gadgetbridge/devices/miband/MiBandCoordinator.java | 5 ----- .../gadgetbridge/devices/no1f1/No1F1Coordinator.java | 6 ------ .../gadgetbridge/devices/pebble/PebbleCoordinator.java | 5 ----- .../devices/vibratissimo/VibratissimoCoordinator.java | 5 ----- 10 files changed, 57 deletions(-) diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/DeviceCoordinator.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/DeviceCoordinator.java index d02f54ccb..45d4150eb 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/DeviceCoordinator.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/DeviceCoordinator.java @@ -123,15 +123,6 @@ public interface DeviceCoordinator { @Nullable Class getPairingActivity(); - /** - * Returns the Activity class that will be used as the primary activity - * for the given device. - * - * @return the primary activity class, or null if none - */ - @Nullable - Class getPrimaryActivity(); - /** * Returns true if activity data fetching is supported by the device * (with this coordinator). diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/UnknownDeviceCoordinator.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/UnknownDeviceCoordinator.java index 171908c1a..e35417449 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/UnknownDeviceCoordinator.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/UnknownDeviceCoordinator.java @@ -112,11 +112,6 @@ public class UnknownDeviceCoordinator extends AbstractDeviceCoordinator { return ControlCenterv2.class; } - @Override - public Class getPrimaryActivity() { - return null; - } - @Override public SampleProvider getSampleProvider(GBDevice device, DaoSession session) { return new UnknownSampleProvider(); diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/hplus/HPlusCoordinator.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/hplus/HPlusCoordinator.java index 036db0110..44499980b 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/hplus/HPlusCoordinator.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/hplus/HPlusCoordinator.java @@ -113,11 +113,6 @@ public class HPlusCoordinator extends AbstractDeviceCoordinator { return null; } - @Override - public Class getPrimaryActivity() { - return ChartsActivity.class; - } - @Override public InstallHandler findInstallHandler(Uri uri, Context context) { return null; diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/huami/miband2/MiBand2HRXCoordinator.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/huami/miband2/MiBand2HRXCoordinator.java index 65ff8371b..f45879b25 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/huami/miband2/MiBand2HRXCoordinator.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/huami/miband2/MiBand2HRXCoordinator.java @@ -16,12 +16,10 @@ along with this program. If not, see . */ package nodomain.freeyourgadget.gadgetbridge.devices.huami.miband2; -import android.app.Activity; import android.bluetooth.BluetoothDevice; import android.content.Context; import android.net.Uri; import android.support.annotation.NonNull; -import android.support.annotation.Nullable; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -76,9 +74,4 @@ public class MiBand2HRXCoordinator extends HuamiCoordinator { return false; } - @Nullable - @Override - public Class getPrimaryActivity() { - return null; - } } diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/jyou/TeclastH30Coordinator.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/jyou/TeclastH30Coordinator.java index f5f26d2ee..4d3e98dbd 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/jyou/TeclastH30Coordinator.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/jyou/TeclastH30Coordinator.java @@ -99,11 +99,6 @@ public class TeclastH30Coordinator extends AbstractDeviceCoordinator { return null; } - @Override - public Class getPrimaryActivity() { - return ChartsActivity.class; - } - @Override public InstallHandler findInstallHandler(Uri uri, Context context) { return null; diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/liveview/LiveviewCoordinator.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/liveview/LiveviewCoordinator.java index 41ccdbae6..7b93b6913 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/liveview/LiveviewCoordinator.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/liveview/LiveviewCoordinator.java @@ -54,11 +54,6 @@ public class LiveviewCoordinator extends AbstractDeviceCoordinator { return null; } - @Override - public Class getPrimaryActivity() { - return null; - } - @Override public InstallHandler findInstallHandler(Uri uri, Context context) { return null; diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/miband/MiBandCoordinator.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/miband/MiBandCoordinator.java index 0682f722e..f9a2063c4 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/miband/MiBandCoordinator.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/miband/MiBandCoordinator.java @@ -110,11 +110,6 @@ public class MiBandCoordinator extends AbstractDeviceCoordinator { return MiBandPairingActivity.class; } - @Override - public Class getPrimaryActivity() { - return ChartsActivity.class; - } - @Override public SampleProvider getSampleProvider(GBDevice device, DaoSession session) { return new MiBandSampleProvider(device, session); diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/no1f1/No1F1Coordinator.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/no1f1/No1F1Coordinator.java index 7f9bfeb3f..373f59aac 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/no1f1/No1F1Coordinator.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/no1f1/No1F1Coordinator.java @@ -82,12 +82,6 @@ public class No1F1Coordinator extends AbstractDeviceCoordinator { return null; } - @Nullable - @Override - public Class getPrimaryActivity() { - return ChartsActivity.class; - } - @Override public boolean supportsActivityDataFetching() { return true; diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/pebble/PebbleCoordinator.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/pebble/PebbleCoordinator.java index 322dccc7b..d94a490f7 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/pebble/PebbleCoordinator.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/pebble/PebbleCoordinator.java @@ -66,11 +66,6 @@ public class PebbleCoordinator extends AbstractDeviceCoordinator { return PebblePairingActivity.class; } - @Override - public Class getPrimaryActivity() { - return AppManagerActivity.class; - } - @Override protected void deleteDevice(@NonNull GBDevice gbDevice, @NonNull Device device, @NonNull DaoSession session) throws GBException { Long deviceId = device.getId(); diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/vibratissimo/VibratissimoCoordinator.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/vibratissimo/VibratissimoCoordinator.java index e99fc48d5..55ca064bd 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/vibratissimo/VibratissimoCoordinator.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/vibratissimo/VibratissimoCoordinator.java @@ -55,11 +55,6 @@ public class VibratissimoCoordinator extends AbstractDeviceCoordinator { return null; } - @Override - public Class getPrimaryActivity() { - return VibrationActivity.class; - } - @Override public InstallHandler findInstallHandler(Uri uri, Context context) { return null; From a43934651a25ed947b520dca7df52734112710c9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20Rebelo?= Date: Thu, 26 Jul 2018 20:57:12 +0100 Subject: [PATCH 31/32] Allow devices to not support being found --- .../gadgetbridge/adapter/GBDeviceAdapterv2.java | 2 +- .../gadgetbridge/devices/DeviceCoordinator.java | 6 ++++++ .../gadgetbridge/devices/UnknownDeviceCoordinator.java | 5 +++++ .../gadgetbridge/devices/hplus/HPlusCoordinator.java | 5 +++++ .../gadgetbridge/devices/huami/HuamiCoordinator.java | 5 +++++ .../gadgetbridge/devices/jyou/TeclastH30Coordinator.java | 5 +++++ .../gadgetbridge/devices/liveview/LiveviewCoordinator.java | 5 +++++ .../gadgetbridge/devices/miband/MiBandCoordinator.java | 5 +++++ .../gadgetbridge/devices/no1f1/No1F1Coordinator.java | 5 +++++ .../gadgetbridge/devices/pebble/PebbleCoordinator.java | 5 +++++ .../devices/vibratissimo/VibratissimoCoordinator.java | 5 +++++ .../gadgetbridge/devices/xwatch/XWatchCoordinator.java | 5 +++++ .../gadgetbridge/devices/zetime/ZeTimeCoordinator.java | 5 +++++ 13 files changed, 62 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/adapter/GBDeviceAdapterv2.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/adapter/GBDeviceAdapterv2.java index 12087694e..449453084 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/adapter/GBDeviceAdapterv2.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/adapter/GBDeviceAdapterv2.java @@ -249,7 +249,7 @@ public class GBDeviceAdapterv2 extends RecyclerView.Adapter Date: Fri, 27 Jul 2018 14:39:01 +0100 Subject: [PATCH 32/32] Add missing break --- .../gadgetbridge/service/DeviceSupportFactory.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/DeviceSupportFactory.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/DeviceSupportFactory.java index 33e9f15d5..00ee14f23 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/DeviceSupportFactory.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/DeviceSupportFactory.java @@ -152,7 +152,8 @@ public class DeviceSupportFactory { break; case XWATCH: deviceSupport = new ServiceDeviceSupport(new XWatchSupport(), EnumSet.of(ServiceDeviceSupport.Flags.BUSY_CHECKING)); - case ZETIME: + break; + case ZETIME: deviceSupport = new ServiceDeviceSupport(new ZeTimeDeviceSupport(), EnumSet.of(ServiceDeviceSupport.Flags.BUSY_CHECKING)); break; }