From 8c7369a423fe7a3fb660f3b2f045e94d73fb9c81 Mon Sep 17 00:00:00 2001 From: xxDUxx <96152564+xxDUxx@users.noreply.github.com> Date: Sun, 22 Jan 2023 02:12:19 +0100 Subject: [PATCH] Update app.js --- apps/contourclock/app.js | 95 ++++++++++++++++++++++++++-------------- 1 file changed, 61 insertions(+), 34 deletions(-) diff --git a/apps/contourclock/app.js b/apps/contourclock/app.js index b88c5817d..bdb115c62 100644 --- a/apps/contourclock/app.js +++ b/apps/contourclock/app.js @@ -1,14 +1,17 @@ { + const interval = 60000; let digits = []; let drawTimeout; + let extrasTimeout; let fontName=""; let settings = require('Storage').readJSON("contourclock.json", true) || {}; if (settings.fontIndex==undefined) { settings.fontIndex=0; settings.widgets=true; - settings.hide=false; settings.weekday=true; settings.hideWhenLocked=false; + settings.tapToShow=false; + settings.twistToShow=false; settings.date=true; require('Storage').writeJSON("contourclock.json", settings); } @@ -20,52 +23,76 @@ } require("Storage").erase("contourclock-install.json"); } + require("FontTeletext10x18Ascii").add(Graphics); + let queueDraw = function() { if (drawTimeout) clearTimeout(drawTimeout); - drawTimeout = setTimeout(function() { - drawTimeout = undefined; - draw(); - queueDraw(); - }, 60000 - (Date.now() % 60000)); + drawTimeout = setTimeout(draw, interval - (Date.now() % interval)); + }; + let drawExtras = function() { //draw date, day of the week and widgets + let date = new Date(); + g.setFont("Teletext10x18Ascii"); + if (settings.weekday) + g.setFontAlign(0,1).drawString(require("locale").dow(date).toUpperCase(),g.getWidth()/2,g.getHeight()-18); + // Draw Date + if (settings.date) + g.setFontAlign(0,1).drawString(require('locale').date(date,1),g.getWidth()/2,g.getHeight()); + require("widget_utils").show(); + }; + let hideExtras = function() { + g.clearRect(0,138,g.getWidth()-1,176); + require("widget_utils").hide(); }; let draw = function() { - var date = new Date(); - // Draw day of the week + //drawTimeout = undefined; + let date = new Date(); + print ("drawing time at:" +date.getHours()+":"+date.getMinutes()+":"+date.getSeconds()); g.reset(); - if ((!settings.hideWhenLocked) || (!Bangle.isLocked())) { - // Draw day of the week - g.setFont("Teletext10x18Ascii"); - g.clearRect(0,138,g.getWidth()-1,176); - if (settings.weekday) g.setFontAlign(0,1).drawString(require("locale").dow(date).toUpperCase(),g.getWidth()/2,g.getHeight()-18); - // Draw Date - if (settings.date) g.setFontAlign(0,1).drawString(require('locale').date(new Date(),1),g.getWidth()/2,g.getHeight()); + if ((!settings.hideWhenLocked) || (!Bangle.isLocked())) drawExtras(); + else require("widget_utils").hide(); + require('contourclock').drawClock(settings.fontIndex); + if (drawTimeout) clearTimeout(drawTimeout); + drawTimeout = setTimeout(draw, interval - (Date.now() % interval)); + }; + + let onLock = locked => { + if (!locked) { + require("widget_utils").show(); + drawExtras(); } else { require("widget_utils").hide(); + hideExtras(); } - require('contourclock').drawClock(settings.fontIndex); }; - require("FontTeletext10x18Ascii").add(Graphics); - g.clear(); - draw(); - if (settings.hideWhenLocked) Bangle.on('lock', function (locked) { - if (!locked) require("widget_utils").show(); - else { - g.clear(); - if (settings.hide) require("widget_utils").swipeOn(); - else require("widget_utils").hide(); + let onTap = d => { + if (d.double) { + drawExtras(); + if (extrasTimeout) clearTimeout(extrasTimeout); + extrasTimeout = setTimeout(hideExtras, 5000); } - draw(); - }); + }; + let onTwist = () => { + drawExtras(); + if (extrasTimeout) clearTimeout(extrasTimeout); + extrasTimeout = setTimeout(hideExtras, 5000); + }; + if (settings.hideWhenLocked) { + Bangle.on('lock', onLock); + if (settings.tapToShow) Bangle.on('tap', onTap); + if (settings.twistToShow) Bangle.on('twist', onTwist); + } Bangle.setUI({mode:"clock", remove:function() { + if (onLock) Bangle.removeListener('lock',onLock); + if (onTap) Bangle.removeListener('tap', onTap); + if (onTwist) Bangle.removeListener('twist',onTwist); if (drawTimeout) clearTimeout(drawTimeout); - if (settings.widgets && settings.hide) require("widget_utils").show(); + if (extrasTimeout) clearTimeout(extrasTimeout); + if (settings.hideWhenLocked) require("widget_utils").show(); g.reset(); g.clear(); }}); - if (settings.widgets) { - Bangle.loadWidgets(); - if (settings.hide) require("widget_utils").swipeOn(); - else Bangle.drawWidgets(); - } - queueDraw(); + g.clear(); + Bangle.loadWidgets(); + Bangle.drawWidgets(); + draw(); }