diff --git a/apps/contourclock/ChangeLog b/apps/contourclock/ChangeLog index d415a604d..387340d5b 100644 --- a/apps/contourclock/ChangeLog +++ b/apps/contourclock/ChangeLog @@ -7,3 +7,4 @@ 0.25: Fixed a bug that would let widgets change the color of the clock. 0.26: Time formatted to locale 0.27: Fixed the timing code, which sometimes did not update for one minute +0.28: More config options for cleaner look, enabled fast loading diff --git a/apps/contourclock/README.md b/apps/contourclock/README.md new file mode 100644 index 000000000..3341439da --- /dev/null +++ b/apps/contourclock/README.md @@ -0,0 +1,6 @@ +# New Features: +- Fast load! (only works if your launcher uses widgets) +- widgets, date and weekday are individually configurable +- you can hide widgets, date and weekday for a cleaner look when the watch is locked + +Contact me for bug reports or feature requests: ContourClock@gmx.de diff --git a/apps/contourclock/app.js b/apps/contourclock/app.js index d5c97edfa..8efa406c6 100644 --- a/apps/contourclock/app.js +++ b/apps/contourclock/app.js @@ -1,35 +1,64 @@ -var digits = []; -var drawTimeout; -var fontName=""; -var settings = require('Storage').readJSON("contourclock.json", true) || {}; -if (settings.fontIndex==undefined) { - settings.fontIndex=0; - require('Storage').writeJSON("myapp.json", settings); -} +{ + let digits = []; + let drawTimeout; + 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.date=true; require('Storage').writeJSON("myapp.json", settings); + } -function queueDraw() { - setTimeout(function() { + let queueDraw = function() { + if (drawTimeout) clearTimeout(drawTimeout); + drawTimeout = setTimeout(function() { + drawTimeout = undefined; + draw(); + queueDraw(); + }, 60000 - (Date.now() % 60000)); + }; + + let draw = function() { + var date = new Date(); + // Draw day of the week + 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()); + } + 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(); + } draw(); - queueDraw(); - }, 60000 - (Date.now() % 60000)); + }); + Bangle.setUI({mode:"clock", remove:function() { + if (drawTimeout) clearTimeout(drawTimeout); + if (settings.widgets && settings.hide) require("widget_utils").show(); + g.reset(); + g.clear(); + }}); + if (settings.widgets) { + Bangle.loadWidgets(); + if (settings.hide) require("widget_utils").swipeOn(); + else Bangle.drawWidgets(); + } + queueDraw(); } - -function draw() { - var date = new Date(); - // Draw day of the week - g.reset(); - g.setFont("Teletext10x18Ascii"); - g.clearRect(0,138,g.getWidth()-1,176); - g.setFontAlign(0,1).drawString(require("locale").dow(date).toUpperCase(),g.getWidth()/2,g.getHeight()-18); - // Draw Date - g.setFontAlign(0,1).drawString(require('locale').date(new Date(),1),g.getWidth()/2,g.getHeight()); - require('contourclock').drawClock(settings.fontIndex); -} - -require("FontTeletext10x18Ascii").add(Graphics); -Bangle.setUI("clock"); -g.clear(); -Bangle.loadWidgets(); -Bangle.drawWidgets(); -queueDraw(); -draw(); diff --git a/apps/contourclock/contourclock.settings.js b/apps/contourclock/contourclock.settings.js index a12538fc5..f2a75d9b5 100644 --- a/apps/contourclock/contourclock.settings.js +++ b/apps/contourclock/contourclock.settings.js @@ -1,43 +1,73 @@ (function(back) { - Bangle.removeAllListeners('drag'); Bangle.setUI(""); var settings = require('Storage').readJSON('contourclock.json', true) || {}; if (settings.fontIndex==undefined) { - settings.fontIndex=0; + settings.fontIndex=0; + settings.widgets=true; + settings.hide=false; + settings.weekday=true; + settings.date=true; + settings.hideWhenLocked=false; require('Storage').writeJSON("myapp.json", settings); } - savedIndex=settings.fontIndex; - saveListener = setWatch(function() { //save changes and return to settings menu - require('Storage').writeJSON('contourclock.json', settings); - Bangle.removeAllListeners('swipe'); - Bangle.removeAllListeners('lock'); - clearWatch(saveListener); - g.clear(); - back(); - }, BTN, { repeat:false, edge:'falling' }); - lockListener = Bangle.on('lock', function () { //discard changes and return to clock - settings.fontIndex=savedIndex; - require('Storage').writeJSON('contourclock.json', settings); - Bangle.removeAllListeners('swipe'); - Bangle.removeAllListeners('lock'); - clearWatch(saveListener); - g.clear(); - load(); - }); - swipeListener = Bangle.on('swipe', function (direction) { - var fontName = require('contourclock').drawClock(settings.fontIndex+direction); - if (fontName) { - settings.fontIndex+=direction; - g.clearRect(0,0,g.getWidth()-1,16); - g.setFont('6x8:2x2').setFontAlign(0,-1).drawString(fontName,g.getWidth()/2,0); - } else { - require('contourclock').drawClock(settings.fontIndex); - } - }); - g.reset(); - g.clear(); - g.setFont('6x8:2x2').setFontAlign(0,-1); - g.drawString(require('contourclock').drawClock(settings.fontIndex),g.getWidth()/2,0); - g.drawString('Swipe - change',g.getWidth()/2,g.getHeight()-36); - g.drawString('BTN - save',g.getWidth()/2,g.getHeight()-18); + function mainMenu() { + E.showMenu({ + "" : { "title" : "ContourClock" }, + "< Back" : () => back(), + 'Widgets': { + value: (settings.widgets !== undefined ? settings.widgets : true), + onchange : v => {settings.widgets=v; require('Storage').writeJSON('contourclock.json', settings);} + }, + 'hide Widgets': { + value: (settings.hide !== undefined ? settings.hide : false), + onchange : v => {settings.hide=v; require('Storage').writeJSON('contourclock.json', settings);} + }, + 'Weekday': { + value: (settings.weekday !== undefined ? settings.weekday : true), + onchange : v => {settings.weekday=v; require('Storage').writeJSON('contourclock.json', settings);} + }, + 'Date': { + value: (settings.date !== undefined ? settings.date : true), + onchange : v => {settings.date=v; require('Storage').writeJSON('contourclock.json', settings);} + }, + 'Hide when locked': { + value: (settings.hideWhenLocked !== undefined ? settings.hideWhenLocked : false), + onchange : v => {settings.hideWhenLocked=v; require('Storage').writeJSON('contourclock.json', settings);} + }, + 'set Font': () => fontMenu() + }); + } + function fontMenu() { + Bangle.setUI(""); + savedIndex=settings.fontIndex; + saveListener = setWatch(function() { //save changes and return to settings menu + require('Storage').writeJSON('contourclock.json', settings); + Bangle.removeAllListeners('swipe'); + Bangle.removeAllListeners('lock'); + mainMenu(); + }, BTN, { repeat:false, edge:'falling' }); + lockListener = Bangle.on('lock', function () { //discard changes and return to clock + settings.fontIndex=savedIndex; + require('Storage').writeJSON('contourclock.json', settings); + Bangle.removeAllListeners('swipe'); + Bangle.removeAllListeners('lock'); + mainMenu(); + }); + swipeListener = Bangle.on('swipe', function (direction) { + var fontName = require('contourclock').drawClock(settings.fontIndex+direction); + if (fontName) { + settings.fontIndex+=direction; + g.clearRect(0,g.getHeight()-36,g.getWidth()-1,g.getHeight()-36+16); + g.setFont('6x8:2x2').setFontAlign(0,-1).drawString(fontName,g.getWidth()/2,g.getHeight()-36); + } else { + require('contourclock').drawClock(settings.fontIndex); + } + }); + g.reset(); + g.clearRect(0,24,g.getWidth()-1,g.getHeight()-1); + g.setFont('6x8:2x2').setFontAlign(0,-1); + g.drawString(require('contourclock').drawClock(settings.fontIndex),g.getWidth()/2,g.getHeight()-36); + g.drawString('Button to save',g.getWidth()/2,g.getHeight()-18); + } + mainMenu(); }) diff --git a/apps/contourclock/metadata.json b/apps/contourclock/metadata.json index eb0dd39fb..6b2b51991 100644 --- a/apps/contourclock/metadata.json +++ b/apps/contourclock/metadata.json @@ -1,9 +1,10 @@ { "id": "contourclock", "name": "Contour Clock", "shortName" : "Contour Clock", - "version":"0.27", + "version":"0.28", "icon": "app.png", - "description": "A Minimalist clockface with large Digits. Now with more fonts!", + "readme": "README.md", + "description": "A Minimalist clockface with large Digits.", "screenshots" : [{"url":"cc-screenshot-1.png"},{"url":"cc-screenshot-2.png"}], "tags": "clock", "custom": "custom.html",