From 7fabc50885ae63858ba6fb884edb3c0f8d5a24cb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20Rebelo?= Date: Fri, 17 Aug 2018 18:33:14 +0100 Subject: [PATCH] Huami: Activate display upon lift during DND --- .../devices/huami/HuamiCoordinator.java | 5 +++++ .../devices/miband/MiBandConst.java | 1 + .../miband/MiBandPreferencesActivity.java | 19 ++++++++++++++++++ .../service/devices/huami/HuamiSupport.java | 20 +++++++++++++++---- app/src/main/res/values/strings.xml | 1 + app/src/main/res/xml/miband_preferences.xml | 5 +++++ 6 files changed, 47 insertions(+), 4 deletions(-) diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/huami/HuamiCoordinator.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/huami/HuamiCoordinator.java index cd2bc1fe26..f3888f4bf2 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/huami/HuamiCoordinator.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/huami/HuamiCoordinator.java @@ -254,6 +254,11 @@ public static DoNotDisturb getDoNotDisturb(Context context) { return DoNotDisturb.OFF; } + public static boolean getDoNotDisturbLiftWrist() { + Prefs prefs = GBApplication.getPrefs(); + return prefs.getBoolean(MiBandConst.PREF_MI2_DO_NOT_DISTURB_LIFT_WRIST, false); + } + @Override public boolean supportsScreenshots() { return false; diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/miband/MiBandConst.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/miband/MiBandConst.java index 0358dfb076..4ca3f0788d 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/miband/MiBandConst.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/miband/MiBandConst.java @@ -60,6 +60,7 @@ public final class MiBandConst { public static final String PREF_MI2_DO_NOT_DISTURB_SCHEDULED = "scheduled"; public static final String PREF_MI2_DO_NOT_DISTURB_START = "mi2_do_not_disturb_start"; public static final String PREF_MI2_DO_NOT_DISTURB_END = "mi2_do_not_disturb_end"; + public static final String PREF_MI2_DO_NOT_DISTURB_LIFT_WRIST = "mi2_do_not_disturb_lift_wrist"; public static final String PREF_MI2_INACTIVITY_WARNINGS = "mi2_inactivity_warnings"; public static final String PREF_MI2_INACTIVITY_WARNINGS_THRESHOLD = "mi2_inactivity_warnings_threshold"; public static final String PREF_MI2_INACTIVITY_WARNINGS_START = "mi2_inactivity_warnings_start"; diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/miband/MiBandPreferencesActivity.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/miband/MiBandPreferencesActivity.java index 888fc5b688..47314729a0 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/miband/MiBandPreferencesActivity.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/miband/MiBandPreferencesActivity.java @@ -45,6 +45,7 @@ import static nodomain.freeyourgadget.gadgetbridge.devices.miband.MiBandConst.PREF_MI2_DISPLAY_ITEMS; import static nodomain.freeyourgadget.gadgetbridge.devices.miband.MiBandConst.PREF_MI2_DO_NOT_DISTURB; import static nodomain.freeyourgadget.gadgetbridge.devices.miband.MiBandConst.PREF_MI2_DO_NOT_DISTURB_END; +import static nodomain.freeyourgadget.gadgetbridge.devices.miband.MiBandConst.PREF_MI2_DO_NOT_DISTURB_LIFT_WRIST; import static nodomain.freeyourgadget.gadgetbridge.devices.miband.MiBandConst.PREF_MI2_DO_NOT_DISTURB_OFF; import static nodomain.freeyourgadget.gadgetbridge.devices.miband.MiBandConst.PREF_MI2_DO_NOT_DISTURB_SCHEDULED; import static nodomain.freeyourgadget.gadgetbridge.devices.miband.MiBandConst.PREF_MI2_DO_NOT_DISTURB_START; @@ -241,6 +242,22 @@ public void run() { String doNotDisturbState = prefs.getString(MiBandConst.PREF_MI2_DO_NOT_DISTURB, PREF_MI2_DO_NOT_DISTURB_OFF); boolean doNotDisturbScheduled = doNotDisturbState.equals(PREF_MI2_DO_NOT_DISTURB_SCHEDULED); + boolean doNotDisturbOff = doNotDisturbState.equals(PREF_MI2_DO_NOT_DISTURB_OFF); + + final Preference doNotDisturbLiftWrist = findPreference(PREF_MI2_DO_NOT_DISTURB_LIFT_WRIST); + doNotDisturbLiftWrist.setEnabled(!doNotDisturbOff); + doNotDisturbLiftWrist.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() { + @Override + public boolean onPreferenceChange(Preference preference, Object newVal) { + invokeLater(new Runnable() { + @Override + public void run() { + GBApplication.deviceService().onSendConfiguration(PREF_MI2_DO_NOT_DISTURB_LIFT_WRIST); + } + }); + return true; + } + }); final Preference doNotDisturbStart = findPreference(PREF_MI2_DO_NOT_DISTURB_START); doNotDisturbStart.setEnabled(doNotDisturbScheduled); @@ -277,9 +294,11 @@ public void run() { @Override public boolean onPreferenceChange(Preference preference, Object newVal) { final boolean scheduled = PREF_MI2_DO_NOT_DISTURB_SCHEDULED.equals(newVal.toString()); + final boolean off = PREF_MI2_DO_NOT_DISTURB_OFF.equals(newVal.toString()); doNotDisturbStart.setEnabled(scheduled); doNotDisturbEnd.setEnabled(scheduled); + doNotDisturbLiftWrist.setEnabled(!off); invokeLater(new Runnable() { @Override diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/HuamiSupport.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/HuamiSupport.java index 69f76a7123..0f56edb6f4 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/HuamiSupport.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/huami/HuamiSupport.java @@ -1517,6 +1517,7 @@ public void onSendConfiguration(String config) { case MiBandConst.PREF_MI2_DO_NOT_DISTURB: case MiBandConst.PREF_MI2_DO_NOT_DISTURB_START: case MiBandConst.PREF_MI2_DO_NOT_DISTURB_END: + case MiBandConst.PREF_MI2_DO_NOT_DISTURB_LIFT_WRIST: setDoNotDisturb(builder); break; case MiBandConst.PREF_MI2_INACTIVITY_WARNINGS: @@ -1665,16 +1666,19 @@ private HuamiSupport setDisplayCaller(TransactionBuilder builder) { private HuamiSupport setDoNotDisturb(TransactionBuilder builder) { DoNotDisturb doNotDisturb = HuamiCoordinator.getDoNotDisturb(getContext()); - LOG.info("Setting do not disturb to " + doNotDisturb); + boolean doNotDisturbLiftWrist = HuamiCoordinator.getDoNotDisturbLiftWrist(); + LOG.info("Setting do not disturb to " + doNotDisturb + ", wake on lift wrist " + doNotDisturbLiftWrist); + byte[] data = null; + switch (doNotDisturb) { case OFF: - builder.write(getCharacteristic(HuamiService.UUID_CHARACTERISTIC_3_CONFIGURATION), HuamiService.COMMAND_DO_NOT_DISTURB_OFF); + data = HuamiService.COMMAND_DO_NOT_DISTURB_OFF.clone(); break; case AUTOMATIC: - builder.write(getCharacteristic(HuamiService.UUID_CHARACTERISTIC_3_CONFIGURATION), HuamiService.COMMAND_DO_NOT_DISTURB_AUTOMATIC); + data = HuamiService.COMMAND_DO_NOT_DISTURB_AUTOMATIC.clone(); break; case SCHEDULED: - byte[] data = HuamiService.COMMAND_DO_NOT_DISTURB_SCHEDULED.clone(); + data = HuamiService.COMMAND_DO_NOT_DISTURB_SCHEDULED.clone(); Calendar calendar = GregorianCalendar.getInstance(); @@ -1693,6 +1697,14 @@ private HuamiSupport setDoNotDisturb(TransactionBuilder builder) { break; } + if (data != null) { + if (doNotDisturbLiftWrist && doNotDisturb != DoNotDisturb.OFF) { + data[1] &= ~0x80; + } + + builder.write(getCharacteristic(HuamiService.UUID_CHARACTERISTIC_3_CONFIGURATION), data); + } + return this; } diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 0076c91b7a..06e7a2d1ba 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -428,6 +428,7 @@ Disable the inactivity warnings for a time interval Start time End time + Activate display upon lift during DND Band screen unlock" Swipe up to unlock the band\'s screen Automatic diff --git a/app/src/main/res/xml/miband_preferences.xml b/app/src/main/res/xml/miband_preferences.xml index 5a8b262f13..b792e556a4 100644 --- a/app/src/main/res/xml/miband_preferences.xml +++ b/app/src/main/res/xml/miband_preferences.xml @@ -222,6 +222,11 @@ android:title="@string/mi2_prefs_do_not_disturb" android:summary="%s" /> + +