From 0687564bbb97c350769ce73d7f4f2b78b2417b33 Mon Sep 17 00:00:00 2001 From: cpfeiffer Date: Thu, 28 Sep 2017 17:31:24 +0200 Subject: [PATCH 01/14] Remove unused, commented out code --- .../gadgetbridge/service/devices/miband2/MiBand2Support.java | 5 ----- 1 file changed, 5 deletions(-) diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/miband2/MiBand2Support.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/miband2/MiBand2Support.java index 636cbd492..a074f7e14 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/miband2/MiBand2Support.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/miband2/MiBand2Support.java @@ -225,11 +225,6 @@ public class MiBand2Support extends AbstractBTLEDeviceSupport { GregorianCalendar now = BLETypeConversions.createCalendar(); byte[] bytes = getTimeBytes(now, TimeUnit.SECONDS); builder.write(getCharacteristic(GattCharacteristic.UUID_CHARACTERISTIC_CURRENT_TIME), bytes); - -// byte[] localtime = BLETypeConversions.calendarToLocalTimeBytes(now); -// builder.write(getCharacteristic(GattCharacteristic.UUID_CHARACTERISTIC_LOCAL_TIME_INFORMATION), localtime); -// builder.write(getCharacteristic(GattCharacteristic.UUID_CHARACTERISTIC_CURRENT_TIME), new byte[] {0x2, 0x00}); -// builder.write(getCharacteristic(MiBand2Service.UUID_UNKNOQN_CHARACTERISTIC0), new byte[] {0x03,0x00,(byte)0x8e,(byte)0xce,0x5a,0x09,(byte)0xb3,(byte)0xd8,0x55,0x57,0x10,0x2a,(byte)0xed,0x7d,0x6b,0x78,(byte)0xc5,(byte)0xd2}); return this; } From ffb2f37af59280fb37668ba49e84627e3d9d80dc Mon Sep 17 00:00:00 2001 From: cpfeiffer Date: Thu, 28 Sep 2017 18:54:58 +0200 Subject: [PATCH 02/14] Update gradle to 4.2 --- gradle/wrapper/gradle-wrapper.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index e79f16af9..ebf04d494 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -3,4 +3,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-3.5-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-4.2-all.zip From 7137387b089b7a0f0faefced47ea21fb3e023973 Mon Sep 17 00:00:00 2001 From: cpfeiffer Date: Thu, 28 Sep 2017 19:17:46 +0200 Subject: [PATCH 03/14] Huh, travis doesn't like gradle 4.2 yet!? Trying 4.1 --- gradle/wrapper/gradle-wrapper.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index ebf04d494..ceeb26604 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -3,4 +3,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-4.2-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-4.1-all.zip From 0ffa2ce45a7f79ad75638be863b7195c9472918b Mon Sep 17 00:00:00 2001 From: Andreas Shimokawa Date: Fri, 29 Sep 2017 12:33:08 +0200 Subject: [PATCH 04/14] move up measuerement system from hplus to global preferences --- .../gadgetbridge/activities/SettingsActivity.java | 1 + .../devices/hplus/HPlusConstants.java | 2 +- app/src/main/res/xml/preferences.xml | 15 +++++++-------- 3 files changed, 9 insertions(+), 9 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 16cfe61e0..5ce6de689 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/SettingsActivity.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/SettingsActivity.java @@ -271,6 +271,7 @@ public class SettingsActivity extends AbstractSettingsActivity { @Override protected String[] getPreferenceKeysWithSummary() { return new String[]{ + "measurement_system", "pebble_emu_addr", "pebble_emu_port", "pebble_reconnect_attempts", diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/hplus/HPlusConstants.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/hplus/HPlusConstants.java index c52e016c0..9f53c5d97 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/hplus/HPlusConstants.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/hplus/HPlusConstants.java @@ -127,7 +127,7 @@ public final class HPlusConstants { public static final String PREF_HPLUS_SCREENTIME = "hplus_screentime"; public static final String PREF_HPLUS_ALLDAYHR = "hplus_alldayhr"; - public static final String PREF_HPLUS_UNIT = "hplus_unit"; + public static final String PREF_HPLUS_UNIT = "measurement_system"; public static final String PREF_HPLUS_TIMEFORMAT = "hplus_timeformat"; public static final String PREF_HPLUS_WRIST = "hplus_wrist"; public static final String PREF_HPLUS_SIT_START_TIME = "hplus_sit_start_time"; diff --git a/app/src/main/res/xml/preferences.xml b/app/src/main/res/xml/preferences.xml index e4cc55818..56b47420b 100644 --- a/app/src/main/res/xml/preferences.xml +++ b/app/src/main/res/xml/preferences.xml @@ -34,6 +34,13 @@ android:entryValues="@array/pref_language_values" android:defaultValue="default" android:summary="%s" /> + - - From 9f05aff11be983a88893b652ce093f314de47257 Mon Sep 17 00:00:00 2001 From: Andreas Shimokawa Date: Fri, 29 Sep 2017 17:21:16 +0200 Subject: [PATCH 05/14] Mi2/Bip: Various sleep fixes - Long standing bug fixed in determinePreviousValidActivityType() it always got the very fist valid sample, not the nearest in the past (for me that was light sleep, so every timespan queried began with light sleep) - Support type 2 (running) and 12 (wakeup(?)) - Support new firmwares (Mi2 and Bip) by masking only the last 4 bits (0xf), takes some ugly query hack in determinePreviousValidActivityType() since greenDAO does not support the & operator (even though sqlite does) --- .../devices/miband/MiBand2SampleProvider.java | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/miband/MiBand2SampleProvider.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/miband/MiBand2SampleProvider.java index f87190ce5..be6c7cd15 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/miband/MiBand2SampleProvider.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/miband/MiBand2SampleProvider.java @@ -50,13 +50,13 @@ public class MiBand2SampleProvider extends AbstractMiBandSampleProvider { public static final int TYPE_UNSET = -1; public static final int TYPE_NO_CHANGE = 0; public static final int TYPE_ACTIVITY = 1; + public static final int TYPE_RUNNING = 2; public static final int TYPE_NONWEAR = 3; public static final int TYPE_CHARGING = 6; public static final int TYPE_LIGHT_SLEEP = 9; + public static final int TYPE_IGNORE = 10; public static final int TYPE_DEEP_SLEEP = 11; public static final int TYPE_WAKE_UP = 12; - // appears to be a measurement problem resulting in type = 10 and intensity = 20, at least with fw 1.0.0.39 - public static final int TYPE_IGNORE = 10; public MiBand2SampleProvider(GBDevice device, DaoSession session) { super(device, session); @@ -81,6 +81,11 @@ public class MiBand2SampleProvider extends AbstractMiBandSampleProvider { int lastValidKind = determinePreviousValidActivityType(samples.get(0)); for (MiBandActivitySample sample : samples) { int rawKind = sample.getRawKind(); + if (rawKind != TYPE_UNSET) { + rawKind &= 0xf; + sample.setRawKind(rawKind); + } + switch (rawKind) { case TYPE_IGNORE: case TYPE_NO_CHANGE: @@ -100,11 +105,12 @@ public class MiBand2SampleProvider extends AbstractMiBandSampleProvider { qb.where(MiBandActivitySampleDao.Properties.DeviceId.eq(sample.getDeviceId()), MiBandActivitySampleDao.Properties.UserId.eq(sample.getUserId()), MiBandActivitySampleDao.Properties.Timestamp.lt(sample.getTimestamp()), - MiBandActivitySampleDao.Properties.RawKind.notIn(TYPE_IGNORE, TYPE_NO_CHANGE)); + MiBandActivitySampleDao.Properties.RawKind.notIn(TYPE_NO_CHANGE, TYPE_IGNORE, TYPE_UNSET, 16, 80, 96, 112)); // all I ever had that are 0 when doing &=0xf + qb.orderDesc(MiBandActivitySampleDao.Properties.Timestamp); qb.limit(1); List result = qb.build().list(); if (result.size() > 0) { - return result.get(0).getRawKind(); + return result.get(0).getRawKind() & 0xf; } return TYPE_UNSET; } @@ -117,12 +123,13 @@ public class MiBand2SampleProvider extends AbstractMiBandSampleProvider { case TYPE_LIGHT_SLEEP: return ActivityKind.TYPE_LIGHT_SLEEP; case TYPE_ACTIVITY: + case TYPE_RUNNING: + case TYPE_WAKE_UP: return ActivityKind.TYPE_ACTIVITY; case TYPE_NONWEAR: return ActivityKind.TYPE_NOT_WORN; case TYPE_CHARGING: return ActivityKind.TYPE_NOT_WORN; //I believe it's a safe assumption - case TYPE_IGNORE: default: case TYPE_UNSET: // fall through return ActivityKind.TYPE_UNKNOWN; From 33d49dbdcc0706ae8b0672850b03a9ebf861a5cc Mon Sep 17 00:00:00 2001 From: LL Date: Wed, 27 Sep 2017 17:59:57 +0000 Subject: [PATCH 06/14] Translated using Weblate (French) Currently translated at 100.0% (413 of 413 strings) Translation: Freeyourgadget/Gadgetbridge Translate-URL: https://hosted.weblate.org/projects/freeyourgadget/gadgetbridge/fr/ --- app/src/main/res/values-fr/strings.xml | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml index 81ff1b2b2..32208cb16 100644 --- a/app/src/main/res/values-fr/strings.xml +++ b/app/src/main/res/values-fr/strings.xml @@ -177,7 +177,7 @@ Connecter un nouvel appareil %1$s (%2$s) Appairer l\'appareil - Utiliser le l\'appairage Bluetooth d\'Android pour jumeler l\'appareil + Utiliser l\'appairage Bluetooth d\'Android pour jumeler l\'appareil. Appairer votre Mi Band Jumelage avec %s… Création d’un lien avec %1$s (%2$s) @@ -228,7 +228,7 @@ Total de minutes Pas par minute Trouver l\'appareil perdu - Annuler pour arrêter les vibrations + Annuler pour arrêter les vibrations. Votre activité Configurer les alarmes Configurer les alarmes @@ -399,10 +399,10 @@ NOTE: la base de données sera bien évidement plus grande ! Automatique (détection de sommeil) Programmé (intervalle de temps) Tentative de jumelage avec %1$s - Le lien avec %1$s a échoué instantanément + Le lien avec %1$s a échoué instantanément. Tentative de connexion à: %1$s - Activez le Bluetooth pour trouver des dispositifs - Correctement lié à %1$s + Activez le Bluetooth pour trouver des dispositifs. + Correctement lié à %1$s. Appairer avec %1$s ? Sélectionnez Jumeler pour associer vos dispositifs. Si cela échoue, essayez à nouveau sans jumelage. Jumelage From 8e0688ba6633877863aa618b9756eb6db21a7d5a Mon Sep 17 00:00:00 2001 From: naofum Date: Fri, 29 Sep 2017 15:03:37 +0000 Subject: [PATCH 07/14] Translated using Weblate (Japanese) Currently translated at 75.0% (310 of 413 strings) Translation: Freeyourgadget/Gadgetbridge Translate-URL: https://hosted.weblate.org/projects/freeyourgadget/gadgetbridge/ja/ --- app/src/main/res/values-ja/strings.xml | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/app/src/main/res/values-ja/strings.xml b/app/src/main/res/values-ja/strings.xml index 2b1cf3d2b..a6567b934 100644 --- a/app/src/main/res/values-ja/strings.xml +++ b/app/src/main/res/values-ja/strings.xml @@ -422,4 +422,9 @@ ボタンの動作をトリガーに band の振動を有効にします ボタンを押す間の最大遅延時間 ボタンを押す間隔の最大遅延時間 (ミリ秒単位) - + ボタン操作の後に遅延 + 1回のボタン操作に一致した後の遅滞 (数字は button_id インテント拡張内) 0 の場合はすぐ + 電話で開く + ミュート + 返信 + From 6d8ffad55cecc1da3fd6bc9a04d60605070260cd Mon Sep 17 00:00:00 2001 From: Andreas Shimokawa Date: Sat, 30 Sep 2017 22:45:45 +0200 Subject: [PATCH 08/14] Call onSetConfiguration() in listener if measurement system gets changed in preferences (And implement onSetConfiguration() for HPlus) --- .../activities/SettingsActivity.java | 23 +++++++++++++++++++ .../devices/hplus/HPlusConstants.java | 1 - .../devices/hplus/HPlusCoordinator.java | 3 ++- .../service/devices/hplus/HPlusSupport.java | 15 ++++++++++-- 4 files changed, 38 insertions(+), 4 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 5ce6de689..11619f06c 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/SettingsActivity.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/SettingsActivity.java @@ -61,6 +61,8 @@ import static nodomain.freeyourgadget.gadgetbridge.model.ActivityUser.PREF_USER_ public class SettingsActivity extends AbstractSettingsActivity { private static final Logger LOG = LoggerFactory.getLogger(SettingsActivity.class); + public static final String PREF_MEASUREMENT_SYSTEM = "measurement_system"; + @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); @@ -172,6 +174,20 @@ public class SettingsActivity extends AbstractSettingsActivity { }); + final Preference unit = findPreference(PREF_MEASUREMENT_SYSTEM); + unit.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() { + @Override + public boolean onPreferenceChange(Preference preference, Object newVal) { + invokeLater(new Runnable() { + @Override + public void run() { + GBApplication.deviceService().onSendConfiguration(PREF_MEASUREMENT_SYSTEM); + } + }); + return true; + } + }); + if (!GBApplication.isRunningMarshmallowOrLater()) { pref = findPreference("notification_filter"); PreferenceCategory category = (PreferenceCategory) findPreference("pref_key_notifications"); @@ -268,6 +284,13 @@ public class SettingsActivity extends AbstractSettingsActivity { audioPlayer.setDefaultValue(newValues[0]); } + /* + * delayed execution so that the preferences are applied first + */ + private void invokeLater(Runnable runnable) { + getListView().post(runnable); + } + @Override protected String[] getPreferenceKeysWithSummary() { return new String[]{ diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/hplus/HPlusConstants.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/hplus/HPlusConstants.java index 9f53c5d97..3e7ba60d0 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/hplus/HPlusConstants.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/hplus/HPlusConstants.java @@ -127,7 +127,6 @@ public final class HPlusConstants { public static final String PREF_HPLUS_SCREENTIME = "hplus_screentime"; public static final String PREF_HPLUS_ALLDAYHR = "hplus_alldayhr"; - public static final String PREF_HPLUS_UNIT = "measurement_system"; public static final String PREF_HPLUS_TIMEFORMAT = "hplus_timeformat"; public static final String PREF_HPLUS_WRIST = "hplus_wrist"; public static final String PREF_HPLUS_SIT_START_TIME = "hplus_sit_start_time"; 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 e5d3d2c2e..5093e8784 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 @@ -35,6 +35,7 @@ import de.greenrobot.dao.query.QueryBuilder; import nodomain.freeyourgadget.gadgetbridge.GBApplication; import nodomain.freeyourgadget.gadgetbridge.GBException; import nodomain.freeyourgadget.gadgetbridge.R; +import nodomain.freeyourgadget.gadgetbridge.activities.SettingsActivity; import nodomain.freeyourgadget.gadgetbridge.activities.charts.ChartsActivity; import nodomain.freeyourgadget.gadgetbridge.devices.AbstractDeviceCoordinator; import nodomain.freeyourgadget.gadgetbridge.devices.InstallHandler; @@ -202,7 +203,7 @@ public class HPlusCoordinator extends AbstractDeviceCoordinator { } public static byte getUnit(String address) { - String units = prefs.getString(HPlusConstants.PREF_HPLUS_UNIT, getContext().getString(R.string.p_unit_metric)); + String units = prefs.getString(SettingsActivity.PREF_MEASUREMENT_SYSTEM, getContext().getString(R.string.p_unit_metric)); if(units.equals(getContext().getString(R.string.p_unit_metric))){ return HPlusConstants.ARG_UNIT_METRIC; diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/hplus/HPlusSupport.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/hplus/HPlusSupport.java index 26c5f9b3d..dfb108680 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/hplus/HPlusSupport.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/hplus/HPlusSupport.java @@ -45,6 +45,7 @@ import java.util.List; import java.util.UUID; import nodomain.freeyourgadget.gadgetbridge.R; +import nodomain.freeyourgadget.gadgetbridge.activities.SettingsActivity; import nodomain.freeyourgadget.gadgetbridge.deviceevents.GBDeviceEventBatteryInfo; import nodomain.freeyourgadget.gadgetbridge.devices.hplus.HPlusConstants; import nodomain.freeyourgadget.gadgetbridge.devices.hplus.HPlusCoordinator; @@ -646,8 +647,18 @@ public class HPlusSupport extends AbstractBTLEDeviceSupport { @Override public void onSendConfiguration(String config) { - LOG.info("Send Configuration: " + config); - + TransactionBuilder builder; + try { + builder = performInitialized("Sending configuration for option: " + config); + switch (config) { + case SettingsActivity.PREF_MEASUREMENT_SYSTEM: + setUnit(builder); + break; + } + builder.queue(getQueue()); + } catch (IOException e) { + GB.toast("Error setting configuration", Toast.LENGTH_LONG, GB.ERROR, e); + } } @Override From 486596b1a82733d49a88be258a1dd26b3931f872 Mon Sep 17 00:00:00 2001 From: Andreas Shimokawa Date: Sat, 30 Sep 2017 23:27:19 +0200 Subject: [PATCH 09/14] Pebble: support setting the other non-metric system crap for the pebble (pebble health has to be activated again in app manager after changing the option) This also moves the fake:// uri handling code from PebbleIoThread to PebbleSupport --- .../devices/pebble/PebbleIoThread.java | 14 ---------- .../service/devices/pebble/PebbleSupport.java | 26 ++++++++++++++++++- 2 files changed, 25 insertions(+), 15 deletions(-) diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/pebble/PebbleIoThread.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/pebble/PebbleIoThread.java index f9891005a..b133ccf7c 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/pebble/PebbleIoThread.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/pebble/PebbleIoThread.java @@ -543,20 +543,6 @@ class PebbleIoThread extends GBDeviceIoThread { } void installApp(Uri uri, int appId) { - if (uri.equals(Uri.parse("fake://health"))) { - write(mPebbleProtocol.encodeActivateHealth(true)); - write(mPebbleProtocol.encodeSetSaneDistanceUnit(true)); - return; - } - if (uri.equals(Uri.parse("fake://hrm"))) { - write(mPebbleProtocol.encodeActivateHRM(true)); - return; - } - if (uri.equals(Uri.parse("fake://weather"))) { - write(mPebbleProtocol.encodeActivateWeather(true)); - return; - } - if (mIsInstalling) { return; } diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/pebble/PebbleSupport.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/pebble/PebbleSupport.java index d9bd9f2d0..ffc88f268 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/pebble/PebbleSupport.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/pebble/PebbleSupport.java @@ -30,6 +30,7 @@ import java.util.UUID; import nodomain.freeyourgadget.gadgetbridge.GBApplication; import nodomain.freeyourgadget.gadgetbridge.R; +import nodomain.freeyourgadget.gadgetbridge.activities.SettingsActivity; import nodomain.freeyourgadget.gadgetbridge.impl.GBDevice; import nodomain.freeyourgadget.gadgetbridge.model.Alarm; import nodomain.freeyourgadget.gadgetbridge.model.CalendarEventSpec; @@ -67,7 +68,30 @@ public class PebbleSupport extends AbstractSerialDeviceSupport { @Override public void onInstallApp(Uri uri) { - getDeviceIOThread().installApp(uri, 0); + PebbleProtocol pebbleProtocol = (PebbleProtocol) getDeviceProtocol(); + PebbleIoThread pebbleIoThread = getDeviceIOThread(); + // catch fake urls first + if (uri.equals(Uri.parse("fake://health"))) { + getDeviceIOThread().write(pebbleProtocol.encodeActivateHealth(true)); + String units = GBApplication.getPrefs().getString(SettingsActivity.PREF_MEASUREMENT_SYSTEM, getContext().getString(R.string.p_unit_metric)); + if (units.equals(getContext().getString(R.string.p_unit_metric))) { + pebbleIoThread.write(pebbleProtocol.encodeSetSaneDistanceUnit(true)); + } else { + pebbleIoThread.write(pebbleProtocol.encodeSetSaneDistanceUnit(false)); + } + return; + } + if (uri.equals(Uri.parse("fake://hrm"))) { + getDeviceIOThread().write(pebbleProtocol.encodeActivateHRM(true)); + return; + } + if (uri.equals(Uri.parse("fake://weather"))) { + getDeviceIOThread().write(pebbleProtocol.encodeActivateWeather(true)); + return; + } + + // it is a real app + pebbleIoThread.installApp(uri, 0); } @Override From 6f358ff722e1a9ef4deaa2a35982bb032ecc5d67 Mon Sep 17 00:00:00 2001 From: Andreas Shimokawa Date: Sat, 30 Sep 2017 23:36:20 +0200 Subject: [PATCH 10/14] fix measurement system summary value not being updated --- .../gadgetbridge/activities/SettingsActivity.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 11619f06c..fb8a6b388 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/SettingsActivity.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/SettingsActivity.java @@ -184,6 +184,7 @@ public class SettingsActivity extends AbstractSettingsActivity { GBApplication.deviceService().onSendConfiguration(PREF_MEASUREMENT_SYSTEM); } }); + preference.setSummary(newVal.toString()); return true; } }); @@ -294,7 +295,6 @@ public class SettingsActivity extends AbstractSettingsActivity { @Override protected String[] getPreferenceKeysWithSummary() { return new String[]{ - "measurement_system", "pebble_emu_addr", "pebble_emu_port", "pebble_reconnect_attempts", From 7b78003ba12108d0434fdb7cbd82634f45bc03c4 Mon Sep 17 00:00:00 2001 From: protomors Date: Sat, 30 Sep 2017 18:25:32 +0300 Subject: [PATCH 11/14] NO.1 F1: Display settings. Set time format and distance units. --- .../service/devices/no1f1/No1F1Support.java | 30 +++++++++++++------ 1 file changed, 21 insertions(+), 9 deletions(-) diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/no1f1/No1F1Support.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/no1f1/No1F1Support.java index 140db7fad..51fd8bb7f 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/no1f1/No1F1Support.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/no1f1/No1F1Support.java @@ -19,6 +19,7 @@ package nodomain.freeyourgadget.gadgetbridge.service.devices.no1f1; import android.bluetooth.BluetoothGatt; import android.bluetooth.BluetoothGattCharacteristic; import android.net.Uri; +import android.text.format.DateFormat; import android.widget.Toast; import org.slf4j.Logger; @@ -388,11 +389,23 @@ public class No1F1Support extends AbstractBTLEDeviceSupport { }); // display settings - builder.write(ctrlCharacteristic, new byte[]{ + byte[] displayBytes = new byte[]{ No1F1Constants.CMD_DISPLAY_SETTINGS, - 0x01, // 1 - display distance in kilometers, 2 - in miles - 0x01 // 1 - display 24-hour clock, 2 - for 12-hour with AM/PM - }); + 0x00, // 1 - display distance in kilometers, 2 - in miles + 0x00 // 1 - display 24-hour clock, 2 - for 12-hour with AM/PM + }; + String units = GBApplication.getPrefs().getString("measurement_system", getContext().getString(R.string.p_unit_metric)); + if (units.equals(getContext().getString(R.string.p_unit_metric))) { + displayBytes[1] = 1; + } else { + displayBytes[1] = 2; + } + if (DateFormat.is24HourFormat(getContext())) { + displayBytes[2] = 1; + } else { + displayBytes[2] = 2; + } + builder.write(ctrlCharacteristic, displayBytes); // heart rate measurement mode builder.write(ctrlCharacteristic, new byte[]{ @@ -553,7 +566,7 @@ public class No1F1Support extends AbstractBTLEDeviceSupport { for (int i = 0; i < samples.size(); i++) { samples.get(i).setDeviceId(deviceId); samples.get(i).setUserId(userId); - if (samples.get(i).getRawIntensity()<7) + if (samples.get(i).getRawIntensity() < 7) samples.get(i).setRawKind(ActivityKind.TYPE_DEEP_SLEEP); else samples.get(i).setRawKind(ActivityKind.TYPE_LIGHT_SLEEP); @@ -643,16 +656,15 @@ public class No1F1Support extends AbstractBTLEDeviceSupport { } private void handleRealtimeHeartRateData(byte[] data) { - if (data.length==2) - { - if (data[1]==(byte) 0x11) + if (data.length == 2) { + if (data[1] == (byte) 0x11) LOG.info("Heart rate measurement started."); else LOG.info("Heart rate measurement stopped."); return; } // Check if data is valid. Otherwise ignore sample. - if (data[2]==0) { + if (data[2] == 0) { No1F1ActivitySample sample = new No1F1ActivitySample(); sample.setTimestamp((int) (GregorianCalendar.getInstance().getTimeInMillis() / 1000L)); sample.setHeartRate(data[3] & 0xff); From b819be7db6fb9022851ec3f2146f484919b2e083 Mon Sep 17 00:00:00 2001 From: protomors Date: Sun, 1 Oct 2017 13:16:08 +0300 Subject: [PATCH 12/14] Now setting for measurement system is sent to the device immediately after changing. --- .../service/devices/no1f1/No1F1Support.java | 61 +++++++++++++------ 1 file changed, 42 insertions(+), 19 deletions(-) diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/no1f1/No1F1Support.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/no1f1/No1F1Support.java index 51fd8bb7f..76ec66f6e 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/no1f1/No1F1Support.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/no1f1/No1F1Support.java @@ -35,6 +35,7 @@ import java.util.UUID; import nodomain.freeyourgadget.gadgetbridge.GBApplication; import nodomain.freeyourgadget.gadgetbridge.R; +import nodomain.freeyourgadget.gadgetbridge.activities.SettingsActivity; import nodomain.freeyourgadget.gadgetbridge.database.DBHandler; import nodomain.freeyourgadget.gadgetbridge.database.DBHelper; import nodomain.freeyourgadget.gadgetbridge.deviceevents.GBDeviceEventBatteryInfo; @@ -143,6 +144,7 @@ public class No1F1Support extends AbstractBTLEDeviceSupport { case No1F1Constants.CMD_NOTIFICATION: case No1F1Constants.CMD_ICON: case No1F1Constants.CMD_DEVICE_SETTINGS: + case No1F1Constants.CMD_DISPLAY_SETTINGS: return true; default: LOG.warn("Unhandled characteristic change: " + characteristicUUID + " code: " + Arrays.toString(data)); @@ -316,7 +318,18 @@ public class No1F1Support extends AbstractBTLEDeviceSupport { @Override public void onSendConfiguration(String config) { - + TransactionBuilder builder; + try { + builder = performInitialized("Sending configuration for option: " + config); + switch (config) { + case SettingsActivity.PREF_MEASUREMENT_SYSTEM: + setDisplaySettings(builder); + break; + } + builder.queue(getQueue()); + } catch (IOException e) { + GB.toast("Error setting configuration", Toast.LENGTH_LONG, GB.ERROR, e); + } } @Override @@ -334,6 +347,33 @@ public class No1F1Support extends AbstractBTLEDeviceSupport { return true; } + /** + * Set display settings (time format and measurement system) + * + * @param transaction + * @return + */ + private No1F1Support setDisplaySettings(TransactionBuilder transaction) { + byte[] displayBytes = new byte[]{ + No1F1Constants.CMD_DISPLAY_SETTINGS, + 0x00, // 1 - display distance in kilometers, 2 - in miles + 0x00 // 1 - display 24-hour clock, 2 - for 12-hour with AM/PM + }; + String units = GBApplication.getPrefs().getString(SettingsActivity.PREF_MEASUREMENT_SYSTEM, getContext().getString(R.string.p_unit_metric)); + if (units.equals(getContext().getString(R.string.p_unit_metric))) { + displayBytes[1] = 1; + } else { + displayBytes[1] = 2; + } + if (DateFormat.is24HourFormat(getContext())) { + displayBytes[2] = 1; + } else { + displayBytes[2] = 2; + } + transaction.write(ctrlCharacteristic, displayBytes); + return this; + } + private void sendSettings(TransactionBuilder builder) { // TODO Create custom settings page for changing hardcoded values @@ -388,24 +428,7 @@ public class No1F1Support extends AbstractBTLEDeviceSupport { 0x00 }); - // display settings - byte[] displayBytes = new byte[]{ - No1F1Constants.CMD_DISPLAY_SETTINGS, - 0x00, // 1 - display distance in kilometers, 2 - in miles - 0x00 // 1 - display 24-hour clock, 2 - for 12-hour with AM/PM - }; - String units = GBApplication.getPrefs().getString("measurement_system", getContext().getString(R.string.p_unit_metric)); - if (units.equals(getContext().getString(R.string.p_unit_metric))) { - displayBytes[1] = 1; - } else { - displayBytes[1] = 2; - } - if (DateFormat.is24HourFormat(getContext())) { - displayBytes[2] = 1; - } else { - displayBytes[2] = 2; - } - builder.write(ctrlCharacteristic, displayBytes); + setDisplaySettings(builder); // heart rate measurement mode builder.write(ctrlCharacteristic, new byte[]{ From b982d27c9a279a7e8246121c2ac0533bb6770f8c Mon Sep 17 00:00:00 2001 From: Andreas Shimokawa Date: Sun, 1 Oct 2017 22:36:26 +0200 Subject: [PATCH 13/14] bump version, update changelog --- CHANGELOG.md | 7 +++++++ app/build.gradle | 4 ++-- app/src/main/res/xml/changelog_master.xml | 7 +++++++ fastlane/metadata/android/en-US/changelogs/105.txt | 5 +++++ 4 files changed, 21 insertions(+), 2 deletions(-) create mode 100644 fastlane/metadata/android/en-US/changelogs/105.txt diff --git a/CHANGELOG.md b/CHANGELOG.md index 81966738b..932ff37a9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,12 @@ ### Changelog +#### Version 0.21.4 +* Mi2/Bip: Fix sleep detection for newer firmwares +* Mi2/Bip: Fix ancient bug resulting in wrong activity data at the beginning in diagrams and aggregate data +* No.1 F1: Support setting time format and distance units (metric/imperial) +* Pebble: Support setting distance units to miles for Health (need to reactivate Health in App Manager after toogling) +* HPlus: Make changing distance unit system effective immediately on toggling + #### Version 0.21.3 * Amazfit Bip: Auto-switch language on connect (English, Simplified Chinese, Traditional Chinese), requires FW 0.0.9.14+ diff --git a/app/build.gradle b/app/build.gradle index a839c749a..c0a5d5c32 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -26,8 +26,8 @@ android { targetSdkVersion 25 // note: always bump BOTH versionCode and versionName! - versionName "0.21.3" - versionCode 104 + versionName "0.21.5" + versionCode 105 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 53349e5a1..2785d3ac3 100644 --- a/app/src/main/res/xml/changelog_master.xml +++ b/app/src/main/res/xml/changelog_master.xml @@ -1,5 +1,12 @@ + + Mi2/Bip: Fix sleep detection for newer firmwares + Mi2/Bip: Fix ancient bug resulting in wrong activity data at the beginning in diagrams and aggregate data + No.1 F1: Support setting time format and distance units (metric/imperial) + Pebble: Support setting distance units to miles for Health (need to reactivate Health in App Manager after toogling) + HPlus: Make changing distance unit system effective immediately on toggling + Amazfit Bip: Auto-switch language on connect (English, Simplified Chinese, Traditional Chinese), requires FW 0.0.9.14+ diff --git a/fastlane/metadata/android/en-US/changelogs/105.txt b/fastlane/metadata/android/en-US/changelogs/105.txt new file mode 100644 index 000000000..764af9a1d --- /dev/null +++ b/fastlane/metadata/android/en-US/changelogs/105.txt @@ -0,0 +1,5 @@ +* Mi2/Bip: Fix sleep detection for newer firmwares +* Mi2/Bip: Fix ancient bug resulting in wrong activity data at the beginning in diagrams and aggregate data +* No.1 F1: Support setting time format and distance units (metric/imperial) +* Pebble: Support setting distance units to miles for Health (need to reactivate Health in App Manager after toogling) +* HPlus: Make changing distance unit system effective immediately on toggling From 58c7691142f19834258f45c07664b71b56ca92bf Mon Sep 17 00:00:00 2001 From: Andreas Shimokawa Date: Sun, 1 Oct 2017 22:50:05 +0200 Subject: [PATCH 14/14] fix typo --- CHANGELOG.md | 2 +- app/src/main/res/xml/changelog_master.xml | 2 +- fastlane/metadata/android/en-US/changelogs/105.txt | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 932ff37a9..0400c30ea 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,7 +4,7 @@ * Mi2/Bip: Fix sleep detection for newer firmwares * Mi2/Bip: Fix ancient bug resulting in wrong activity data at the beginning in diagrams and aggregate data * No.1 F1: Support setting time format and distance units (metric/imperial) -* Pebble: Support setting distance units to miles for Health (need to reactivate Health in App Manager after toogling) +* Pebble: Support setting distance units to miles for Health (need to reactivate Health in App Manager after toggling) * HPlus: Make changing distance unit system effective immediately on toggling #### Version 0.21.3 diff --git a/app/src/main/res/xml/changelog_master.xml b/app/src/main/res/xml/changelog_master.xml index 2785d3ac3..a1e6745ce 100644 --- a/app/src/main/res/xml/changelog_master.xml +++ b/app/src/main/res/xml/changelog_master.xml @@ -4,7 +4,7 @@ Mi2/Bip: Fix sleep detection for newer firmwares Mi2/Bip: Fix ancient bug resulting in wrong activity data at the beginning in diagrams and aggregate data No.1 F1: Support setting time format and distance units (metric/imperial) - Pebble: Support setting distance units to miles for Health (need to reactivate Health in App Manager after toogling) + Pebble: Support setting distance units to miles for Health (need to reactivate Health in App Manager after toggling) HPlus: Make changing distance unit system effective immediately on toggling diff --git a/fastlane/metadata/android/en-US/changelogs/105.txt b/fastlane/metadata/android/en-US/changelogs/105.txt index 764af9a1d..fb358ece9 100644 --- a/fastlane/metadata/android/en-US/changelogs/105.txt +++ b/fastlane/metadata/android/en-US/changelogs/105.txt @@ -1,5 +1,5 @@ * Mi2/Bip: Fix sleep detection for newer firmwares * Mi2/Bip: Fix ancient bug resulting in wrong activity data at the beginning in diagrams and aggregate data * No.1 F1: Support setting time format and distance units (metric/imperial) -* Pebble: Support setting distance units to miles for Health (need to reactivate Health in App Manager after toogling) +* Pebble: Support setting distance units to miles for Health (need to reactivate Health in App Manager after toggling) * HPlus: Make changing distance unit system effective immediately on toggling