diff --git a/apps.json b/apps.json index 8b4e86d52..ee3e164b1 100644 --- a/apps.json +++ b/apps.json @@ -5009,7 +5009,7 @@ { "id": "circlesclock", "name": "Circles clock", "shortName":"Circles clock", - "version":"0.01", + "version":"0.02", "description": "A clock with circles for different data at the bottom in a probably familiar style", "icon": "app.png", "dependencies": {"widpedom":"app"}, diff --git a/apps/circlesclock/ChangeLog b/apps/circlesclock/ChangeLog new file mode 100644 index 000000000..fa2139fff --- /dev/null +++ b/apps/circlesclock/ChangeLog @@ -0,0 +1,2 @@ +0.01: New clock +0.02: Fix icon & add battery warn functionality diff --git a/apps/circlesclock/Changelog b/apps/circlesclock/Changelog deleted file mode 100644 index af119ab59..000000000 --- a/apps/circlesclock/Changelog +++ /dev/null @@ -1 +0,0 @@ -0.01: New clock diff --git a/apps/circlesclock/README.md b/apps/circlesclock/README.md index 87edd5981..27c0566d3 100644 --- a/apps/circlesclock/README.md +++ b/apps/circlesclock/README.md @@ -5,7 +5,7 @@ A clock with circles for different data at the bottom in a probably familiar sty It shows besides time, date and day of week the following information: * Steps (requires [pedometer widget](https://banglejs.com/apps/#pedometer)) * Heart rate (when screen is on and unlocked) - * Battery + * Battery (including charging and battery low) ## Screenshot @@ -14,6 +14,8 @@ It shows besides time, date and day of week the following information: ## TODO * Show weather information - ## Creator Marco ([myxor](https://github.com/myxor)) + +## Icons +Icons taken from [materialdesignicons](https://materialdesignicons.com) under Apache License 2.0 diff --git a/apps/circlesclock/app-icon.js b/apps/circlesclock/app-icon.js index ad727251a..a5a7fdfed 100644 --- a/apps/circlesclock/app-icon.js +++ b/apps/circlesclock/app-icon.js @@ -1 +1 @@ - require("heatshrink").decompress(atob("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")) + require("heatshrink").decompress(atob("mEwwcCIf4ALv///gFCv0Agf+CJP/wAODAwPAEpAjCCIX8h4RMj/+g/8gP4CA4LBDoP/GpkH8EP4/8LIIRMAQIOCCJU/CgQOBEwMPI5ARCR4YRJgP/gB3CI5Z0CCIiABfHRfEj+BAoN+n4FBLIkP/8chwRBx5cC//8v4REhytDgYRCv//8fxEYwRFgfxA4I1FRgI1D+JHE/7FINZzCBAAc4CRU4/kB44FCjgRKLQRlBPQ4RHgYCB/jpBABB6BPoKzBCJYAGuD/vAB1JkgLJm3bAgUCpMnwDdCPwIFChu27dgAoMSCIP+FAQRB+AFBtoRBtgFByQCBRIIoBAocDtonBAQWQdgXAgVIAocDEAUNwEEyEHBYUSoE//gRCsI7BxvACIILDCIcBCIYFCCJ3/wIRCIIYRBI4h6CAoJrDLJYRDDwJ9LAoKhBoMDUIcEgFwUIQREgUBaAcIkhPCAAQzBAAUBdIhhDAAMGCIkAkAFEdAQAFA==")) diff --git a/apps/circlesclock/app.js b/apps/circlesclock/app.js index 8474b7f4e..7607fa71f 100644 --- a/apps/circlesclock/app.js +++ b/apps/circlesclock/app.js @@ -1,9 +1,11 @@ const locale = require("locale"); const heatshrink = require("heatshrink"); -var shoesIcon = heatshrink.decompress(atob("h0OwYJGgmAAgUBkgECgVJB4cSoAUDyEBkARDpADBhMAyQRBgVAkgmDhIUDAAuQAgY1DAAYA=")); -var heartIcon = heatshrink.decompress(atob("h0OwYOLkmQhMkgACByVJgESpIFBpEEBAIFBCgIFCCgsABwcAgQOCAAMSpAwDyBNM")); -var powerIcon = heatshrink.decompress(atob("h0OwYQNsAED7AEDmwEDtu2AgUbtuABwXbBIUN23AAoYOCgEDFIgODABI")); +const shoesIcon = heatshrink.decompress(atob("h0OwYJGgmAAgUBkgECgVJB4cSoAUDyEBkARDpADBhMAyQRBgVAkgmDhIUDAAuQAgY1DAAYA=")); +const heartIcon = heatshrink.decompress(atob("h0OwYOLkmQhMkgACByVJgESpIFBpEEBAIFBCgIFCCgsABwcAgQOCAAMSpAwDyBNM")); +const powerIcon = heatshrink.decompress(atob("h0OwYQNsAED7AEDmwEDtu2AgUbtuABwXbBIUN23AAoYOCgEDFIgODABI")); +const powerIconGreen = heatshrink.decompress(atob("h0OwYQNkAEDpAEDiQEDkmSAgUJkmABwVJBIUEyVAAoYOCgEBFIgODABI")); +const powerIconRed = heatshrink.decompress(atob("h0OwYQNoAEDyAEDkgEDpIFDiVJBweSAgUJkmAAoYZDgQpEBwYAJA")); const SETTINGS_FILE = "circlesclock.json"; let settings; @@ -11,13 +13,16 @@ let settings; function loadSettings() { settings = require("Storage").readJSON(SETTINGS_FILE, 1) || { 'maxHR': 200, - 'stepGoal': 10000 + 'stepGoal': 10000, + 'batteryWarn': 30 }; } const colorFg = '#fff'; const colorBg = '#000'; const colorGrey = '#808080'; +const colorRed = '#ff0000'; +const colorGreen = '#00ff00'; let hrtValue; @@ -89,13 +94,12 @@ function drawSteps() { } function drawHeartRate() { - const red = '#ff0000'; g.setColor(colorGrey); g.fillCircle(w2, h3, radiusOuter); if (hrtValue != undefined) { const percent = hrtValue / settings.maxHR; - drawGauge(w2, h3, percent, red); + drawGauge(w2, h3, percent, colorRed); } g.setColor(colorBg); @@ -106,7 +110,7 @@ function drawHeartRate() { g.setFont("Vector:12"); g.setFontAlign(0, 0); g.setColor(colorFg); - g.drawString(hrtValue != undefined ? hrtValue : 0, w2, h3); + g.drawString(hrtValue != undefined ? hrtValue : "-", w2, h3); g.drawImage(heartIcon, w2 - 6, h3 + radiusOuter - 6); } @@ -129,10 +133,23 @@ function drawBattery() { g.setFont("Vector:12"); g.setFontAlign(0, 0); - g.setColor(colorFg); + + let icon = powerIcon; + let color = colorFg; + if (Bangle.isCharging()) { + color = colorGreen; + icon = powerIconGreen; + } + else { + if (settings.batteryWarn != undefined && battery <= settings.batteryWarn) { + color = colorRed; + icon = powerIconRed; + } + } + g.setColor(color); g.drawString(battery + '%', w3, h3); - g.drawImage(powerIcon, w3 - 6, h3 + radiusOuter - 6); + g.drawImage(icon, w3 - 6, h3 + radiusOuter - 6); } function radians(a) { diff --git a/apps/circlesclock/app.png b/apps/circlesclock/app.png index 94ff885fa..493bfa567 100644 Binary files a/apps/circlesclock/app.png and b/apps/circlesclock/app.png differ diff --git a/apps/circlesclock/settings.js b/apps/circlesclock/settings.js index 2de278b47..ffda51538 100644 --- a/apps/circlesclock/settings.js +++ b/apps/circlesclock/settings.js @@ -28,6 +28,16 @@ }, onchange: x => save('stepGoal', x), }, + 'battery warn lvl': { + value: "batteryWarn" in settings ? settings.batteryWarn : 30, + min: 10, + max : 100, + step: 10, + format: x => { + return x + '%'; + }, + onchange: x => save('batteryWarn', x), + }, '< Back': back, }); });