diff --git a/apps/widdevst/wid.js b/apps/widdevst/wid.js index 99fa8f242..db7d72dd9 100644 --- a/apps/widdevst/wid.js +++ b/apps/widdevst/wid.js @@ -1,9 +1,10 @@ (() => { var stat = {date: 0}; + var d = Date.now(); WIDGETS.devst = {area: "tr", width: 22, draw: function() { + d = Date.now(); if (WIDGETS.devst._draw) return; - var d = Date.now(); var t; if ((d - stat.date) < 6e4) { t = process.memory(false); @@ -20,12 +21,15 @@ g.clearRect(x, y, x + 21, y + 23); g.drawRect(x + 2, y + 1, x + 20, y + 21); g.setFont('6x8', 1); - if (NRF.getSecurityStatus().connected) g.drawString('B', x + 5, y + 3); - if (Bangle.isCompassOn()) g.drawString('C', x + 13, y + 3); - if (Bangle.isGPSOn()) g.drawString('G', x + 5, y + 12); - if (Bangle.isHRMOn()) g.drawString('H', x + 13, y + 12); + var again = false; + if (NRF.getSecurityStatus().connected) g.drawString('B', x + 5, y + 3), again = true; + if (Bangle.isCompassOn()) g.drawString('C', x + 13, y + 3), again = true; + if (Bangle.isGPSOn()) g.drawString('G', x + 5, y + 12), again = true; + if (Bangle.isHRMOn()) g.drawString('H', x + 13, y + 12), again = true; g.setColor(col(stat.sto)); g.drawRect(x + 2, y + 21, x + 2 + stat.sto * 18, y + 22); g.setColor(col(t)); g.drawRect(x + 1, y + 21 - t * 20, x + 2, y + 21); + // if there's nothing active, don't queue a redraw (rely on Bangle.on(...) below) + if (again) setTimeout(draw, drawTime()); }}; function col(p) { @@ -33,18 +37,13 @@ } var draw = WIDGETS.devst.draw.bind(WIDGETS.devst); - var iid = setInterval(draw, Bangle.isLocked() ? 6e4 : 2e3); - Bangle.on('lcdPower', (on) => { - if (on) { - draw(); - if (!iid) iid = setInterval(draw, Bangle.isLocked() ? 6e4 : 2e3); - } else if (iid) iid = clearInterval(iid); - }); - Bangle.on('lock', (on) => { - if (iid) { - clearInterval(iid); - iid = setInterval(draw, on ? 6e4 : 2e3); - } - }); + var drawTime = () => Bangle.isLocked() ? 6e4 : 2e3; + var throttledDraw = () => Date.now() - d > drawTime() && draw(); + + Bangle.on("HRM", throttledDraw); + Bangle.on("GPS", throttledDraw); + Bangle.on("mag", throttledDraw); + NRF.on("connect", throttledDraw); + draw(); })();