From ab0c299a2743edbcc0433ff3551adce49f2c2dad Mon Sep 17 00:00:00 2001 From: David Peer Date: Fri, 25 Mar 2022 17:22:39 +0100 Subject: [PATCH] Add black and white clock --- apps/bwclk/ChangeLog | 1 + apps/bwclk/README.md | 7 +++ apps/bwclk/app-icon.js | 1 + apps/bwclk/app.js | 97 ++++++++++++++++++++++++++++++++++++++ apps/bwclk/app.png | Bin 0 -> 4238 bytes apps/bwclk/metadata.json | 17 +++++++ apps/bwclk/screenshot.png | Bin 0 -> 6093 bytes 7 files changed, 123 insertions(+) create mode 100644 apps/bwclk/ChangeLog create mode 100644 apps/bwclk/README.md create mode 100644 apps/bwclk/app-icon.js create mode 100644 apps/bwclk/app.js create mode 100644 apps/bwclk/app.png create mode 100644 apps/bwclk/metadata.json create mode 100644 apps/bwclk/screenshot.png diff --git a/apps/bwclk/ChangeLog b/apps/bwclk/ChangeLog new file mode 100644 index 000000000..2286a7f70 --- /dev/null +++ b/apps/bwclk/ChangeLog @@ -0,0 +1 @@ +0.01: New App! \ No newline at end of file diff --git a/apps/bwclk/README.md b/apps/bwclk/README.md new file mode 100644 index 000000000..49ee7f593 --- /dev/null +++ b/apps/bwclk/README.md @@ -0,0 +1,7 @@ +# Black & White clock + +![](screenshot.png) + + +## Creator +- [David Peer](https://github.com/peerdavid) diff --git a/apps/bwclk/app-icon.js b/apps/bwclk/app-icon.js new file mode 100644 index 000000000..28f75c4e6 --- /dev/null +++ b/apps/bwclk/app-icon.js @@ -0,0 +1 @@ +require("heatshrink").decompress(atob("mEwgc8+fAgEgwAMDvPnz99BYdl2weHtu27ft2AGBiEcuEAhAPDg4jGgECIRMN23fthUNgP374vBAB3gAgc/gAXNjlx4EDxwJEpAjG/6IBjkBL4UAjVgBAJuCgPHBQMFEIkkyQjFhwEClgXBEYNBwkQJoibCBwNFBAUCEAVAQZAjC/8euPHDon//hKB//xEYMP//jBYP/+ARDNYM///+EYIgBj1B/8fCIUhEYQRB//FUIM/EZU4EYMkEYP/8VhEYUH/gRBWAUfI4MD+AjBoAsBwEH8EB/EDwE4HwYjCuEHWAOHgExEYKbBCIZNB8fAEYQHByE/EwPABAY+BgRHDBANyJQXHNwIjD8CSBj/+BwMSTwOOBYK2D/4CCNYZQB/iJBQwYjCCIcAgeBSoOAWYQjEVoIRCNAIjKAQKJBgAFC8ZoCWwJbDABMHGQPAAoMQB5EDx/4A4gqBZwIGCWwIABuBWC4EBZwPgv/AcwS/EAAcIU4IRBVQIRKEwIjBv0ARIUDCJIjD//x/ARK/5HC/+BCJkcI45uDgECUgQjCWAM4WwUBWYanEAA8cTARWBEYUC5RAHw1YgEOFQXADQPHIIkAhgICuARBh0A23blhHBagIKBsOGjNswhHDEYUUAoTUBhkxEYMwKwU503bvuwXILmCEYMYsumWYYjB85lDEYovBEYXm7fs25EBI4kYtOWNwIjD4+8NYsw4YjGz9/2hrEoOGjVBwE4NYdzNYSwBuEDEYcxaIUA8+atugGogjBiVgWAI")) diff --git a/apps/bwclk/app.js b/apps/bwclk/app.js new file mode 100644 index 000000000..709597a0b --- /dev/null +++ b/apps/bwclk/app.js @@ -0,0 +1,97 @@ +const locale = require('locale'); + + +// timeout used to update every minute +var W = g.getWidth(); +var H = g.getHeight(); +var drawTimeout; + +// schedule a draw for the next minute +function queueDraw() { + if (drawTimeout) clearTimeout(drawTimeout); + drawTimeout = setTimeout(function() { + drawTimeout = undefined; + draw(); + }, 60000 - (Date.now() % 60000)); +} + + + +function getSteps() { + try{ + if (WIDGETS.wpedom !== undefined) { + return WIDGETS.wpedom.getSteps(); + } else if (WIDGETS.activepedom !== undefined) { + return WIDGETS.activepedom.getSteps(); + } + } catch(ex) { + // In case we failed, we can only show 0 steps. + } + + return 0; +} + + +function draw() { + // Hide widgets + for (let wd of WIDGETS) {wd.draw=()=>{};wd.area="";} + + // Clear old watch face + var x = W/2; + var y = H/2-20; + g.reset().clearRect(0,0,W,W); + + // Draw background + g.setColor("#000"); + g.fillRect(0,0,W/2,H/2); + g.setColor("#fff"); + g.fillRect(W/2,H/2,W/2,H/2); + + // // Draw time + // var date = new Date(); + // var timeStr = locale.time(date,1); + // g.setFontAlign(0,0); + // g.setFontTime(); + // g.drawString(timeStr, x, y); + + // // Draw date + // y += 50; + // x = x - g.stringWidth(timeStr) / 2 + 5; + // g.setFontDate(); + // g.setFontAlign(-1,0); + // var dateStr = locale.dow(date, true).toUpperCase() + date.getDate(); + // var fc = Bangle.isLocked() ? "#0ff" :"#fff"; + // fc = E.getBattery() < 50 ? "#f00" : fc; + // g.drawString(dateStr, x, y); + + // queue draw in one minute + queueDraw(); +} + +Bangle.loadWidgets(); + +// Clear the screen once, at startup +g.setTheme({bg:"#000",fg:"#fff",dark:false}).clear(); +// draw immediately at first, queue update +draw(); +// Stop updates when LCD is off, restart when on +Bangle.on('lcdPower',on=>{ + if (on) { + draw(); // draw immediately, queue redraw + } else { // stop draw timer + if (drawTimeout) clearTimeout(drawTimeout); + drawTimeout = undefined; + } +}); + + +Bangle.on('lock', function(isLocked) { + print("LOCK"); + if (drawTimeout) clearTimeout(drawTimeout); + drawTimeout = undefined; + draw(); +}); + + +// Show launcher when middle button pressed +Bangle.setUI("clock"); diff --git a/apps/bwclk/app.png b/apps/bwclk/app.png new file mode 100644 index 0000000000000000000000000000000000000000..29875b1dceaa209aa7aaad86d60402290ee0f9cc GIT binary patch literal 4238 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 literal 0 HcmV?d00001