mirror of
https://codeberg.org/Freeyourgadget/Gadgetbridge.git
synced 2025-06-05 21:49:48 +02:00
Mi Band 5: Add HR activity monitoring, HR alerts, stress monitoring
This commit is contained in:
@@ -85,6 +85,10 @@ public class DeviceSettingsPreferenceConst {
|
|||||||
|
|
||||||
public static final String PREF_HEARTRATE_USE_FOR_SLEEP_DETECTION = "heartrate_sleep_detection";
|
public static final String PREF_HEARTRATE_USE_FOR_SLEEP_DETECTION = "heartrate_sleep_detection";
|
||||||
public static final String PREF_HEARTRATE_MEASUREMENT_INTERVAL = "heartrate_measurement_interval";
|
public static final String PREF_HEARTRATE_MEASUREMENT_INTERVAL = "heartrate_measurement_interval";
|
||||||
|
public static final String PREF_HEARTRATE_ACTIVITY_MONITORING = "heartrate_activity_monitoring";
|
||||||
|
public static final String PREF_HEARTRATE_ALERT_ENABLED = "heartrate_alert_enabled";
|
||||||
|
public static final String PREF_HEARTRATE_ALERT_THRESHOLD = "heartrate_alert_threshold";
|
||||||
|
public static final String PREF_HEARTRATE_STRESS_MONITORING = "heartrate_stress_monitoring";
|
||||||
|
|
||||||
public static final String PREF_AUTOHEARTRATE_SWITCH = "pref_autoheartrate_switch";
|
public static final String PREF_AUTOHEARTRATE_SWITCH = "pref_autoheartrate_switch";
|
||||||
public static final String PREF_AUTOHEARTRATE_SLEEP = "pref_autoheartrate_sleep";
|
public static final String PREF_AUTOHEARTRATE_SLEEP = "pref_autoheartrate_sleep";
|
||||||
|
@@ -355,15 +355,43 @@ public class DeviceSpecificSettingsFragment extends PreferenceFragmentCompat imp
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
final Preference heartrateMeasurementInterval = findPreference(PREF_HEARTRATE_MEASUREMENT_INTERVAL);
|
final ListPreference heartrateMeasurementInterval = findPreference(PREF_HEARTRATE_MEASUREMENT_INTERVAL);
|
||||||
if (heartrateMeasurementInterval != null) {
|
if (heartrateMeasurementInterval != null) {
|
||||||
|
final SwitchPreference activityMonitoring = findPreference(PREF_HEARTRATE_ACTIVITY_MONITORING);
|
||||||
|
final SwitchPreference heartrateAlertEnabled = findPreference(PREF_HEARTRATE_ALERT_ENABLED);
|
||||||
|
final SwitchPreference stressMonitoring = findPreference(PREF_HEARTRATE_STRESS_MONITORING);
|
||||||
|
|
||||||
heartrateMeasurementInterval.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
|
heartrateMeasurementInterval.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
|
||||||
@Override
|
public boolean onPreferenceChange(final Preference preference, final Object newVal) {
|
||||||
public boolean onPreferenceChange(Preference preference, Object newVal) {
|
|
||||||
GBApplication.deviceService().onSetHeartRateMeasurementInterval(Integer.parseInt((String) newVal));
|
GBApplication.deviceService().onSetHeartRateMeasurementInterval(Integer.parseInt((String) newVal));
|
||||||
|
|
||||||
|
final boolean isMeasurementIntervalEnabled = !newVal.equals("0");
|
||||||
|
|
||||||
|
if (activityMonitoring != null) {
|
||||||
|
activityMonitoring.setEnabled(isMeasurementIntervalEnabled);
|
||||||
|
}
|
||||||
|
if (heartrateAlertEnabled != null) {
|
||||||
|
heartrateAlertEnabled.setEnabled(isMeasurementIntervalEnabled);
|
||||||
|
}
|
||||||
|
if (stressMonitoring != null) {
|
||||||
|
stressMonitoring.setEnabled(isMeasurementIntervalEnabled);
|
||||||
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
final boolean isMeasurementIntervalEnabled = !heartrateMeasurementInterval.getValue().equals("0");
|
||||||
|
|
||||||
|
if (activityMonitoring != null) {
|
||||||
|
activityMonitoring.setEnabled(isMeasurementIntervalEnabled);
|
||||||
|
}
|
||||||
|
if (heartrateAlertEnabled != null) {
|
||||||
|
heartrateAlertEnabled.setEnabled(isMeasurementIntervalEnabled);
|
||||||
|
}
|
||||||
|
if (stressMonitoring != null) {
|
||||||
|
stressMonitoring.setEnabled(isMeasurementIntervalEnabled);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
addPreferenceHandlerFor(PREF_SWIPE_UNLOCK);
|
addPreferenceHandlerFor(PREF_SWIPE_UNLOCK);
|
||||||
@@ -416,6 +444,10 @@ public class DeviceSpecificSettingsFragment extends PreferenceFragmentCompat imp
|
|||||||
addPreferenceHandlerFor(PREF_AUTOHEARTRATE_INTERVAL);
|
addPreferenceHandlerFor(PREF_AUTOHEARTRATE_INTERVAL);
|
||||||
addPreferenceHandlerFor(PREF_AUTOHEARTRATE_START);
|
addPreferenceHandlerFor(PREF_AUTOHEARTRATE_START);
|
||||||
addPreferenceHandlerFor(PREF_AUTOHEARTRATE_END);
|
addPreferenceHandlerFor(PREF_AUTOHEARTRATE_END);
|
||||||
|
addPreferenceHandlerFor(PREF_HEARTRATE_ACTIVITY_MONITORING);
|
||||||
|
addPreferenceHandlerFor(PREF_HEARTRATE_ALERT_THRESHOLD);
|
||||||
|
addPreferenceHandlerFor(PREF_HEARTRATE_ALERT_ENABLED);
|
||||||
|
addPreferenceHandlerFor(PREF_HEARTRATE_STRESS_MONITORING);
|
||||||
addPreferenceHandlerFor(PREF_DO_NOT_DISTURB_NOAUTO);
|
addPreferenceHandlerFor(PREF_DO_NOT_DISTURB_NOAUTO);
|
||||||
addPreferenceHandlerFor(PREF_DO_NOT_DISTURB_NOAUTO_START);
|
addPreferenceHandlerFor(PREF_DO_NOT_DISTURB_NOAUTO_START);
|
||||||
addPreferenceHandlerFor(PREF_DO_NOT_DISTURB_NOAUTO_END);
|
addPreferenceHandlerFor(PREF_DO_NOT_DISTURB_NOAUTO_END);
|
||||||
|
@@ -273,6 +273,26 @@ public abstract class HuamiCoordinator extends AbstractDeviceCoordinator {
|
|||||||
return GBApplication.getPrefs().getInt(DeviceSettingsPreferenceConst.PREF_HEARTRATE_MEASUREMENT_INTERVAL, 0) / 60;
|
return GBApplication.getPrefs().getInt(DeviceSettingsPreferenceConst.PREF_HEARTRATE_MEASUREMENT_INTERVAL, 0) / 60;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static boolean getHeartrateActivityMonitoring(String deviceAddress) throws IllegalArgumentException {
|
||||||
|
Prefs prefs = new Prefs(GBApplication.getDeviceSpecificSharedPrefs(deviceAddress));
|
||||||
|
return prefs.getBoolean(DeviceSettingsPreferenceConst.PREF_HEARTRATE_ACTIVITY_MONITORING, false);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static boolean getHeartrateAlert(String deviceAddress) throws IllegalArgumentException {
|
||||||
|
Prefs prefs = new Prefs(GBApplication.getDeviceSpecificSharedPrefs(deviceAddress));
|
||||||
|
return prefs.getBoolean(DeviceSettingsPreferenceConst.PREF_HEARTRATE_ALERT_ENABLED, false);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static int getHeartrateAlertThreshold(String deviceAddress) throws IllegalArgumentException {
|
||||||
|
Prefs prefs = new Prefs(GBApplication.getDeviceSpecificSharedPrefs(deviceAddress));
|
||||||
|
return prefs.getInt(DeviceSettingsPreferenceConst.PREF_HEARTRATE_ALERT_THRESHOLD, 150);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static boolean getHeartrateStressMonitoring(String deviceAddress) throws IllegalArgumentException {
|
||||||
|
Prefs prefs = new Prefs(GBApplication.getDeviceSpecificSharedPrefs(deviceAddress));
|
||||||
|
return prefs.getBoolean(DeviceSettingsPreferenceConst.PREF_HEARTRATE_STRESS_MONITORING, false);
|
||||||
|
}
|
||||||
|
|
||||||
public static boolean getBtConnectedAdvertising(String deviceAddress) {
|
public static boolean getBtConnectedAdvertising(String deviceAddress) {
|
||||||
Prefs prefs = new Prefs(GBApplication.getDeviceSpecificSharedPrefs(deviceAddress));
|
Prefs prefs = new Prefs(GBApplication.getDeviceSpecificSharedPrefs(deviceAddress));
|
||||||
return prefs.getBoolean(DeviceSettingsPreferenceConst.PREF_BT_CONNECTED_ADVERTISEMENT, false);
|
return prefs.getBoolean(DeviceSettingsPreferenceConst.PREF_BT_CONNECTED_ADVERTISEMENT, false);
|
||||||
|
@@ -106,7 +106,7 @@ public class MiBand5Coordinator extends HuamiCoordinator {
|
|||||||
R.xml.devicesettings_miband5,
|
R.xml.devicesettings_miband5,
|
||||||
R.xml.devicesettings_vibrationpatterns,
|
R.xml.devicesettings_vibrationpatterns,
|
||||||
R.xml.devicesettings_wearlocation,
|
R.xml.devicesettings_wearlocation,
|
||||||
R.xml.devicesettings_heartrate_sleep,
|
R.xml.heartrate_sleep_alert_activity_stress,
|
||||||
R.xml.devicesettings_goal_notification,
|
R.xml.devicesettings_goal_notification,
|
||||||
R.xml.devicesettings_custom_emoji_font,
|
R.xml.devicesettings_custom_emoji_font,
|
||||||
R.xml.devicesettings_timeformat,
|
R.xml.devicesettings_timeformat,
|
||||||
|
@@ -171,6 +171,10 @@ import static nodomain.freeyourgadget.gadgetbridge.activities.devicesettings.Dev
|
|||||||
import static nodomain.freeyourgadget.gadgetbridge.activities.devicesettings.DeviceSettingsPreferenceConst.PREF_DO_NOT_DISTURB_START;
|
import static nodomain.freeyourgadget.gadgetbridge.activities.devicesettings.DeviceSettingsPreferenceConst.PREF_DO_NOT_DISTURB_START;
|
||||||
import static nodomain.freeyourgadget.gadgetbridge.activities.devicesettings.DeviceSettingsPreferenceConst.PREF_DO_NOT_DISTURB_END;
|
import static nodomain.freeyourgadget.gadgetbridge.activities.devicesettings.DeviceSettingsPreferenceConst.PREF_DO_NOT_DISTURB_END;
|
||||||
import static nodomain.freeyourgadget.gadgetbridge.activities.devicesettings.DeviceSettingsPreferenceConst.PREF_DO_NOT_DISTURB_LIFT_WRIST;
|
import static nodomain.freeyourgadget.gadgetbridge.activities.devicesettings.DeviceSettingsPreferenceConst.PREF_DO_NOT_DISTURB_LIFT_WRIST;
|
||||||
|
import static nodomain.freeyourgadget.gadgetbridge.activities.devicesettings.DeviceSettingsPreferenceConst.PREF_HEARTRATE_ACTIVITY_MONITORING;
|
||||||
|
import static nodomain.freeyourgadget.gadgetbridge.activities.devicesettings.DeviceSettingsPreferenceConst.PREF_HEARTRATE_ALERT_ENABLED;
|
||||||
|
import static nodomain.freeyourgadget.gadgetbridge.activities.devicesettings.DeviceSettingsPreferenceConst.PREF_HEARTRATE_ALERT_THRESHOLD;
|
||||||
|
import static nodomain.freeyourgadget.gadgetbridge.activities.devicesettings.DeviceSettingsPreferenceConst.PREF_HEARTRATE_STRESS_MONITORING;
|
||||||
import static nodomain.freeyourgadget.gadgetbridge.activities.devicesettings.DeviceSettingsPreferenceConst.PREF_INACTIVITY_ENABLE;
|
import static nodomain.freeyourgadget.gadgetbridge.activities.devicesettings.DeviceSettingsPreferenceConst.PREF_INACTIVITY_ENABLE;
|
||||||
import static nodomain.freeyourgadget.gadgetbridge.activities.devicesettings.DeviceSettingsPreferenceConst.PREF_INACTIVITY_START;
|
import static nodomain.freeyourgadget.gadgetbridge.activities.devicesettings.DeviceSettingsPreferenceConst.PREF_INACTIVITY_START;
|
||||||
import static nodomain.freeyourgadget.gadgetbridge.activities.devicesettings.DeviceSettingsPreferenceConst.PREF_INACTIVITY_END;
|
import static nodomain.freeyourgadget.gadgetbridge.activities.devicesettings.DeviceSettingsPreferenceConst.PREF_INACTIVITY_END;
|
||||||
@@ -230,6 +234,7 @@ import static nodomain.freeyourgadget.gadgetbridge.devices.huami.HuamiService.CO
|
|||||||
import static nodomain.freeyourgadget.gadgetbridge.devices.huami.HuamiService.COMMAND_GPS_VERSION;
|
import static nodomain.freeyourgadget.gadgetbridge.devices.huami.HuamiService.COMMAND_GPS_VERSION;
|
||||||
import static nodomain.freeyourgadget.gadgetbridge.devices.huami.HuamiService.COMMAND_WORKOUT_ACTIVITY_TYPES;
|
import static nodomain.freeyourgadget.gadgetbridge.devices.huami.HuamiService.COMMAND_WORKOUT_ACTIVITY_TYPES;
|
||||||
import static nodomain.freeyourgadget.gadgetbridge.devices.huami.HuamiService.DISPLAY_ITEM_BIT_CLOCK;
|
import static nodomain.freeyourgadget.gadgetbridge.devices.huami.HuamiService.DISPLAY_ITEM_BIT_CLOCK;
|
||||||
|
import static nodomain.freeyourgadget.gadgetbridge.devices.huami.HuamiService.ENDPOINT_DISPLAY;
|
||||||
import static nodomain.freeyourgadget.gadgetbridge.devices.huami.HuamiService.ENDPOINT_DISPLAY_ITEMS;
|
import static nodomain.freeyourgadget.gadgetbridge.devices.huami.HuamiService.ENDPOINT_DISPLAY_ITEMS;
|
||||||
import static nodomain.freeyourgadget.gadgetbridge.devices.miband.MiBandConst.DEFAULT_VALUE_VIBRATION_COUNT;
|
import static nodomain.freeyourgadget.gadgetbridge.devices.miband.MiBandConst.DEFAULT_VALUE_VIBRATION_COUNT;
|
||||||
import static nodomain.freeyourgadget.gadgetbridge.devices.miband.MiBandConst.DEFAULT_VALUE_VIBRATION_PROFILE;
|
import static nodomain.freeyourgadget.gadgetbridge.devices.miband.MiBandConst.DEFAULT_VALUE_VIBRATION_PROFILE;
|
||||||
@@ -679,6 +684,37 @@ public class HuamiSupport extends AbstractBTLEDeviceSupport {
|
|||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private HuamiSupport setHeartrateActivityMonitoring(TransactionBuilder builder) {
|
||||||
|
final boolean enableHrActivityMonitoring = HuamiCoordinator.getHeartrateActivityMonitoring(gbDevice.getAddress());
|
||||||
|
final byte[] cmd = {ENDPOINT_DISPLAY, 0x22, 0x00, (byte) (enableHrActivityMonitoring ? 0x01 : 0x00)};
|
||||||
|
writeToConfiguration(builder, cmd);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
private HuamiSupport setHeartrateAlert(TransactionBuilder builder) {
|
||||||
|
final boolean enableHrAlert = HuamiCoordinator.getHeartrateAlert(gbDevice.getAddress());
|
||||||
|
final int hrAlertThreshold = HuamiCoordinator.getHeartrateAlertThreshold(gbDevice.getAddress());
|
||||||
|
|
||||||
|
final byte[] cmd = {
|
||||||
|
ENDPOINT_DISPLAY,
|
||||||
|
0x1a,
|
||||||
|
0x00,
|
||||||
|
(byte) (enableHrAlert ? 0x01 : 0x00),
|
||||||
|
(byte) hrAlertThreshold
|
||||||
|
};
|
||||||
|
|
||||||
|
writeToConfiguration(builder, cmd);
|
||||||
|
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
private HuamiSupport setHeartrateStressMonitoring(TransactionBuilder builder) {
|
||||||
|
final boolean enableHrStressMonitoring = HuamiCoordinator.getHeartrateStressMonitoring(gbDevice.getAddress());
|
||||||
|
final byte[] cmd = new byte[] {(byte) 0xfe, 0x06, 0x00, (byte) (enableHrStressMonitoring ? 0x01 : 0x00)};
|
||||||
|
writeToConfiguration(builder, cmd);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
private HuamiSupport setHeartrateMeasurementInterval(TransactionBuilder builder, int minutes) {
|
private HuamiSupport setHeartrateMeasurementInterval(TransactionBuilder builder, int minutes) {
|
||||||
if (characteristicHRControlPoint != null) {
|
if (characteristicHRControlPoint != null) {
|
||||||
builder.notify(characteristicHRControlPoint, true);
|
builder.notify(characteristicHRControlPoint, true);
|
||||||
@@ -2536,6 +2572,16 @@ public class HuamiSupport extends AbstractBTLEDeviceSupport {
|
|||||||
case PREF_HUAMI_VIBRATION_TRY_FIND_BAND:
|
case PREF_HUAMI_VIBRATION_TRY_FIND_BAND:
|
||||||
setVibrationPattern(builder, config);
|
setVibrationPattern(builder, config);
|
||||||
break;
|
break;
|
||||||
|
case PREF_HEARTRATE_ACTIVITY_MONITORING:
|
||||||
|
setHeartrateActivityMonitoring(builder);
|
||||||
|
break;
|
||||||
|
case PREF_HEARTRATE_ALERT_ENABLED:
|
||||||
|
case PREF_HEARTRATE_ALERT_THRESHOLD:
|
||||||
|
setHeartrateAlert(builder);
|
||||||
|
break;
|
||||||
|
case PREF_HEARTRATE_STRESS_MONITORING:
|
||||||
|
setHeartrateStressMonitoring(builder);
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
builder.queue(getQueue());
|
builder.queue(getQueue());
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
@@ -3677,6 +3723,9 @@ public class HuamiSupport extends AbstractBTLEDeviceSupport {
|
|||||||
setGoalNotification(builder);
|
setGoalNotification(builder);
|
||||||
setInactivityWarnings(builder);
|
setInactivityWarnings(builder);
|
||||||
setHeartrateSleepSupport(builder);
|
setHeartrateSleepSupport(builder);
|
||||||
|
setHeartrateActivityMonitoring(builder);
|
||||||
|
setHeartrateAlert(builder);
|
||||||
|
setHeartrateStressMonitoring(builder);
|
||||||
setDisconnectNotification(builder);
|
setDisconnectNotification(builder);
|
||||||
setExposeHRThridParty(builder);
|
setExposeHRThridParty(builder);
|
||||||
setHeartrateMeasurementInterval(builder, HuamiCoordinator.getHeartRateMeasurementInterval(getDevice().getAddress()));
|
setHeartrateMeasurementInterval(builder, HuamiCoordinator.getHeartRateMeasurementInterval(getDevice().getAddress()));
|
||||||
|
5
app/src/main/res/drawable/ic_mood_bad.xml
Normal file
5
app/src/main/res/drawable/ic_mood_bad.xml
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
<vector android:height="24dp" android:tint="#7E7E7E"
|
||||||
|
android:viewportHeight="24" android:viewportWidth="24"
|
||||||
|
android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
|
||||||
|
<path android:fillColor="@android:color/white" android:pathData="M11.99,2C6.47,2 2,6.48 2,12s4.47,10 9.99,10C17.52,22 22,17.52 22,12S17.52,2 11.99,2zM12,20c-4.42,0 -8,-3.58 -8,-8s3.58,-8 8,-8 8,3.58 8,8 -3.58,8 -8,8zM15.5,11c0.83,0 1.5,-0.67 1.5,-1.5S16.33,8 15.5,8 14,8.67 14,9.5s0.67,1.5 1.5,1.5zM8.5,11c0.83,0 1.5,-0.67 1.5,-1.5S9.33,8 8.5,8 7,8.67 7,9.5 7.67,11 8.5,11zM12,14c-2.33,0 -4.31,1.46 -5.11,3.5h10.22c-0.8,-2.04 -2.78,-3.5 -5.11,-3.5z"/>
|
||||||
|
</vector>
|
5
app/src/main/res/drawable/ic_warning_gray.xml
Normal file
5
app/src/main/res/drawable/ic_warning_gray.xml
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
<vector android:height="24dp" android:tint="#7E7E7E"
|
||||||
|
android:viewportHeight="24" android:viewportWidth="24"
|
||||||
|
android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
|
||||||
|
<path android:fillColor="@android:color/white" android:pathData="M1,21h22L12,2 1,21zM13,18h-2v-2h2v2zM13,14h-2v-4h2v4z"/>
|
||||||
|
</vector>
|
@@ -1581,6 +1581,34 @@
|
|||||||
<item>3600</item>
|
<item>3600</item>
|
||||||
</string-array>
|
</string-array>
|
||||||
|
|
||||||
|
<string-array name="prefs_miband_heartrate_alert_threshold">
|
||||||
|
<item name="100">@string/heartrate_bpm_100</item>
|
||||||
|
<item name="105">@string/heartrate_bpm_105</item>
|
||||||
|
<item name="110">@string/heartrate_bpm_110</item>
|
||||||
|
<item name="112">@string/heartrate_bpm_112</item>
|
||||||
|
<item name="120">@string/heartrate_bpm_120</item>
|
||||||
|
<item name="125">@string/heartrate_bpm_125</item>
|
||||||
|
<item name="130">@string/heartrate_bpm_130</item>
|
||||||
|
<item name="135">@string/heartrate_bpm_135</item>
|
||||||
|
<item name="140">@string/heartrate_bpm_140</item>
|
||||||
|
<item name="145">@string/heartrate_bpm_145</item>
|
||||||
|
<item name="150">@string/heartrate_bpm_150</item>
|
||||||
|
</string-array>
|
||||||
|
|
||||||
|
<string-array name="prefs_miband_heartrate_alert_threshold_values">
|
||||||
|
<item>100</item>
|
||||||
|
<item>105</item>
|
||||||
|
<item>110</item>
|
||||||
|
<item>112</item>
|
||||||
|
<item>120</item>
|
||||||
|
<item>125</item>
|
||||||
|
<item>130</item>
|
||||||
|
<item>135</item>
|
||||||
|
<item>140</item>
|
||||||
|
<item>145</item>
|
||||||
|
<item>150</item>
|
||||||
|
</string-array>
|
||||||
|
|
||||||
<string-array name="prefs_zetime_heartrate_measurement_interval">
|
<string-array name="prefs_zetime_heartrate_measurement_interval">
|
||||||
<item name="0">@string/off</item>
|
<item name="0">@string/off</item>
|
||||||
<item name="300">@string/interval_five_minutes</item>
|
<item name="300">@string/interval_five_minutes</item>
|
||||||
|
@@ -482,6 +482,17 @@
|
|||||||
<string name="interval_fifteen_minutes">every 15 minutes</string>
|
<string name="interval_fifteen_minutes">every 15 minutes</string>
|
||||||
<string name="interval_thirty_minutes">every 30 minutes</string>
|
<string name="interval_thirty_minutes">every 30 minutes</string>
|
||||||
<string name="interval_forty_five_minutes">every 45 minutes</string>
|
<string name="interval_forty_five_minutes">every 45 minutes</string>
|
||||||
|
<string name="heartrate_bpm_100">100 bpm</string>
|
||||||
|
<string name="heartrate_bpm_105">105 bpm</string>
|
||||||
|
<string name="heartrate_bpm_110">110 bpm</string>
|
||||||
|
<string name="heartrate_bpm_112">112 bpm</string>
|
||||||
|
<string name="heartrate_bpm_120">120 bpm</string>
|
||||||
|
<string name="heartrate_bpm_125">125 bpm</string>
|
||||||
|
<string name="heartrate_bpm_130">130 bpm</string>
|
||||||
|
<string name="heartrate_bpm_135">135 bpm</string>
|
||||||
|
<string name="heartrate_bpm_140">140 bpm</string>
|
||||||
|
<string name="heartrate_bpm_145">145 bpm</string>
|
||||||
|
<string name="heartrate_bpm_150">150 bpm</string>
|
||||||
<string name="interval_one_hour">once an hour</string>
|
<string name="interval_one_hour">once an hour</string>
|
||||||
<string name="stats_title">Speed zones</string>
|
<string name="stats_title">Speed zones</string>
|
||||||
<string name="stats_x_axis_label">Total minutes</string>
|
<string name="stats_x_axis_label">Total minutes</string>
|
||||||
@@ -538,6 +549,13 @@
|
|||||||
<string name="chart_get_active_and_synchronize">Do some activity and synchronize device.</string>
|
<string name="chart_get_active_and_synchronize">Do some activity and synchronize device.</string>
|
||||||
<string name="user_feedback_miband_activity_data_transfer">About to transfer %1$s of data starting from %2$s</string>
|
<string name="user_feedback_miband_activity_data_transfer">About to transfer %1$s of data starting from %2$s</string>
|
||||||
<string name="miband_prefs_fitness_goal">Daily step target</string>
|
<string name="miband_prefs_fitness_goal">Daily step target</string>
|
||||||
|
<string name="prefs_heartrate_alert_experimental_title">Heart rate alert (experimental)</string>
|
||||||
|
<string name="prefs_heartrate_alert_experimental_description">Vibrate the band when the heart rate is over a threshold, without any obvious physical activity in the last 10 minutes. This feature is experimental, and was not extensively tested.</string>
|
||||||
|
<string name="prefs_heartrate_alert_threshold">Heart rate alert threshold</string>
|
||||||
|
<string name="prefs_stress_monitoring_title">Stress monitoring</string>
|
||||||
|
<string name="prefs_stress_monitoring_description">Monitor stress level while resting</string>
|
||||||
|
<string name="prefs_activity_monitoring_title">Activity monitoring</string>
|
||||||
|
<string name="prefs_activity_monitoring_description">Automatically increase the heart rate detection frequency when the band detects physical exercise, to increase heart rate capture accuracy.</string>
|
||||||
<string name="dbaccess_error_executing">Error executing \'%1$s\'</string>
|
<string name="dbaccess_error_executing">Error executing \'%1$s\'</string>
|
||||||
<string name="controlcenter_start_activitymonitor">Your activity (ALPHA)</string>
|
<string name="controlcenter_start_activitymonitor">Your activity (ALPHA)</string>
|
||||||
<string name="cannot_connect">Cannot connect: %1$s</string>
|
<string name="cannot_connect">Cannot connect: %1$s</string>
|
||||||
@@ -685,6 +703,7 @@
|
|||||||
<string name="mi2_prefs_inactivity_warnings_dnd_summary">Disable inactivity warnings for a time interval</string>
|
<string name="mi2_prefs_inactivity_warnings_dnd_summary">Disable inactivity warnings for a time interval</string>
|
||||||
<string name="mi2_prefs_heart_rate_monitoring">Heart Rate Monitoring</string>
|
<string name="mi2_prefs_heart_rate_monitoring">Heart Rate Monitoring</string>
|
||||||
<string name="mi2_prefs_heart_rate_monitoring_summary">Configure heart rate monitoring</string>
|
<string name="mi2_prefs_heart_rate_monitoring_summary">Configure heart rate monitoring</string>
|
||||||
|
<string name="mi2_prefs_heart_rate_monitoring_alerts_summary">Configure heart rate monitoring and alert thresholds</string>
|
||||||
<string name="mi2_prefs_do_not_disturb_start">Start time</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_end">End time</string>
|
||||||
<string name="mi2_prefs_do_not_disturb_lift_wrist">Activate display upon lift during Do Not Disturb</string>
|
<string name="mi2_prefs_do_not_disturb_lift_wrist">Activate display upon lift during Do Not Disturb</string>
|
||||||
|
@@ -0,0 +1,62 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<androidx.preference.PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
|
||||||
|
<PreferenceScreen
|
||||||
|
android:icon="@drawable/ic_heartrate"
|
||||||
|
android:key="heartrate_monitoring_key"
|
||||||
|
android:persistent="false"
|
||||||
|
android:summary="@string/mi2_prefs_heart_rate_monitoring_alerts_summary"
|
||||||
|
android:title="@string/mi2_prefs_heart_rate_monitoring">
|
||||||
|
|
||||||
|
<SwitchPreference
|
||||||
|
android:defaultValue="false"
|
||||||
|
android:icon="@drawable/ic_activity_sleep"
|
||||||
|
android:key="heartrate_sleep_detection"
|
||||||
|
android:title="@string/miband_prefs_hr_sleep_detection" />
|
||||||
|
|
||||||
|
<ListPreference
|
||||||
|
android:defaultValue="0"
|
||||||
|
android:entries="@array/prefs_heartrate_measurement_interval"
|
||||||
|
android:entryValues="@array/prefs_heartrate_measurement_interval_values"
|
||||||
|
android:icon="@drawable/ic_heartrate"
|
||||||
|
android:key="heartrate_measurement_interval"
|
||||||
|
android:summary="%s"
|
||||||
|
android:title="@string/prefs_title_heartrate_measurement_interval" />
|
||||||
|
|
||||||
|
<!-- Activity Monitoring -->
|
||||||
|
|
||||||
|
<SwitchPreference
|
||||||
|
android:defaultValue="false"
|
||||||
|
android:icon="@drawable/ic_activity_unknown_small"
|
||||||
|
android:key="heartrate_activity_monitoring"
|
||||||
|
android:summary="@string/prefs_activity_monitoring_description"
|
||||||
|
android:title="@string/prefs_activity_monitoring_title" />
|
||||||
|
|
||||||
|
<!-- Heart Rate Alerts -->
|
||||||
|
|
||||||
|
<SwitchPreference
|
||||||
|
android:defaultValue="false"
|
||||||
|
android:icon="@drawable/ic_warning_gray"
|
||||||
|
android:key="heartrate_alert_enabled"
|
||||||
|
android:summary="@string/prefs_heartrate_alert_experimental_description"
|
||||||
|
android:title="@string/prefs_heartrate_alert_experimental_title" />
|
||||||
|
|
||||||
|
<ListPreference
|
||||||
|
android:defaultValue="0"
|
||||||
|
android:dependency="heartrate_alert_enabled"
|
||||||
|
android:entries="@array/prefs_miband_heartrate_alert_threshold"
|
||||||
|
android:entryValues="@array/prefs_miband_heartrate_alert_threshold_values"
|
||||||
|
android:icon="@drawable/ic_heartrate"
|
||||||
|
android:key="heartrate_alert_threshold"
|
||||||
|
android:summary="%s"
|
||||||
|
android:title="@string/prefs_heartrate_alert_threshold" />
|
||||||
|
|
||||||
|
<!-- Stress Monitoring -->
|
||||||
|
|
||||||
|
<SwitchPreference
|
||||||
|
android:defaultValue="false"
|
||||||
|
android:icon="@drawable/ic_mood_bad"
|
||||||
|
android:key="heartrate_stress_monitoring"
|
||||||
|
android:summary="@string/prefs_stress_monitoring_description"
|
||||||
|
android:title="@string/prefs_stress_monitoring_title" />
|
||||||
|
</PreferenceScreen>
|
||||||
|
</androidx.preference.PreferenceScreen>
|
Reference in New Issue
Block a user