1
0
Fork 0
BangleApps/apps/widhrzone/widget.js

97 lines
2.7 KiB
JavaScript

(() => {
const myprofile = require("Storage").readJSON("myprofile.json",1)||{};
require("FontTeletext5x9Ascii").add(Graphics);
const calczone = (bpm) => {
if (bpm <= myprofile.maxHrm*0.5) {
return 0;
} else if (bpm <= myprofile.maxHrm*0.60) {
return 1;
} else if (bpm <= myprofile.maxHrm*0.70) {
return 2;
} else if (bpm <= myprofile.maxHrm*0.80) {
return 3;
} else if (bpm <= myprofile.maxHrm*0.90) {
return 4;
} else { // > 0.9
return 5;
}
};
const zoneToText = (zone) => {
switch(zone) {
case 1:
return "HEALTH";
case 2:
return "FAT-B";
case 3:
return "AROBIC";
case 4:
return "ANAROB";
default:
return "MAX";
}
};
const zoneToColor = (zone) => {
switch(zone) {
case 1:
return ["#888888", "#000000"]; // bg, fg
case 2:
return ["#0000ff", "#ffffff"];
case 3:
return ["#00ff00", "#000000"];
case 4:
return ["#ffff00", "#000000"];
default:
return ["#ff0000", "#ffffff"];
}
};
Bangle.on('HRM', function(hrm) {
if (hrm.confidence >= 90) {
const zone = calczone(hrm.bpm);
if (WIDGETS.widhrzone.zone != zone) {
WIDGETS.widhrzone.zone = zone;
WIDGETS.widhrzone.draw();
}
}
});
WIDGETS.widhrzone = {
area:"tl", // tl (top left), tr (top right), bl (bottom left), br (bottom right)
width: 0, // default hide, only show for valid hrm
draw: function() {
if (this.zone > 0 && Bangle.isHRMOn()) {
if (this.width === 0) {
this.width = 6*6;
// width changed, re-layout
Bangle.drawWidgets();
}
// https://icons8.com/icon/set/heart/color 12x12, compression, transparency, inverted
g.reset();
// background
const colors = zoneToColor(this.zone);
g.setColor(colors[0]).fillRect(this.x, this.y, this.x+this.width, this.y+24);
// icon
const icon = require("heatshrink").decompress(atob("hkMgIFCv/m/1D8EGgFhjkXwHwBwQ"));
g.setColor(colors[1]).setBgColor(colors[0]).drawImage(icon, this.x, this.y);
// number upper right
g.setBgColor(colors[0]).setColor(colors[1]);
g.setFont("4x6:2x2").drawString(this.zone, this.x+18, this.y);
// text bottom
g.setFont("Teletext5x9Ascii:1x1").drawString(zoneToText(this.zone), this.x, this.y+12);
g.setColor(g.theme.fg).setBgColor(g.theme.bg); // restore
} else {
if (this.width !== 0) {
this.width = 0;
// width changed, re-layout
Bangle.drawWidgets();
}
}
},
zone: 0
};
})();