Skip to content
This repository has been archived by the owner on Dec 23, 2024. It is now read-only.

WIP: Mi Band 3: Activate display upon lift during DND #1219

Open
wants to merge 1 commit into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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";
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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);
Expand Down Expand Up @@ -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
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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:
Expand Down Expand Up @@ -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();

Expand All @@ -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;
}

Expand Down
1 change: 1 addition & 0 deletions app/src/main/res/values/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -428,6 +428,7 @@
<string name="mi2_prefs_inactivity_warnings_dnd_summary">Disable the inactivity warnings for a time interval</string>
<string name="mi2_prefs_do_not_disturb_start">Start time</string>
<string name="mi2_prefs_do_not_disturb_end">End time</string>
<string name="mi2_prefs_do_not_disturb_lift_wrist">Activate display upon lift during DND</string>
<string name="mi3_prefs_band_screen_unlock">Band screen unlock"</string>
<string name="mi3_prefs_band_screen_unlock_summary">Swipe up to unlock the band\'s screen</string>
<string name="automatic">Automatic</string>
Expand Down
5 changes: 5 additions & 0 deletions app/src/main/res/xml/miband_preferences.xml
Original file line number Diff line number Diff line change
Expand Up @@ -222,6 +222,11 @@
android:title="@string/mi2_prefs_do_not_disturb"
android:summary="%s" />

<CheckBoxPreference
android:defaultValue="false"
android:key="mi2_do_not_disturb_lift_wrist"
android:title="@string/mi2_prefs_do_not_disturb_lift_wrist" />

<nodomain.freeyourgadget.gadgetbridge.util.TimePreference
android:defaultValue="01:00"
android:key="mi2_do_not_disturb_start"
Expand Down