From edd1c0c7bb8bdd9bb09f802c657a4d4122b918ab Mon Sep 17 00:00:00 2001 From: marcocastignoli Date: Wed, 1 Apr 2020 14:16:06 +0200 Subject: [PATCH] Add timer app --- apps.json | 12 +++++++ apps/timer/app-icon.js | 1 + apps/timer/app.js | 73 ++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 86 insertions(+) create mode 100644 apps/timer/app-icon.js create mode 100644 apps/timer/app.js diff --git a/apps.json b/apps.json index aab3389a1..0a901ee92 100644 --- a/apps.json +++ b/apps.json @@ -939,5 +939,17 @@ "storage": [ {"name":"widtbat.wid.js","url":"widget.js"} ] + }, + { "id": "timer", + "name": "Timer", + "shortName":"Timer", + "icon": "app.png", + "version":"0.01", + "description": "BTN1 => +5min, BTN2 => +30sec, BTN3 => +5sec, TOUCH => pause,play, BTN1(double click) => reset", + "tags": "Tools", + "storage": [ + {"name":"timer.app.js","url":"app.js"}, + {"name":"timer.img","url":"app-icon.js","evaluate":true} + ] } ] diff --git a/apps/timer/app-icon.js b/apps/timer/app-icon.js new file mode 100644 index 000000000..7388566a1 --- /dev/null +++ b/apps/timer/app-icon.js @@ -0,0 +1 @@ +var img = require("heatshrink").decompress(atob("mEwwglihGIxAWUwADBDCYTDhAXSFwQEGIxowBL4QXTx///AXWF6qnBwCTDO6EIF4KnEDwLWO/4QFx7FNdwQQEGwP4GBYUB/4QBDIYXMIgQAEDIIKCVwItJFggFEx4uKCAQUBX4QDC/B2KhASCAQP/AQQcDLpQlCLgQsCCoIGBC5IkCFon/xwxCDgIXJFwYxFHIR3ILwIkBCIeIFwQHBHgReIJAgCBOoP+MYZIHhB1EDgIRBA4ZIJC4LrEMYvoAgQXJxHvI4gtDC5OIF4QSDbYY3EC5QAKG4QXNPwg0BSBAJCIQhLCDwgXKIAwXUMo4XPFwrwKC4YOCUooVCR453DIxIXJU4IqDxwXJa45FDdgxnEC40IC4TbINQYXIRQZwDAAXv/xuBCwoXBVAgXDA4wXGSARcEC4o7BRwx4DOon+C4YiCLwxIDDAobDEYJGIGAYYBxDAD9AJDC5IwCDIYACJARGIDAapDaooWLDAZhEAoIWNMggADCqAAPA")) \ No newline at end of file diff --git a/apps/timer/app.js b/apps/timer/app.js new file mode 100644 index 000000000..82a78ae10 --- /dev/null +++ b/apps/timer/app.js @@ -0,0 +1,73 @@ +function msToTime(duration) { + var milliseconds = parseInt((duration % 1000) / 100), + seconds = Math.floor((duration / 1000) % 60), + minutes = Math.floor((duration / (1000 * 60)) % 60), + hours = Math.floor((duration / (1000 * 60 * 60)) % 24); + + hours = (hours < 10) ? "0" + hours : hours; + minutes = (minutes < 10) ? "0" + minutes : minutes; + seconds = (seconds < 10) ? "0" + seconds : seconds; + + return hours + ":" + minutes + ":" + seconds; + } + + + var counter = 0; + var started = false; + + function drawInterface() { + g.clear(); + g.setFontAlign(0,0); + g.setFont("6x8",2); + g.drawString("+5m", g.getWidth()-30, 30); + g.drawString("+30s", g.getWidth()-30, g.getHeight()/2); + g.drawString("+5s", g.getWidth()-30, g.getHeight() - 30); + + g.setFontAlign(0,0); // center font + g.setFont("6x8",3); + // draw the current counter value + + g.drawString(msToTime(counter*1000), g.getWidth()/2 - 30, g.getHeight()/2); + // optional - this keeps the watch LCD lit up + g.flip(); + } + + function countDown() { + if(counter > 0) { + if (started) { + counter--; + drawInterface(); + } + } else { + if (started) { + Bangle.buzz(); + } + } + } + + setWatch((p) => { + if (p.time - p.lastTime < 0.1) { + counter = 0; + started = false; + } else { + counter+=60*5; + } + drawInterface(); + }, BTN1, {repeat:true}); + + setWatch(() => { + counter+=30; + drawInterface(); + }, BTN2, {repeat:true}); + + setWatch(() => { + counter+=5; + drawInterface(); + }, BTN3, {repeat:true}); + + Bangle.on('touch', function(button) { + started = !started; + }); + + var interval = setInterval(countDown, 1000); + drawInterface(); \ No newline at end of file