wohrm: Add settings
parent
15df120506
commit
0caa10b705
|
|
@ -1714,7 +1714,7 @@
|
||||||
{
|
{
|
||||||
"id": "wohrm",
|
"id": "wohrm",
|
||||||
"name": "Workout HRM",
|
"name": "Workout HRM",
|
||||||
"version": "0.09-rc4",
|
"version": "0.09-rc7",
|
||||||
"description": "Workout heart rate monitor notifies you with a buzz if your heart rate goes above or below the set limits.",
|
"description": "Workout heart rate monitor notifies you with a buzz if your heart rate goes above or below the set limits.",
|
||||||
"icon": "app.png",
|
"icon": "app.png",
|
||||||
"type": "app",
|
"type": "app",
|
||||||
|
|
@ -1725,6 +1725,7 @@
|
||||||
"screenshots": [{"url":"bangle1-workout-HRM-screenshot.png"}],
|
"screenshots": [{"url":"bangle1-workout-HRM-screenshot.png"}],
|
||||||
"storage": [
|
"storage": [
|
||||||
{"name":"wohrm.app.js","url":"app.js"},
|
{"name":"wohrm.app.js","url":"app.js"},
|
||||||
|
{"name":"wohrm.settings.js","url":"settings.js"},
|
||||||
{"name":"wohrm.img","url":"app-icon.js","evaluate":true}
|
{"name":"wohrm.img","url":"app-icon.js","evaluate":true}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
|
|
||||||
|
|
@ -8,3 +8,4 @@
|
||||||
0.08: tag HRM power requests to allow this to work alongside other widgets/apps (fix #799)
|
0.08: tag HRM power requests to allow this to work alongside other widgets/apps (fix #799)
|
||||||
0.09: Ported to Bangle.js2
|
0.09: Ported to Bangle.js2
|
||||||
Home returns to clock, instead of menu
|
Home returns to clock, instead of menu
|
||||||
|
Add settings
|
||||||
|
|
|
||||||
|
|
@ -4,14 +4,16 @@ const Setter = {
|
||||||
UPPER: 'upper',
|
UPPER: 'upper',
|
||||||
LOWER: 'lower'
|
LOWER: 'lower'
|
||||||
};
|
};
|
||||||
|
const SETTINGS_FILE = "wohrm.setting.json";
|
||||||
|
var settings = require('Storage').readJSON(SETTINGS_FILE, 1) || {
|
||||||
|
upperLimit: 130,
|
||||||
|
lowerLimit: 100
|
||||||
|
};
|
||||||
|
|
||||||
const shortBuzzTimeInMs = 80;
|
const shortBuzzTimeInMs = 80;
|
||||||
const longBuzzTimeInMs = 400;
|
const longBuzzTimeInMs = 400;
|
||||||
|
|
||||||
let upperLimit = 130;
|
|
||||||
let upperLimitChanged = true;
|
let upperLimitChanged = true;
|
||||||
|
|
||||||
let lowerLimit = 100;
|
|
||||||
let lowerLimitChanged = true;
|
let lowerLimitChanged = true;
|
||||||
|
|
||||||
let limitSetter = Setter.NONE;
|
let limitSetter = Setter.NONE;
|
||||||
|
|
@ -150,7 +152,7 @@ function renderUpperLimit() {
|
||||||
g.setColor(g.theme.fg);
|
g.setColor(g.theme.fg);
|
||||||
}
|
}
|
||||||
g.setFontVector(fontSizes.limits).setFontAlign(-1, 0, 0);
|
g.setFontVector(fontSizes.limits).setFontAlign(-1, 0, 0);
|
||||||
g.drawString("Upper: " + upperLimit,
|
g.drawString("Upper: " + settings.upperLimit,
|
||||||
upperLshape.minX,
|
upperLshape.minX,
|
||||||
upperLshape.minY+upperLshape.rectWidth/2);
|
upperLshape.minY+upperLshape.rectWidth/2);
|
||||||
|
|
||||||
|
|
@ -189,7 +191,7 @@ function renderLowerLimit() {
|
||||||
g.setColor(g.theme.fg);
|
g.setColor(g.theme.fg);
|
||||||
}
|
}
|
||||||
g.setFontVector(fontSizes.limits).setFontAlign(-1, 0, 0);
|
g.setFontVector(fontSizes.limits).setFontAlign(-1, 0, 0);
|
||||||
g.drawString("Lower: " + lowerLimit,
|
g.drawString("Lower: " + settings.lowerLimit,
|
||||||
lowerLshape.maxX + lowerLshape.rectWidth/2,
|
lowerLshape.maxX + lowerLshape.rectWidth/2,
|
||||||
lowerLshape.minY - lowerLshape.rectWidth/2);
|
lowerLshape.minY - lowerLshape.rectWidth/2);
|
||||||
|
|
||||||
|
|
@ -247,13 +249,13 @@ function buzz() {
|
||||||
// Do not buzz if not confident
|
// Do not buzz if not confident
|
||||||
if(hrConfidence < 85) { return; }
|
if(hrConfidence < 85) { return; }
|
||||||
|
|
||||||
if(currentHeartRate > upperLimit)
|
if(currentHeartRate > settings.upperLimit)
|
||||||
{
|
{
|
||||||
Bangle.buzz(shortBuzzTimeInMs);
|
Bangle.buzz(shortBuzzTimeInMs);
|
||||||
setTimeout(() => { Bangle.buzz(shortBuzzTimeInMs); }, shortBuzzTimeInMs * 2);
|
setTimeout(() => { Bangle.buzz(shortBuzzTimeInMs); }, shortBuzzTimeInMs * 2);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(currentHeartRate < lowerLimit)
|
if(currentHeartRate < settings.lowerLimit)
|
||||||
{
|
{
|
||||||
Bangle.buzz(longBuzzTimeInMs);
|
Bangle.buzz(longBuzzTimeInMs);
|
||||||
}
|
}
|
||||||
|
|
@ -312,11 +314,11 @@ function incrementLimit() {
|
||||||
resetHighlightTimeout();
|
resetHighlightTimeout();
|
||||||
|
|
||||||
if (limitSetter === Setter.UPPER) {
|
if (limitSetter === Setter.UPPER) {
|
||||||
upperLimit++;
|
settings.upperLimit++;
|
||||||
renderUpperLimit();
|
renderUpperLimit();
|
||||||
upperLimitChanged = true;
|
upperLimitChanged = true;
|
||||||
} else if(limitSetter === Setter.LOWER) {
|
} else if(limitSetter === Setter.LOWER) {
|
||||||
lowerLimit++;
|
settings.lowerLimit++;
|
||||||
renderLowerLimit();
|
renderLowerLimit();
|
||||||
lowerLimitChanged = true;
|
lowerLimitChanged = true;
|
||||||
}
|
}
|
||||||
|
|
@ -326,11 +328,11 @@ function decrementLimit(){
|
||||||
resetHighlightTimeout();
|
resetHighlightTimeout();
|
||||||
|
|
||||||
if (limitSetter === Setter.UPPER) {
|
if (limitSetter === Setter.UPPER) {
|
||||||
upperLimit--;
|
settings.upperLimit--;
|
||||||
renderUpperLimit();
|
renderUpperLimit();
|
||||||
upperLimitChanged = true;
|
upperLimitChanged = true;
|
||||||
} else if(limitSetter === Setter.LOWER) {
|
} else if(limitSetter === Setter.LOWER) {
|
||||||
lowerLimit--;
|
settings.lowerLimit--;
|
||||||
renderLowerLimit();
|
renderLowerLimit();
|
||||||
lowerLimitChanged = true;
|
lowerLimitChanged = true;
|
||||||
}
|
}
|
||||||
|
|
@ -368,7 +370,7 @@ Bangle.setHRMPower(1,"wohrm");
|
||||||
Bangle.on('HRM', onHrm);
|
Bangle.on('HRM', onHrm);
|
||||||
|
|
||||||
g.setTheme({bg:"#000",fg:"#fff",dark:true});
|
g.setTheme({bg:"#000",fg:"#fff",dark:true});
|
||||||
g.reset()
|
g.reset();
|
||||||
g.clear();
|
g.clear();
|
||||||
Bangle.loadWidgets();
|
Bangle.loadWidgets();
|
||||||
Bangle.drawWidgets();
|
Bangle.drawWidgets();
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,35 @@
|
||||||
|
(function menu(back) {
|
||||||
|
const SETTINGS_FILE = "wohrm.setting.json";
|
||||||
|
|
||||||
|
// initialize with default settings...
|
||||||
|
const storage = require('Storage');
|
||||||
|
var settings = storage.readJSON(SETTINGS_FILE, 1) || {
|
||||||
|
upperLimit: 130,
|
||||||
|
lowerLimit: 100
|
||||||
|
};
|
||||||
|
|
||||||
|
function save() {
|
||||||
|
storage.write(SETTINGS_FILE, settings);
|
||||||
|
}
|
||||||
|
|
||||||
|
E.showMenu({
|
||||||
|
'': { 'title': 'Workout HRM' },
|
||||||
|
'< Back': back,
|
||||||
|
'Upper limit': {
|
||||||
|
value: settings.upperLimit,
|
||||||
|
min: 100, max: 200,
|
||||||
|
onchange: v => {
|
||||||
|
settings.upperLimit = v;
|
||||||
|
save();
|
||||||
|
}
|
||||||
|
},
|
||||||
|
'Lower limit': {
|
||||||
|
value: settings.lowerLimit,
|
||||||
|
min: 50, max: 150,
|
||||||
|
onchange: v => {
|
||||||
|
settings.lowerLimit = v;
|
||||||
|
save();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
})
|
||||||
Loading…
Reference in New Issue