From 4d933ed959cd9cf2965879991cd07f2636eacb43 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thomas=20ICH=C3=89?= <4037271+peeweek@users.noreply.github.com> Date: Fri, 20 Aug 2021 15:49:13 +0200 Subject: [PATCH 001/392] Added Settings for Color scheme --- apps.json | 3 +- apps/hcclock/ChangeLog | 2 +- apps/hcclock/hcclock.app.js | 47 +++++++++++++++++++++++++++----- apps/hcclock/hcclock.settings.js | 32 ++++++++++++++++++++++ core | 2 +- 5 files changed, 76 insertions(+), 10 deletions(-) create mode 100644 apps/hcclock/hcclock.settings.js diff --git a/apps.json b/apps.json index 2b28509cf..a9a6d736d 100644 --- a/apps.json +++ b/apps.json @@ -3390,13 +3390,14 @@ { "id": "hcclock", "name": "Hi-Contrast Clock", "icon": "hcclock-icon.png", - "version":"0.01", + "version":"0.02", "description": "Hi-Contrast Clock : A simple yet very bold clock that aims to be readable in high luninosity environments. Uses big 10x5 pixel digits. Use BTN 1 to switch background and foreground colors.", "tags": "clock", "type":"clock", "allow_emulator":true, "storage": [ {"name":"hcclock.app.js","url":"hcclock.app.js"}, + {"name":"hcclock.settings.js","url":"hcclock.settings.js"}, {"name":"hcclock.img","url":"hcclock-icon.js","evaluate":true} ] }, diff --git a/apps/hcclock/ChangeLog b/apps/hcclock/ChangeLog index 0ca30d066..343be7f07 100644 --- a/apps/hcclock/ChangeLog +++ b/apps/hcclock/ChangeLog @@ -1,2 +1,2 @@ 0.01: base code - +0.02: added settings for color schemes \ No newline at end of file diff --git a/apps/hcclock/hcclock.app.js b/apps/hcclock/hcclock.app.js index 98abbc6f3..4664dd763 100644 --- a/apps/hcclock/hcclock.app.js +++ b/apps/hcclock/hcclock.app.js @@ -174,19 +174,52 @@ function fmtDate(day,month,year,hour) let ap = "(AM)"; if(hour == 0 || hour > 12) ap = "(PM)"; - return months[month] + " " + day + " " + year + " "+ ap; + return months[month] + " " + day + " " + year + " "+ ap; } else return months[month] + ". " + day + " " + year; } -// Handles Flipping colors, then refreshes the UI + +////////////////////////////////////////// +// +// HANDLE COLORS + SETTINGS +// + +function getColorScheme() +{ + let settings = require('Storage').readJSON("hcclock.json", true) || {}; + if (!("scheme" in settings)) { + settings.scheme = 0; + } + return settings.scheme; +} + +function setColorScheme(value) +{ + let settings = require('Storage').readJSON("hcclock.json", true) || {}; + settings.scheme = value; + require('Storage').writeJSON('hcclock.json', settings); + + if(value == 0) // White + { + bg = 255; + fg = 0; + } + else // Black + { + bg = 0; + fg = 255; + } + redraw(); +} + function flipColors() { - let t = bg; - bg = fg; - fg = t; - redraw(); + if(getColorScheme() == 0) + setColorScheme(1); + else + setColorScheme(0); } ////////////////////////////////////////// @@ -197,7 +230,7 @@ function flipColors() // Initialize g.clear(); Bangle.loadWidgets(); -redraw(); +setColorScheme(getColorScheme()); // Define Refresh Interval setInterval(updateTime, interval); diff --git a/apps/hcclock/hcclock.settings.js b/apps/hcclock/hcclock.settings.js new file mode 100644 index 000000000..34d6d191a --- /dev/null +++ b/apps/hcclock/hcclock.settings.js @@ -0,0 +1,32 @@ +(function(back) { + + function getColorScheme() + { + let settings = require('Storage').readJSON("hcclock.json", true) || {}; + if (!("scheme" in settings)) { + settings.scheme = 0; + } + return settings.scheme; + } + function setColorScheme(value) + { + let settings = require('Storage').readJSON("hcclock.json", true) || {}; + settings.scheme = value? 1 : 0; + require('Storage').writeJSON('hcclock.json', settings); + } + function setIcon(visible) { + updateSetting('showIcon', visible); + + } + var mainmenu = { + "" : { "title" : "Hi-Contrast Clock" }, + "Color Scheme" : { + value: getColorScheme, + format: v => v == 0?"White":"Black", + onchange: setColorScheme + }, + "< Back" : back, + }; + E.showMenu(mainmenu); + }) + \ No newline at end of file diff --git a/core b/core index 27f9a7125..8d9a012d6 160000 --- a/core +++ b/core @@ -1 +1 @@ -Subproject commit 27f9a7125146a38c4357d679ec783f6e98a983c6 +Subproject commit 8d9a012d62d40aae1b2304d0149440fb3c022393 From 183a36f5acac51c184d002e838a4642179414680 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thomas=20ICH=C3=89?= <4037271+peeweek@users.noreply.github.com> Date: Fri, 20 Aug 2021 15:54:32 +0200 Subject: [PATCH 002/392] Added Cycling for Values in Color Schemes --- apps/hcclock/hcclock.settings.js | 1 + 1 file changed, 1 insertion(+) diff --git a/apps/hcclock/hcclock.settings.js b/apps/hcclock/hcclock.settings.js index 34d6d191a..92d5f47e5 100644 --- a/apps/hcclock/hcclock.settings.js +++ b/apps/hcclock/hcclock.settings.js @@ -10,6 +10,7 @@ } function setColorScheme(value) { + value = value + 1 % 2; let settings = require('Storage').readJSON("hcclock.json", true) || {}; settings.scheme = value? 1 : 0; require('Storage').writeJSON('hcclock.json', settings); From dead11287102539a921d1339c227796c06bf5fe6 Mon Sep 17 00:00:00 2001 From: Richard de Boer Date: Sun, 3 Oct 2021 20:40:27 +0200 Subject: [PATCH 003/392] settings: customize theme --- apps.json | 2 +- apps/setting/ChangeLog | 1 + apps/setting/README.md | 1 + apps/setting/settings.js | 87 ++++++++++++++++++++++++++++++++-------- 4 files changed, 74 insertions(+), 17 deletions(-) diff --git a/apps.json b/apps.json index 11b1ea146..abd65cbc5 100644 --- a/apps.json +++ b/apps.json @@ -185,7 +185,7 @@ { "id": "setting", "name": "Settings", "icon": "settings.png", - "version":"0.28", + "version":"0.29", "description": "A menu for setting up Bangle.js", "tags": "tool,system,b2", "readme": "README.md", diff --git a/apps/setting/ChangeLog b/apps/setting/ChangeLog index 5a96451f2..5dcf6b477 100644 --- a/apps/setting/ChangeLog +++ b/apps/setting/ChangeLog @@ -31,3 +31,4 @@ 0.26: Use Bangle.softOff if available as this keeps the time 0.27: Add Theme menu 0.28: Update Quiet Mode widget (if present) +0.29: Add Customize to Theme menu diff --git a/apps/setting/README.md b/apps/setting/README.md index f81f3fb05..1875fc3b0 100644 --- a/apps/setting/README.md +++ b/apps/setting/README.md @@ -15,6 +15,7 @@ This is Bangle.js's settings menu * **NOTE:** on some platforms enabling HID can cause you problems when trying to connect to Bangle.js to upload apps. * **Set Time** Configure the current time - Note that this can be done much more easily by choosing 'Set Time' from the App Loader * **LCD** Configure settings about the screen. How long it stays on, how bright it is, and when it turns on - see below. +* **Theme** Adjust the colour scheme * **Reset Settings** Reset the settings to defaults * **Turn Off** Turn Bangle.js off diff --git a/apps/setting/settings.js b/apps/setting/settings.js index 1b1cc5478..656164e53 100644 --- a/apps/setting/settings.js +++ b/apps/setting/settings.js @@ -163,23 +163,25 @@ function showBLEMenu() { }); } +let m; +function updT(th) { + g.theme = th; + settings.theme = th; + updateSettings(); + delete g.reset; + g._reset = g.reset; + g.reset = function(n) { return g._reset().setColor(th.fg).setBgColor(th.bg); }; + g.clear = function(n) { if (n) g.reset(); return g.clearRect(0,0,g.getWidth(),g.getHeight()); }; + g.clear(1); + Bangle.drawWidgets(); + m.draw(); +} function showThemeMenu() { function cl(x) { return g.setColor(x).getColor(); } - function upd(th) { - g.theme = th; - settings.theme = th; - updateSettings(); - delete g.reset; - g._reset = g.reset; - g.reset = function(n) { return g._reset().setColor(th.fg).setBgColor(th.bg); }; - g.clear = function(n) { if (n) g.reset(); return g.clearRect(0,0,g.getWidth(),g.getHeight()); }; - g.clear(1); - Bangle.drawWidgets(); - m.draw(); - } - var m = E.showMenu({ + m = E.showMenu({ + '':{title:'Theme'}, 'Dark BW': ()=>{ - upd({ + updT({ fg:cl("#fff"), bg:cl("#000"), fg2:cl("#0ff"), bg2:cl("#000"), fgH:cl("#fff"), bgH:cl("#00f"), @@ -187,16 +189,69 @@ function showThemeMenu() { }); }, 'Light BW': ()=>{ - upd({ + updT({ fg:cl("#000"), bg:cl("#fff"), fg2:cl("#00f"), bg2:cl("#0ff"), fgH:cl("#000"), bgH:cl("#0ff"), dark:false }); }, - '< Back': ()=>showMainMenu() + 'Customize': ()=>showCustomThemeMenu(), + '< Back': ()=>{delete m;showMainMenu();}, }); } +function showCustomThemeMenu() { + function cv(x) { return g.setColor(x).getColor(); } + function setT(t, v) { + let th = g.theme; + th[t] = v; + if (t==="bg") { + th['dark'] = (v===cv("#000")); + } + updT(th); + } + const rgb = { + black: "#000", white: "#fff", + red: "#f00", green: "#0f0", blue: "#00f", + cyan: "#0ff", magenta: "#f0f", yellow: "#ff0", + }; + let colors = [], names = []; + for(const c in rgb) { + names.push(c); + colors.push(cv(rgb[c])); + } + function cn(v) { + const i = colors.indexOf(v); + return i!== -1 ? names[i] : v; // another color: just show value + } + let menu = {'':{title:'Customize Theme'}}; + const labels = { + fg: 'Foreground', bg: 'Background', + fg2: 'Foreground 2', bg2: 'Background 2', + fgH: 'Highlight FG', bgH: 'Highlight BG', + }; + ["fg", "bg", "fg2", "bg2", "fgH", "bgH"].forEach(t => { + menu[labels[t]] = { + value: colors.indexOf(g.theme[t]), + format: () => cn(g.theme[t]), + onchange: function(v) { + // wrap around + if (v>=colors.length) {v = 0;} + if (v<0) {v = colors.length-1;} + this.value = v; + const c = colors[v]; + // if we select the same fg and bg: set the other to the old color + // e.g. bg=black;fg=white, user selects fg=black -> bg changes to white automatically + // so users don't end up with a black-on-black menu + if (t === 'fg' && g.theme.bg === c) setT('bg', g.theme.fg); + if (t === 'bg' && g.theme.fg === c) setT('fg', g.theme.bg); + setT(t, c); + }, + }; + }); + menu["< Back"] = () => {delete m;showThemeMenu();}; + m = E.showMenu(menu); +} function showPasskeyMenu() { var menu = { From ad2baeb6519a2ae208b3b8d0cd4a2f5f1e78f2c4 Mon Sep 17 00:00:00 2001 From: Gordon Williams Date: Mon, 4 Oct 2021 16:30:37 +0100 Subject: [PATCH 004/392] work for bangle.js 1 too --- ...{build_bangle2_c.js => firmwaremaker_c.js} | 29 +++++++++++++++---- 1 file changed, 24 insertions(+), 5 deletions(-) rename bin/{build_bangle2_c.js => firmwaremaker_c.js} (86%) diff --git a/bin/build_bangle2_c.js b/bin/firmwaremaker_c.js similarity index 86% rename from bin/build_bangle2_c.js rename to bin/firmwaremaker_c.js index 5b4464691..2cb993d00 100755 --- a/bin/build_bangle2_c.js +++ b/bin/firmwaremaker_c.js @@ -11,16 +11,35 @@ var SETTINGS = { pretokenise : true }; +var DEVICE = process.argv[2]; + var path = require('path'); var ROOTDIR = path.join(__dirname, '..'); var APPDIR = ROOTDIR+'/apps'; var APPJSON = ROOTDIR+'/apps.json'; -var OUTFILE = path.join(ROOTDIR, '../Espruino/libs/banglejs/banglejs2_storage_default.c'); -var APPS = [ // IDs of apps to install - "boot","launchb2","s7clk","setting", - "about","alarm","widlock","widbat","widbt" -]; var MINIFY = true; +var OUTFILE, APPS; + +if (DEVICE=="BANGLEJS") { + var OUTFILE = path.join(ROOTDIR, '../Espruino/libs/banglejs/banglejs1_storage_default.c'); + var APPS = [ // IDs of apps to install + "boot","launch","mclock","setting", + "about","alarm","widbat","widbt","welcome" + ]; +} else if (DEVICE=="BANGLEJS2") { + var OUTFILE = path.join(ROOTDIR, '../Espruino/libs/banglejs/banglejs2_storage_default.c'); + var APPS = [ // IDs of apps to install + "boot","launchb2","s7clk","setting", + "about","alarm","widlock","widbat","widbt" + ]; +} else { + console.log("USAGE:"); + console.log(" bin/firmwaremaker_c.js BANGLEJS"); + console.log(" bin/firmwaremaker_c.js BANGLEJS2"); + process.exit(1); +} +console.log("Device = ",DEVICE); + var fs = require("fs"); global.Const = { From 202690de40057ee224eb3dcaedad57204f8db37c Mon Sep 17 00:00:00 2001 From: Ben Whittaker Date: Mon, 4 Oct 2021 15:48:43 -0400 Subject: [PATCH 005/392] Layout: Implement text wrapping --- modules/Layout.js | 39 ++++++++++++++++++++++++++++---- tests/Layout/tests/wrapping.bmp | Bin 0 -> 15562 bytes tests/Layout/tests/wrapping.js | 7 ++++++ 3 files changed, 42 insertions(+), 4 deletions(-) create mode 100644 tests/Layout/tests/wrapping.bmp create mode 100644 tests/Layout/tests/wrapping.js diff --git a/modules/Layout.js b/modules/Layout.js index 5ac0cab16..69f257b3b 100644 --- a/modules/Layout.js +++ b/modules/Layout.js @@ -36,6 +36,8 @@ layoutObject has: * A `id` field. If specified the object is added with this name to the returned `layout` object, so can be referenced as `layout.foo` * A `font` field, eg `6x8` or `30%` to use a percentage of screen height +* A `wrap` field to enable line wrapping. Requires some combination of `width`/`height` + and `fillx`/`filly` to be set. Not compatible with text rotation. * A `col` field, eg `#f00` for red * A `bgCol` field for background color (will automatically fill on render) * A `halign` field to set horizontal alignment. `-1`=left, `1`=right, `0`=center @@ -152,6 +154,24 @@ Layout.prototype.remove = function (l) { } }; +function wrappedLines(str, maxWidth) { + var lines = []; + for (var unwrappedLine of str.split("\n")) { + var words = unwrappedLine.split(" "); + var line = words.shift(); + for (var word of words) { + if (g.stringWidth(line + " " + word) > maxWidth) { + lines.push(line); + line = word; + } else { + line += " " + word; + } + } + lines.push(line); + } + return lines; +} + function prepareLazyRender(l, rectsToClear, drawList, rects, parentBg) { var bgCol = l.bgCol == null ? parentBg : g.toColor(l.bgCol); if (bgCol != parentBg || l.type == "txt" || l.type == "btn" || l.type == "img" || l.type == "custom") { @@ -187,7 +207,14 @@ Layout.prototype.render = function (l) { var cb = { "":function(){}, "txt":function(l){ - g.setFont(l.font,l.fsz).setFontAlign(0,0,l.r).drawString(l.label, l.x+(l.w>>1), l.y+(l.h>>1)); + if (l.wrap) { + g.setFont(l.font,l.fsz).setFontAlign(0,-1); + var lines = wrappedLines(l.label, l.w); + var y = l.y+((l.h-g.getFontHeight()*lines.length)>>1); + lines.forEach((line, i) => g.drawString(line, l.x+(l.w>>1), y+g.getFontHeight()*i)); + } else { + g.setFont(l.font,l.fsz).setFontAlign(0,0,l.r).drawString(l.label, l.x+(l.w>>1), l.y+(l.h>>1)); + } }, "btn":function(l){ var x = l.x+(0|l.pad); var y = l.y+(0|l.pad); @@ -305,9 +332,13 @@ Layout.prototype.update = function() { l.font = f[0]; l.fsz = f[1]; } - g.setFont(l.font,l.fsz); - l._h = g.getFontHeight(); - l._w = g.stringWidth(l.label); + if (l.wrap) { + l._h = l._w = 0; + } else { + g.setFont(l.font,l.fsz); + l._h = g.getFontHeight(); + l._w = g.stringWidth(l.label); + } }, "btn": function(l) { l._h = 24; l._w = 14 + l.label.length*8; diff --git a/tests/Layout/tests/wrapping.bmp b/tests/Layout/tests/wrapping.bmp new file mode 100644 index 0000000000000000000000000000000000000000..a0d80cc5be495c0a20ea7178ea36ff16e032372d GIT binary patch literal 15562 zcmeHN%Wd2+5M_WI1E>`jkb@EA6d*n1;9^{YOYkvAmk^|al(EM>7*O7OGo&ajwbF`G z5GUly)M!XP4j+d@ef;U`&yPXr3-S;6`;Onc@SeK+&-agyk1sDTcMnhD?pt^W;W?b2 z!jBMe{S?k2{0a}}@OnPKLT;%sa1;aG6u1lg^{1{sv8eAMBgZB6NL|m2bx@?klve+Q zYHT%wOSS!VfKVk0&<1s9N?a$U2_2G@ZWbF@V!7(5e@HxJwX_*72LZdhGZPF~_DUa7 z%>dRhHO}#fy1`yAV%w9KvND-q(SS(_3K9yAa(n9_xJN!D zy(wHgIdmsJK7^ijn^aFrkEbg_+oj_?OP1A`3ksa#L~7mxq7#<%v3folv@FXuA2`E|LhMvJ#d zx5giB3k*1VDJ6ls27k(Qg4*h>H%|36P9ZQza;q5QO0^!7H6!j|?~b?vkM?q#o7gMW z2757bA2@gr{+I`;{t{fe5Z^{xmM&bE72RkrL%I0_*{}=otGfuhnb_hF+%M6Ze|*EM z3&*98K}|ELGC)$1{A3q<5{YUb1rAOSmf|4F|R+C0q<}&wGXe*FxL8Eg+Vj zs}C~ddi>evXAR#JM6W6^_oXwk6%j5XyWY;w}ZX#m;DNcWEyzu1R!laq2#DPfIFgEkeI)1_j= zMX5dWtinaKWrHmKS{O>85NM71RLD)8np$K)oS1825m>N-h7eW%D3Ae@T8&kWtqXR? z0pL)UNcVPzD|@v%gv%^Tn{X8%ZOI9f_Lgvs4YSeuRCiD_7J!G$5Qs!k{52jhCJ5uX zWhm#Iljta+r6RnkxreaQZAnekmHbRl1FmL$8MoBwc!-mEi#CocMeWt|xXD^vi(wpz zY)!(@RSm91U0@|)H(aw9xYL=fv)5xz^;Qwb2_P51I!3y;TUr8` z(Ouvcm&ItRR&{cL3oj~p{)|~s%?JS52CjEeMDcGJ(BioLbrb+|T#T3zl~bZjGeb75 z*J#SBbI1RVb9?v1 Date: Tue, 5 Oct 2021 14:58:21 +0100 Subject: [PATCH 006/392] emulator --- apps.json | 2 ++ 1 file changed, 2 insertions(+) diff --git a/apps.json b/apps.json index 83690cf3e..a7577945e 100644 --- a/apps.json +++ b/apps.json @@ -3524,6 +3524,7 @@ "description": "A simple clock using the bold Anton font.", "tags":"clock,b2", "type":"clock", + "allow_emulator":true, "storage": [ {"name":"antonclk.app.js","url":"app.js"}, {"name":"antonclk.img","url":"app-icon.js","evaluate":true} @@ -3536,6 +3537,7 @@ "description": "A clock using a wave image by [Lillith May](https://www.instagram.com/_lilustrations_/). **Note: This requires a bugfix for #2049 on Bangle.js 1**", "tags":"clock,b2", "type":"clock", + "allow_emulator":true, "storage": [ {"name":"waveclk.app.js","url":"app.js"}, {"name":"waveclk.img","url":"app-icon.js","evaluate":true} From f37b744ed56c68a3a935b71a03ccdfb06fbab0b8 Mon Sep 17 00:00:00 2001 From: Ben Whittaker Date: Mon, 4 Oct 2021 18:45:57 -0400 Subject: [PATCH 007/392] Layout: defer initial update until first render --- modules/Layout.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/modules/Layout.js b/modules/Layout.js index 69f257b3b..087aff249 100644 --- a/modules/Layout.js +++ b/modules/Layout.js @@ -140,7 +140,7 @@ function Layout(layout, buttons, options) { if (l.c) l.c.forEach(idRecurser); } idRecurser(layout); - this.update(); + this.updateNeeded = true; } Layout.prototype.remove = function (l) { @@ -196,6 +196,7 @@ function prepareLazyRender(l, rectsToClear, drawList, rects, parentBg) { Layout.prototype.render = function (l) { if (!l) l = this._l; + if (this.updateNeeded) this.update(); function render(l) {"ram" g.reset(); @@ -309,6 +310,7 @@ Layout.prototype.debug = function(l,c) { if (l.c) l.c.forEach(n => this.debug(n,c)); }; Layout.prototype.update = function() { + delete this.updateNeeded; var l = this._l; var w = g.getWidth(); var y = this.yOffset; From e088b3be339733129d3eee9c60fa355700e4d1cb Mon Sep 17 00:00:00 2001 From: Ben Whittaker Date: Mon, 27 Sep 2021 13:53:23 -0400 Subject: [PATCH 008/392] weather: Use Layout library --- apps/weather/app.js | 169 +++++++++++++++++++++++--------------------- 1 file changed, 90 insertions(+), 79 deletions(-) diff --git a/apps/weather/app.js b/apps/weather/app.js index 9d64583e9..634a669b4 100644 --- a/apps/weather/app.js +++ b/apps/weather/app.js @@ -1,96 +1,107 @@ -(() => { - const weather = require('weather'); - let current = weather.get(); +const Layout = require('Layout'); +const locale = require('locale'); +const weather = require('weather'); +let current = weather.get(); - function formatDuration(millis) { - let pluralize = (n, w) => n + " " + w + (n == 1 ? "" : "s"); - if (millis < 60000) return "< 1 minute"; - if (millis < 3600000) return pluralize(Math.floor(millis/60000), "minute"); - if (millis < 86400000) return pluralize(Math.floor(millis/3600000), "hour"); - return pluralize(Math.floor(millis/86400000), "day"); - } +Bangle.loadWidgets(); - function draw() { - g.reset(); - g.clearRect(0, 24, 239, 239); +var layout = new Layout({type:"v", bgCol: g.theme.bg, c: [ + {filly: 1}, + {type: "h", filly: 0, c: [ + {type: "custom", width: g.getWidth()/2, height: g.getWidth()/2, valign: -1, txt: "unknown", id: "icon", + render: l => weather.drawIcon(l.txt, l.x+l.w/2, l.y+l.h/2, l.w/2-5)}, + {type: "v", c: [ + {type: "h", pad: 2, c: [ + {type: "txt", font: "18%", id: "temp", label: "000"}, + {type: "txt", font: "12%", valign: -1, id: "tempUnit", label: "°C"}, + ]}, + {filly: 1}, + {type: "txt", font: "6x8", pad: 2, halign: 1, label: "Humidity"}, + {type: "txt", font: "9%", pad: 2, halign: 1, id: "hum", label: "000%"}, + {filly: 1}, + {type: "txt", font: "6x8", pad: 2, halign: -1, label: "Wind"}, + {type: "h", halign: -1, c: [ + {type: "txt", font: "9%", pad: 2, id: "wind", label: "00"}, + {type: "txt", font: "6x8", pad: 2, valign: -1, id: "windUnit", label: "km/h"}, + ]}, + ]}, + ]}, + {filly: 1}, + {type: "txt", font: "9%", id: "cond", label: "Weather line 1"}, + {filly: 1}, + {type: "h", c: [ + {type: "txt", font: "6x8", pad: 2, id: "loc", label: "Toronto"}, + {fillx: 1}, + {type: "txt", font: "6x8", pad: 2, id: "updateTime", label: "15 minutes ago"}, + ]}, + {filly: 1}, +]}, null, {lazy: true}); - weather.drawIcon(current.txt, 65, 90, 55); - const locale = require("locale"); +function formatDuration(millis) { + let pluralize = (n, w) => n + " " + w + (n == 1 ? "" : "s"); + if (millis < 60000) return "< 1 minute"; + if (millis < 3600000) return pluralize(Math.floor(millis/60000), "minute"); + if (millis < 86400000) return pluralize(Math.floor(millis/3600000), "hour"); + return pluralize(Math.floor(millis/86400000), "day"); +} - g.reset(); +function draw() { + layout.icon.txt = current.txt; + const temp = locale.temp(current.temp-273.15).match(/^(\D*\d*)(.*)$/); + layout.temp.label = temp[1]; + layout.tempUnit.label = temp[2]; + layout.hum.label = current.hum+"%"; + const wind = locale.speed(current.wind).match(/^(\D*\d*)(.*)$/); + layout.wind.label = wind[1]; + layout.windUnit.label = wind[2] + " " + current.wrose.toUpperCase(); + // TODO: split long weather conditions across multiple lines + layout.cond.label = current.txt.charAt(0).toUpperCase()+current.txt.slice(1); + layout.loc.label = current.loc; + layout.updateTime.label = `${formatDuration(Date.now() - current.time)} ago`; + layout.update(); + layout.render(); +} - const temp = locale.temp(current.temp-273.15).match(/^(\D*\d*)(.*)$/); - let width = g.setFont("Vector", 40).stringWidth(temp[1]); - width += g.setFont("Vector", 20).stringWidth(temp[2]); - g.setFont("Vector", 40).setFontAlign(-1, -1, 0); - g.drawString(temp[1], 180-width/2, 70); - g.setFont("Vector", 20).setFontAlign(1, -1, 0); - g.drawString(temp[2], 180+width/2, 70); +function drawUpdateTime() { + if (!current || !current.time) return; + layout.updateTime.label = `${formatDuration(Date.now() - current.time)} ago`; + layout.update(); + layout.render(); +} - g.setFont("6x8", 1); - g.setFontAlign(-1, 0, 0); - g.drawString("Humidity", 135, 130); - g.setFontAlign(1, 0, 0); - g.drawString(current.hum+"%", 225, 130); - if ('wind' in current) { - g.setFontAlign(-1, 0, 0); - g.drawString("Wind", 135, 142); - g.setFontAlign(1, 0, 0); - g.drawString(locale.speed(current.wind)+' '+current.wrose.toUpperCase(), 225, 142); - } - - g.setFont("6x8", 2).setFontAlign(0, 0, 0); - g.drawString(current.loc, 120, 170); - - g.setFont("6x8", 1).setFontAlign(0, 0, 0); - g.drawString(current.txt.charAt(0).toUpperCase()+current.txt.slice(1), 120, 190); - - drawUpdateTime(); - - g.flip(); - } - - function drawUpdateTime() { - if (!current || !current.time) return; - let text = `Last update received ${formatDuration(Date.now() - current.time)} ago`; - g.reset(); - g.clearRect(0, 202, 239, 210); - g.setFont("6x8", 1).setFontAlign(0, 0, 0); - g.drawString(text, 120, 206); - } - - function update() { - current = weather.get(); - NRF.removeListener("connect", update); - if (current) { - draw(); - } else if (NRF.getSecurityStatus().connected) { +function update() { + current = weather.get(); + NRF.removeListener("connect", update); + if (current) { + draw(); + } else { + delete layout.rects; + if (NRF.getSecurityStatus().connected) { E.showMessage("Weather unknown\n\nIs Gadgetbridge\nweather reporting\nset up on your\nphone?"); } else { E.showMessage("Weather unknown\n\nGadgetbridge\nnot connected"); NRF.on("connect", update); } } +} - let interval = setInterval(drawUpdateTime, 60000); - Bangle.on('lcdPower', (on) => { - if (interval) { - clearInterval(interval); - interval = undefined; - } - if (on) { - drawUpdateTime(); - interval = setInterval(drawUpdateTime, 60000); - } - }); +let interval = setInterval(drawUpdateTime, 60000); +Bangle.on('lcdPower', (on) => { + if (interval) { + clearInterval(interval); + interval = undefined; + } + if (on) { + drawUpdateTime(); + interval = setInterval(drawUpdateTime, 60000); + } +}); - weather.on("update", update); +weather.on("update", update); - update(); +update(); - // Show launcher when middle button pressed - Bangle.setUI("clock"); +// Show launcher when middle button pressed +Bangle.setUI("clock"); - Bangle.loadWidgets(); - Bangle.drawWidgets(); -})() +Bangle.drawWidgets(); From 3cfd94314e8ad563ff247814f87085de2b1672a4 Mon Sep 17 00:00:00 2001 From: Ben Whittaker Date: Mon, 4 Oct 2021 16:19:11 -0400 Subject: [PATCH 009/392] weather: Use wrapping text for condition --- apps/weather/app.js | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/apps/weather/app.js b/apps/weather/app.js index 634a669b4..0f0512ba7 100644 --- a/apps/weather/app.js +++ b/apps/weather/app.js @@ -27,7 +27,7 @@ var layout = new Layout({type:"v", bgCol: g.theme.bg, c: [ ]}, ]}, {filly: 1}, - {type: "txt", font: "9%", id: "cond", label: "Weather line 1"}, + {type: "txt", font: "9%", wrap: true, height: g.getHeight()*0.18, fillx: 1, id: "cond", label: "Weather condition"}, {filly: 1}, {type: "h", c: [ {type: "txt", font: "6x8", pad: 2, id: "loc", label: "Toronto"}, @@ -54,7 +54,6 @@ function draw() { const wind = locale.speed(current.wind).match(/^(\D*\d*)(.*)$/); layout.wind.label = wind[1]; layout.windUnit.label = wind[2] + " " + current.wrose.toUpperCase(); - // TODO: split long weather conditions across multiple lines layout.cond.label = current.txt.charAt(0).toUpperCase()+current.txt.slice(1); layout.loc.label = current.loc; layout.updateTime.label = `${formatDuration(Date.now() - current.time)} ago`; From cdf95566bd6d6b544dc26f61e5e9708067692bcc Mon Sep 17 00:00:00 2001 From: Ben Whittaker Date: Tue, 5 Oct 2021 20:57:10 -0400 Subject: [PATCH 010/392] Layout: Add `forgetLazyState` method --- apps/weather/app.js | 2 +- modules/Layout.js | 5 +++++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/apps/weather/app.js b/apps/weather/app.js index 0f0512ba7..aab71f703 100644 --- a/apps/weather/app.js +++ b/apps/weather/app.js @@ -74,7 +74,7 @@ function update() { if (current) { draw(); } else { - delete layout.rects; + layout.forgetLazyState(); if (NRF.getSecurityStatus().connected) { E.showMessage("Weather unknown\n\nIs Gadgetbridge\nweather reporting\nset up on your\nphone?"); } else { diff --git a/modules/Layout.js b/modules/Layout.js index 087aff249..09e2a3d8c 100644 --- a/modules/Layout.js +++ b/modules/Layout.js @@ -73,6 +73,7 @@ Other functions: * `layout.update()` - update positions of everything if contents have changed * `layout.debug(obj)` - draw outlines for objects on screen * `layout.clear(obj)` - clear the given object (you can also just specify `bgCol` to clear before each render) +* `layout.forgetLazyState()` - if lazy rendering is enabled, makes the next call to `render()` perform a full re-render */ @@ -258,6 +259,10 @@ Layout.prototype.render = function (l) { } }; +Layout.prototype.forgetLazyState = function () { + this.rects = {}; +} + Layout.prototype.layout = function (l) { // l = current layout element // exw,exh = extra width/height available From a84588aca1c07ce2763585485bf2e62906be957a Mon Sep 17 00:00:00 2001 From: Ben Whittaker Date: Tue, 5 Oct 2021 21:04:21 -0400 Subject: [PATCH 011/392] weather: tweaks + changelog --- apps.json | 2 +- apps/weather/ChangeLog | 3 ++- apps/weather/app.js | 10 +++++----- 3 files changed, 8 insertions(+), 7 deletions(-) diff --git a/apps.json b/apps.json index a7577945e..f3b8badd5 100644 --- a/apps.json +++ b/apps.json @@ -585,7 +585,7 @@ { "id": "weather", "name": "Weather", "icon": "icon.png", - "version":"0.09", + "version":"0.10", "description": "Show Gadgetbridge weather report", "readme": "readme.md", "tags": "widget,outdoors", diff --git a/apps/weather/ChangeLog b/apps/weather/ChangeLog index 09e159045..8f997a83e 100644 --- a/apps/weather/ChangeLog +++ b/apps/weather/ChangeLog @@ -5,4 +5,5 @@ 0.06: Use setUI for launcher. 0.07: Add theme support and unknown icon. 0.08: Refactor and reduce widget ram usage. -0.09: Fix crash when weather.json is absent. \ No newline at end of file +0.09: Fix crash when weather.json is absent. +0.10: Use new Layout library \ No newline at end of file diff --git a/apps/weather/app.js b/apps/weather/app.js index aab71f703..6dba14143 100644 --- a/apps/weather/app.js +++ b/apps/weather/app.js @@ -10,7 +10,7 @@ var layout = new Layout({type:"v", bgCol: g.theme.bg, c: [ {type: "h", filly: 0, c: [ {type: "custom", width: g.getWidth()/2, height: g.getWidth()/2, valign: -1, txt: "unknown", id: "icon", render: l => weather.drawIcon(l.txt, l.x+l.w/2, l.y+l.h/2, l.w/2-5)}, - {type: "v", c: [ + {type: "v", fillx: 1, c: [ {type: "h", pad: 2, c: [ {type: "txt", font: "18%", id: "temp", label: "000"}, {type: "txt", font: "12%", valign: -1, id: "tempUnit", label: "°C"}, @@ -30,9 +30,9 @@ var layout = new Layout({type:"v", bgCol: g.theme.bg, c: [ {type: "txt", font: "9%", wrap: true, height: g.getHeight()*0.18, fillx: 1, id: "cond", label: "Weather condition"}, {filly: 1}, {type: "h", c: [ - {type: "txt", font: "6x8", pad: 2, id: "loc", label: "Toronto"}, + {type: "txt", font: "6x8", pad: 4, id: "loc", label: "Toronto"}, {fillx: 1}, - {type: "txt", font: "6x8", pad: 2, id: "updateTime", label: "15 minutes ago"}, + {type: "txt", font: "6x8", pad: 4, id: "updateTime", label: "15 minutes ago"}, ]}, {filly: 1}, ]}, null, {lazy: true}); @@ -76,9 +76,9 @@ function update() { } else { layout.forgetLazyState(); if (NRF.getSecurityStatus().connected) { - E.showMessage("Weather unknown\n\nIs Gadgetbridge\nweather reporting\nset up on your\nphone?"); + E.showMessage("Weather\nunknown\n\nIs Gadgetbridge\nweather\nreporting set\nup on your\nphone?"); } else { - E.showMessage("Weather unknown\n\nGadgetbridge\nnot connected"); + E.showMessage("Weather\nunknown\n\nGadgetbridge\nnot connected"); NRF.on("connect", update); } } From f78c9b7c22964d05f0c8a5dcc58ef7ae66313e7e Mon Sep 17 00:00:00 2001 From: Gordon Williams Date: Wed, 6 Oct 2021 09:45:12 +0100 Subject: [PATCH 012/392] settings 0.29: Move '< Back' to the top of menus --- apps.json | 2 +- apps/setting/ChangeLog | 1 + apps/setting/settings.js | 14 +++++++------- 3 files changed, 9 insertions(+), 8 deletions(-) diff --git a/apps.json b/apps.json index a7577945e..cb77a7290 100644 --- a/apps.json +++ b/apps.json @@ -185,7 +185,7 @@ { "id": "setting", "name": "Settings", "icon": "settings.png", - "version":"0.28", + "version":"0.29", "description": "A menu for setting up Bangle.js", "tags": "tool,system,b2", "readme": "README.md", diff --git a/apps/setting/ChangeLog b/apps/setting/ChangeLog index 5a96451f2..0ecac7e42 100644 --- a/apps/setting/ChangeLog +++ b/apps/setting/ChangeLog @@ -31,3 +31,4 @@ 0.26: Use Bangle.softOff if available as this keeps the time 0.27: Add Theme menu 0.28: Update Quiet Mode widget (if present) +0.29: Move '< Back' to the top of menus diff --git a/apps/setting/settings.js b/apps/setting/settings.js index 1b1cc5478..d3c7d42c7 100644 --- a/apps/setting/settings.js +++ b/apps/setting/settings.js @@ -75,6 +75,7 @@ function showMainMenu() { var beepN = ["Off", "Piezo", "Vibrate"]; const mainmenu = { '': { 'title': 'Settings' }, + '< Back': ()=>load(), 'Make Connectable': ()=>makeConnectable(), 'App/Widget Settings': ()=>showAppSettingsMenu(), 'BLE': ()=>showBLEMenu(), @@ -117,7 +118,6 @@ function showMainMenu() { 'Theme': ()=>showThemeMenu(), 'Reset Settings': ()=>showResetMenu(), 'Turn Off': ()=>{ if (Bangle.softOff) Bangle.softOff(); else Bangle.off() }, - '< Back': ()=>load() }; return E.showMenu(mainmenu); } @@ -126,6 +126,7 @@ function showBLEMenu() { var hidV = [false, "kbmedia", "kb", "joy"]; var hidN = ["Off", "Kbrd & Media", "Kbrd","Joystick"]; E.showMenu({ + '< Back': ()=>showMainMenu(), 'BLE': { value: settings.ble, format: boolFormat, @@ -158,8 +159,7 @@ function showBLEMenu() { 'Whitelist': { value: settings.whitelist?(settings.whitelist.length+" devs"):"off", onchange: () => setTimeout(showWhitelistMenu) // graphical_menu redraws after the call - }, - '< Back': ()=>showMainMenu() + } }); } @@ -178,6 +178,7 @@ function showThemeMenu() { m.draw(); } var m = E.showMenu({ + '< Back': ()=>showMainMenu(), 'Dark BW': ()=>{ upd({ fg:cl("#fff"), bg:cl("#000"), @@ -193,13 +194,13 @@ function showThemeMenu() { fgH:cl("#000"), bgH:cl("#0ff"), dark:false }); - }, - '< Back': ()=>showMainMenu() + } }); } function showPasskeyMenu() { var menu = { + "< Back" : ()=>showBLEMenu(), "Disable" : () => { settings.passkey = undefined; updateSettings(); @@ -220,12 +221,12 @@ function showPasskeyMenu() { } }; })(i); - menu['< Back']=()=>showBLEMenu(); E.showMenu(menu); } function showWhitelistMenu() { var menu = { + "< Back" : ()=>showBLEMenu(), "Disable" : () => { settings.whitelist = undefined; updateSettings(); @@ -257,7 +258,6 @@ function showWhitelistMenu() { showWhitelistMenu(); }); }; - menu['< Back']=()=>showBLEMenu(); E.showMenu(menu); } From ce358e4b55cc65f5d16c424ae550df0e5de2b4f0 Mon Sep 17 00:00:00 2001 From: Gordon Williams Date: Wed, 6 Oct 2021 09:47:37 +0100 Subject: [PATCH 013/392] Add timer capability to alarms app --- apps.json | 6 ++-- apps/alarm/alarm.js | 2 +- apps/alarm/app.js | 80 +++++++++++++++++++++++++++++++++++++++++---- 3 files changed, 78 insertions(+), 10 deletions(-) diff --git a/apps.json b/apps.json index cb77a7290..49b144412 100644 --- a/apps.json +++ b/apps.json @@ -199,11 +199,11 @@ "sortorder" : -2 }, { "id": "alarm", - "name": "Default Alarm", + "name": "Default Alarm & Timer", "shortName":"Alarms", "icon": "app.png", - "version":"0.12", - "description": "Set and respond to alarms", + "version":"0.13", + "description": "Set and respond to alarms and timers", "tags": "tool,alarm,widget,b2", "storage": [ {"name":"alarm.app.js","url":"app.js"}, diff --git a/apps/alarm/alarm.js b/apps/alarm/alarm.js index 26345e887..3598909fc 100644 --- a/apps/alarm/alarm.js +++ b/apps/alarm/alarm.js @@ -19,7 +19,7 @@ function showAlarm(alarm) { if (alarm.msg) msg += "\n"+alarm.msg; E.showPrompt(msg,{ - title:"ALARM!", + title:alarm.timer ? "TIMER!" : "ALARM!", buttons : {"Sleep":true,"Ok":false} // default is sleep so it'll come back in 10 mins }).then(function(sleep) { buzzCount = 0; diff --git a/apps/alarm/app.js b/apps/alarm/app.js index b6019ca08..343eb5b21 100644 --- a/apps/alarm/app.js +++ b/apps/alarm/app.js @@ -9,6 +9,7 @@ var alarms = require("Storage").readJSON("alarm.json",1)||[]; last : 0, // last day of the month we alarmed on - so we don't alarm twice in one day! rp : true, // repeat as : false, // auto snooze + timer : 5, // OPTIONAL - if set, this is a timer and it's the time in minutes } ];*/ @@ -18,6 +19,12 @@ function formatTime(t) { return hrs+":"+("0"+mins).substr(-2); } +function formatMins(t) { + mins = (0|t)%60; + hrs = 0|(t/60); + return hrs+":"+("0"+mins).substr(-2); +} + function getCurrentHr() { var time = new Date(); return time.getHours()+(time.getMinutes()/60)+(time.getSeconds()/3600); @@ -25,14 +32,20 @@ function getCurrentHr() { function showMainMenu() { const menu = { - '': { 'title': 'Alarms' }, - 'New Alarm': ()=>editAlarm(-1) + '': { 'title': 'Alarm/Timer' }, + 'New Alarm': ()=>editAlarm(-1), + 'New Timer': ()=>editTimer(-1) }; alarms.forEach((alarm,idx)=>{ - txt = (alarm.on?"on ":"off ")+formatTime(alarm.hr); - if (alarm.rp) txt += " (repeat)"; + if (alarm.timer) { + txt = "TIMER "+(alarm.on?"on ":"off ")+formatMins(alarm.timer); + } else { + txt = "ALARM "+(alarm.on?"on ":"off ")+formatTime(alarm.hr); + if (alarm.rp) txt += " (repeat)"; + } menu[txt] = function() { - editAlarm(idx); + if (alarm.timer) editTimer(idx); + else editAlarm(idx); }; }); menu['< Back'] = ()=>{load();}; @@ -55,7 +68,7 @@ function editAlarm(alarmIndex) { as = a.as; } const menu = { - '': { 'title': 'Alarms' }, + '': { 'title': 'Alarm' }, 'Hours': { value: hrs, onchange: function(v){if (v<0)v=23;if (v>23)v=0;hrs=v;this.value=v;} // no arrow fn -> preserve 'this' @@ -109,4 +122,59 @@ function editAlarm(alarmIndex) { return E.showMenu(menu); } +function editTimer(alarmIndex) { + var newAlarm = alarmIndex<0; + var hrs = 0; + var mins = 5; + var en = true; + if (!newAlarm) { + var a = alarms[alarmIndex]; + mins = (0|a.timer)%60; + hrs = 0|(a.timer/60); + en = a.on; + } + const menu = { + '': { 'title': 'Timer' }, + 'Hours': { + value: hrs, + onchange: function(v){if (v<0)v=23;if (v>23)v=0;hrs=v;this.value=v;} // no arrow fn -> preserve 'this' + }, + 'Minutes': { + value: mins, + onchange: function(v){if (v<0)v=59;if (v>59)v=0;mins=v;this.value=v;} // no arrow fn -> preserve 'this' + }, + 'Enabled': { + value: en, + format: v=>v?"On":"Off", + onchange: v=>en=v + } + }; + function getTimer() { + var d = new Date(Date.now() + ((hrs*60)+mins)*60000); + var hr = d.getHours() + (d.getMinutes()/60) + (d.getSeconds()/3600); + // Save alarm + return { + on : en, + timer : (hrs*60)+mins, + hr : hr, + rp : false, as: false + }; + } + menu["> Save"] = function() { + if (newAlarm) alarms.push(getTimer()); + else alarms[alarmIndex] = getTimer(); + require("Storage").write("alarm.json",JSON.stringify(alarms)); + showMainMenu(); + }; + if (!newAlarm) { + menu["> Delete"] = function() { + alarms.splice(alarmIndex,1); + require("Storage").write("alarm.json",JSON.stringify(alarms)); + showMainMenu(); + }; + } + menu['< Back'] = showMainMenu; + return E.showMenu(menu); +} + showMainMenu(); From e53099aea6c1d159ad1717693e13f0b82c4a8c1d Mon Sep 17 00:00:00 2001 From: Gordon Williams Date: Wed, 6 Oct 2021 10:05:15 +0100 Subject: [PATCH 014/392] Widgets now shown on Alarm screen Alarm widget state now updates when setting/resetting an alarm --- apps/alarm/ChangeLog | 2 ++ apps/alarm/alarm.js | 2 ++ apps/alarm/app.js | 1 + apps/alarm/widget.js | 18 +++++++----------- 4 files changed, 12 insertions(+), 11 deletions(-) diff --git a/apps/alarm/ChangeLog b/apps/alarm/ChangeLog index 4084a7d3f..a151fd07e 100644 --- a/apps/alarm/ChangeLog +++ b/apps/alarm/ChangeLog @@ -10,3 +10,5 @@ 0.10: Fix auto-snooze option (this stopped new alarms being added) (fix #506) 0.11: Respect Quiet Mode 0.12: Fix widget for bangle 2, now uses theme + Widgets now shown on Alarm screen + Alarm widget state now updates when setting/resetting an alarm diff --git a/apps/alarm/alarm.js b/apps/alarm/alarm.js index 3598909fc..bb5722106 100644 --- a/apps/alarm/alarm.js +++ b/apps/alarm/alarm.js @@ -18,6 +18,8 @@ function showAlarm(alarm) { var buzzCount = 10; if (alarm.msg) msg += "\n"+alarm.msg; + Bangle.loadWidgets(); + Bangle.drawWidgets(); E.showPrompt(msg,{ title:alarm.timer ? "TIMER!" : "ALARM!", buttons : {"Sleep":true,"Ok":false} // default is sleep so it'll come back in 10 mins diff --git a/apps/alarm/app.js b/apps/alarm/app.js index 343eb5b21..fdb7784f7 100644 --- a/apps/alarm/app.js +++ b/apps/alarm/app.js @@ -49,6 +49,7 @@ function showMainMenu() { }; }); menu['< Back'] = ()=>{load();}; + if (WIDGETS["alarm"]) WIDGETS["alarm"].reload(); return E.showMenu(menu); } diff --git a/apps/alarm/widget.js b/apps/alarm/widget.js index 7b9a88bb9..e8bb79fc7 100644 --- a/apps/alarm/widget.js +++ b/apps/alarm/widget.js @@ -1,11 +1,7 @@ -(() => { - var alarms = require('Storage').readJSON('alarm.json',1)||[]; - alarms = alarms.filter(alarm=>alarm.on); - if (!alarms.length) return; // no alarms, no widget! - delete alarms; - // add the widget - WIDGETS["alarm"]={area:"tl",width:24,draw:function() { - g.setColor(g.theme.fg); - g.drawImage(atob("GBgBAAAAAAAAABgADhhwDDwwGP8YGf+YMf+MM//MM//MA//AA//AA//AA//AA//AA//AB//gD//wD//wAAAAADwAABgAAAAAAAAA"),this.x,this.y); - }}; -})() +WIDGETS["alarm"]={area:"tl",width:0,draw:function() { + if (this.width) g.reset().drawImage(atob("GBgBAAAAAAAAABgADhhwDDwwGP8YGf+YMf+MM//MM//MA//AA//AA//AA//AA//AA//AB//gD//wD//wAAAAADwAABgAAAAAAAAA"),this.x,this.y); + },reload:function() { + WIDGETS["alarm"].width = (require('Storage').readJSON('alarm.json',1)||[]).some(alarm=>alarm.on) ? 24 : 0; + } +}; +WIDGETS["alarm"].reload(); From 48d8031442ee452643135fb111a89e162f689dc7 Mon Sep 17 00:00:00 2001 From: Gordon Williams Date: Wed, 6 Oct 2021 10:13:26 +0100 Subject: [PATCH 015/392] widclk 0.06: Use 7 segment font, update *on* the minute, use less memory --- apps.json | 2 +- apps/widclk/ChangeLog | 1 + apps/widclk/widget.js | 44 +++++++++++++++---------------------------- 3 files changed, 17 insertions(+), 30 deletions(-) diff --git a/apps.json b/apps.json index 49b144412..c182da13c 100644 --- a/apps.json +++ b/apps.json @@ -1187,7 +1187,7 @@ { "id": "widclk", "name": "Digital clock widget", "icon": "widget.png", - "version":"0.05", + "version":"0.06", "description": "A simple digital clock widget", "tags": "widget,clock", "type":"widget", diff --git a/apps/widclk/ChangeLog b/apps/widclk/ChangeLog index 655679515..c74857ab4 100644 --- a/apps/widclk/ChangeLog +++ b/apps/widclk/ChangeLog @@ -2,3 +2,4 @@ 0.03: Ensure redrawing works with variable size widget system 0.04: Fix regression stopping correct widget updates 0.05: Don't show clock widget if already showing clock app +0.06: Use 7 segment font, update *on* the minute, use less memory diff --git a/apps/widclk/widget.js b/apps/widclk/widget.js index cd4b29367..da3f60ce8 100644 --- a/apps/widclk/widget.js +++ b/apps/widclk/widget.js @@ -1,30 +1,16 @@ -(function() { - // don't show widget if we know we have a clock app running - if (Bangle.CLOCK) return; +/* Simple clock that appears in the widget bar if no other clock +is running. We update once per minute, but don't bother stopping +if the */ - let intervalRef = null; - var width = 5 * 6*2 - - function draw() { - g.reset().setFont("6x8", 2).setFontAlign(-1, 0); - var time = require("locale").time(new Date(),1); - g.drawString(time, this.x, this.y+11, true); // 5 * 6*2 = 60 - } - function clearTimers(){ - if(intervalRef) { - clearInterval(intervalRef); - intervalRef = null; - } - } - function startTimers(){ - intervalRef = setInterval(()=>WIDGETS["wdclk"].draw(), 60*1000); - WIDGETS["wdclk"].draw(); - } - Bangle.on('lcdPower', (on) => { - clearTimers(); - if (on) startTimers(); - }); - - WIDGETS["wdclk"]={area:"tr",width:width,draw:draw}; - if (Bangle.isLCDOn) intervalRef = setInterval(()=>WIDGETS["wdclk"].draw(), 60*1000); -})() +// don't show widget if we know we have a clock app running +if (!Bangle.CLOCK) WIDGETS["wdclk"]={area:"tl",width:52/* g.stringWidth("00:00") */,draw:function() { + g.reset().setFontCustom(atob("AAAAAAAAAAIAAAQCAQAAAd0BgMBdwAAAAAAAdwAB0RiMRcAAAERiMRdwAcAQCAQdwAcERiMRBwAd0RiMRBwAAEAgEAdwAd0RiMRdwAcERiMRdwAFAAd0QiEQdwAdwRCIRBwAd0BgMBAAABwRCIRdwAd0RiMRAAAd0QiEQAAAAAAAAAA="), 32, atob("BgAAAAAAAAAAAAAAAAYCAAYGBgYGBgYGBgYCAAAAAAAABgYGBgYG"), 512+9); + var time = require("locale").time(new Date(),1); + g.drawString(time, this.x, this.y+3, true); // 5 * 6*2 = 60 + // queue draw in one minute + if (drawTimeout) clearTimeout(drawTimeout); + this.drawTimeout = setTimeout(()=>{ + this.drawTimeout = undefined; + this.draw(); + }, 60000 - (Date.now() % 60000)); +}}; From 70702560c648e0463e55e4db32d31541ca50bd5d Mon Sep 17 00:00:00 2001 From: Gordon Williams Date: Wed, 6 Oct 2021 10:15:16 +0100 Subject: [PATCH 016/392] antonclk/waveclk 0.02: Load widgets after setUI so widclk knows when to hide --- apps.json | 4 ++-- apps/antonclk/ChangeLog | 1 + apps/antonclk/app.js | 9 ++++----- apps/waveclk/ChangeLog | 1 + apps/waveclk/app.js | 6 +++--- 5 files changed, 11 insertions(+), 10 deletions(-) diff --git a/apps.json b/apps.json index c182da13c..35dfb9653 100644 --- a/apps.json +++ b/apps.json @@ -3520,7 +3520,7 @@ { "id": "antonclk", "name": "Anton Clock", "icon": "app.png", - "version":"0.01", + "version":"0.02", "description": "A simple clock using the bold Anton font.", "tags":"clock,b2", "type":"clock", @@ -3533,7 +3533,7 @@ { "id": "waveclk", "name": "Wave Clock", "icon": "app.png", - "version":"0.01", + "version":"0.02", "description": "A clock using a wave image by [Lillith May](https://www.instagram.com/_lilustrations_/). **Note: This requires a bugfix for #2049 on Bangle.js 1**", "tags":"clock,b2", "type":"clock", diff --git a/apps/antonclk/ChangeLog b/apps/antonclk/ChangeLog index 5560f00bc..8c2a33143 100644 --- a/apps/antonclk/ChangeLog +++ b/apps/antonclk/ChangeLog @@ -1 +1,2 @@ 0.01: New App! +0.02: Load widgets after setUI so widclk knows when to hide diff --git a/apps/antonclk/app.js b/apps/antonclk/app.js index 1b92d4a8b..f6fcf1708 100644 --- a/apps/antonclk/app.js +++ b/apps/antonclk/app.js @@ -19,7 +19,7 @@ function queueDraw() { function draw() { var x = g.getWidth()/2; var y = g.getHeight()/2; - g.reset(); + g.reset(); var date = new Date(); var timeStr = require("locale").time(date,1); var dateStr = require("locale").date(date).toUpperCase(); @@ -33,7 +33,7 @@ function draw() { g.clearRect(0,y-8,g.getWidth(),y+8); // clear the background g.drawString(dateStr,x,y); // queue draw in one minute - queueDraw(); + queueDraw(); } // Clear the screen once, at startup @@ -49,9 +49,8 @@ Bangle.on('lcdPower',on=>{ drawTimeout = undefined; } }); +// Show launcher when middle button pressed +Bangle.setUI("clock"); // Load widgets Bangle.loadWidgets(); Bangle.drawWidgets(); -// Show launcher when middle button pressed -Bangle.setUI("clock"); - diff --git a/apps/waveclk/ChangeLog b/apps/waveclk/ChangeLog index 5560f00bc..8c2a33143 100644 --- a/apps/waveclk/ChangeLog +++ b/apps/waveclk/ChangeLog @@ -1 +1,2 @@ 0.01: New App! +0.02: Load widgets after setUI so widclk knows when to hide diff --git a/apps/waveclk/app.js b/apps/waveclk/app.js index 7e1870aa7..f1c67ce2f 100644 --- a/apps/waveclk/app.js +++ b/apps/waveclk/app.js @@ -28,7 +28,7 @@ function queueDraw() { function draw() { var x = g.getWidth()/2; var y = 24+20; - + g.reset().clearRect(0,24,g.getWidth(),g.getHeight()-IMAGEHEIGHT); if (g.getWidth() == IMAGEWIDTH) g.drawImage(getImg(),0,g.getHeight()-IMAGEHEIGHT); @@ -65,8 +65,8 @@ Bangle.on('lcdPower',on=>{ drawTimeout = undefined; } }); +// Show launcher when middle button pressed +Bangle.setUI("clock"); // Load widgets Bangle.loadWidgets(); Bangle.drawWidgets(); -// Show launcher when middle button pressed -Bangle.setUI("clock"); \ No newline at end of file From 192e8470d1c0f59000d4e2d02c9902dd61d41ff8 Mon Sep 17 00:00:00 2001 From: Gordon Williams Date: Wed, 6 Oct 2021 16:08:11 +0100 Subject: [PATCH 017/392] demoapp 0.02: Minor adjustment to fix out of memory errors --- apps.json | 4 ++-- apps/demoapp/ChangeLog | 1 + apps/demoapp/app.js | 5 ++--- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/apps.json b/apps.json index 35dfb9653..d45e8c947 100644 --- a/apps.json +++ b/apps.json @@ -1236,9 +1236,9 @@ { "id": "demoapp", "name": "Demo Loop", "icon": "app.png", - "version":"0.01", + "version":"0.02", "description": "Simple demo app - displays Bangle.js, JS logo, graphics, and Bangle.js information", - "tags": "", + "tags": "bno2", "type":"app", "allow_emulator":true, "storage": [ diff --git a/apps/demoapp/ChangeLog b/apps/demoapp/ChangeLog index 5560f00bc..53e9cf268 100644 --- a/apps/demoapp/ChangeLog +++ b/apps/demoapp/ChangeLog @@ -1 +1,2 @@ 0.01: New App! +0.02: Minor adjustment to fix out of memory errors diff --git a/apps/demoapp/app.js b/apps/demoapp/app.js index 13c043587..f1cf5af07 100644 --- a/apps/demoapp/app.js +++ b/apps/demoapp/app.js @@ -60,8 +60,8 @@ var scenes = [ }; }, function() { + Bangle.setLCDMode("120x120"); var img = require("heatshrink").decompress(atob("oNBxH+5wA/AH4A/AH4A/AH4A/AH4A/AH4A/AH4A/AH4A/AH4A/AH4A/AH4A/AH4A/AH4A/AH4A/AH4A/AHGpAAoQKv4ADCBQAeqsrAAejBw9/B4oABqt/IGepHw5CEQspALH5hBC5pAvv4/MAALFkIBWpPI6IHqpAu0Z3GfYOpRYdPQEhALYIp2FBYNVI4JAvvL4LH0yBYAFJAQQQ5Ay1JAFftBAQBYxCDv+qIGiCHIQiGnIBfOv5BJIQRAyIJkrvKEkIBrFBB4qEGIGRCNYsZAQIQV/IZDEiICRCDQVJAUIQVPC4lVIF6yJQYpAZ5t/FYvNIBepqtVIJGjIDoqBDY2pdYo3DfAhBIQLmpvIcDvIrC5oJEIAhTCGQmj5qgEC4t5e7YrBqt5BI6UFBg15v4XHbQwAQb4oAKv7NKABdVRoYATUAwnICqjZFIMdVE4+jXI4XGYCxBFFZN/M5OpCxUrvJ/ZFYmjvNVAAY+KCwpDBC6YAV5vNC9oA/AH4A/AHYA==")); - g.clear(); y = 0; var step = 4; @@ -70,8 +70,7 @@ var scenes = [ g.clear(); g.drawImage(img,60,60,{rotate:Math.sin(y*0.03)*0.5}); g.flip(); - }, 20); - Bangle.setLCDMode("120x120"); + }, 20); return function() { if (i) clearInterval(i); }; From 0be85f8b24ac101eb462a0e888321713a1834fa7 Mon Sep 17 00:00:00 2001 From: Sven Klomp Date: Wed, 6 Oct 2021 20:01:27 +0200 Subject: [PATCH 018/392] Grocery: Refactor to store grocery list in separate file --- apps.json | 5 ++-- apps/grocery/ChangeLog | 1 + apps/grocery/app.js | 29 +++++++++++++++++++++++ apps/grocery/grocery.html | 49 +-------------------------------------- 4 files changed, 33 insertions(+), 51 deletions(-) create mode 100644 apps/grocery/app.js diff --git a/apps.json b/apps.json index a7577945e..f85f54eea 100644 --- a/apps.json +++ b/apps.json @@ -1328,14 +1328,13 @@ "id": "grocery", "name": "Grocery", "icon": "grocery.png", - "version":"0.01", + "version":"0.02", "description": "Simple grocery (shopping) list - Display a list of product and track if you already put them in your cart.", "tags": "tool,outdoors,shopping,list", "type": "app", "custom":"grocery.html", "storage": [ - {"name":"grocery"}, - {"name":"grocery.app.js"}, + {"name":"grocery.app.js", "url":"app.js"}, {"name":"grocery.img","url":"grocery-icon.js","evaluate":true} ] }, diff --git a/apps/grocery/ChangeLog b/apps/grocery/ChangeLog index 5560f00bc..906046782 100644 --- a/apps/grocery/ChangeLog +++ b/apps/grocery/ChangeLog @@ -1 +1,2 @@ 0.01: New App! +0.02: Refactor code to store grocery list in separate file diff --git a/apps/grocery/app.js b/apps/grocery/app.js new file mode 100644 index 000000000..481efc3d9 --- /dev/null +++ b/apps/grocery/app.js @@ -0,0 +1,29 @@ +var filename = 'grocery_list.json'; +var settings = require("Storage").readJSON(filename,1)|| { products: [] }; + +function updateSettings() { + require("Storage").writeJSON(filename, settings); + Bangle.buzz(); +} + +function twoChat(n){ + if(n<10) return '0'+n; + return ''+n; +} + +const mainMenu = settings.products.reduce(function(m, p, i){ + const name = twoChat(p.quantity)+' '+p.name; + m[name] = { + value: p.ok, + format: v => v?'[x]':'[ ]', + onchange: v => { + settings.products[i].ok = v; + updateSettings(); + } + }; + return m; +}, { + '': { 'title': 'Grocery list' } +}); +mainMenu['< Back'] = ()=>{load();}; +E.showMenu(mainMenu); diff --git a/apps/grocery/grocery.html b/apps/grocery/grocery.html index 14c406d75..e717dee2e 100644 --- a/apps/grocery/grocery.html +++ b/apps/grocery/grocery.html @@ -105,56 +105,9 @@ } document.getElementById("upload").addEventListener("click", function() { - - - var app = ` -var newTime = ${Date.now()} -var products = ${JSON.stringify(products)} -var newTime = newTime; -var filename = 'grocery'; -var settings = require("Storage").readJSON(filename,1)|| null; -function getSettings(){ - return { - products : products, - date: newTime - }; -} -if(!settings || !settings.date || settings.date < newTime){ - settings = getSettings(); - Bangle.buzz(500); -} -function updateSettings() { - require("Storage").writeJSON(filename, settings); - Bangle.buzz(); -} -function twoChat(n){ - if(n<10) return '0'+n; - return ''+n; -} -const mainMenu = settings.products.reduce(function(m, p, i){ - const name = twoChat(p.quantity)+' '+p.name; - m[name] = { - value: p.ok, - format: v => v?'[x]':'[ ]', - onchange: v => { - settings.products[i].ok = v; - updateSettings(); - } - }; - return m; -}, { - '': { 'title': 'Grocery list' } -}); -mainMenu['< Back'] = ()=>{load();}; -E.showMenu(mainMenu); -`; - - var icon = `require("heatshrink").decompress(atob("mEwxH+AH4A/AH4AQ0QACF1nGAAIxpFoYwqFwwwnRggwGB4eFAggACLzwHCMAeF1WGAgOGw2x2IGCLzYGEF4YpBwotCFwJfWFwo1GSAYtBAIIABRq4vFMhAwBzoAFdzIuKAAOc4IAGGC4qEMZOiF44wXFxovleBYvIGCwmB0WjE4V/AgfG1IvCzujFQOjwoECF6WFwovBDYOFEwN/AgIwCAgOFBwYrBBAQEBzodCF6AAHww1CBpIODAAYvRDAWG2IEBAYYJFBxICCF6Ox1WxAAQfBAYQlCAAIOJAQIvUADQvn1WGR4RfbP4gAFBwgFCF7a5EdwQADF46/cL9wAQF94AGF85bB1TvmF47vdJ4bvFF8qPRFgLv/L7jPCaQq/fYYrvgJgoAGd/7v/F/4v/F5oAdF54weFyAA/AH4A3A="))`; sendCustomizedApp({ storage:[ - {name:"grocery.app.js", url:"app.js", content:app}, - {name:"grocery.img", content:icon, evaluate:true}, - {name:"grocery"} + { name:"grocery_list.json", content: JSON.stringify({products: products}) } ] }); }); From 05145da819194ed00632b7fa55c6f192bbb65966 Mon Sep 17 00:00:00 2001 From: Gordon Williams Date: Wed, 6 Oct 2021 20:14:22 +0100 Subject: [PATCH 019/392] tweaks to last commit --- apps/setting/settings.js | 139 ++++++++++++++++++++------------------- 1 file changed, 71 insertions(+), 68 deletions(-) diff --git a/apps/setting/settings.js b/apps/setting/settings.js index 540ecef2a..255a413cb 100644 --- a/apps/setting/settings.js +++ b/apps/setting/settings.js @@ -163,26 +163,25 @@ function showBLEMenu() { }); } -let m; -function updT(th) { - g.theme = th; - settings.theme = th; - updateSettings(); - delete g.reset; - g._reset = g.reset; - g.reset = function(n) { return g._reset().setColor(th.fg).setBgColor(th.bg); }; - g.clear = function(n) { if (n) g.reset(); return g.clearRect(0,0,g.getWidth(),g.getHeight()); }; - g.clear(1); - Bangle.drawWidgets(); - m.draw(); -} function showThemeMenu() { function cl(x) { return g.setColor(x).getColor(); } - m = E.showMenu({ + function upd(th) { + g.theme = th; + settings.theme = th; + updateSettings(); + delete g.reset; + g._reset = g.reset; + g.reset = function(n) { return g._reset().setColor(th.fg).setBgColor(th.bg); }; + g.clear = function(n) { if (n) g.reset(); return g.clearRect(0,0,g.getWidth(),g.getHeight()); }; + g.clear(1); + Bangle.drawWidgets(); + m.draw(); + } + var m = E.showMenu({ '':{title:'Theme'}, - '< Back': ()=>showMainMenu(), + '< Back': ()=>showMainMenu(), 'Dark BW': ()=>{ - updT({ + upd({ fg:cl("#fff"), bg:cl("#000"), fg2:cl("#0ff"), bg2:cl("#000"), fgH:cl("#fff"), bgH:cl("#00f"), @@ -190,7 +189,7 @@ function showThemeMenu() { }); }, 'Light BW': ()=>{ - updT({ + upd({ fg:cl("#000"), bg:cl("#fff"), fg2:cl("#00f"), bg2:cl("#0ff"), fgH:cl("#000"), bgH:cl("#0ff"), @@ -199,58 +198,62 @@ function showThemeMenu() { }, 'Customize': ()=>showCustomThemeMenu(), }); -} -function showCustomThemeMenu() { - function cv(x) { return g.setColor(x).getColor(); } - function setT(t, v) { - let th = g.theme; - th[t] = v; - if (t==="bg") { - th['dark'] = (v===cv("#000")); + + function showCustomThemeMenu() { + function cv(x) { return g.setColor(x).getColor(); } + function setT(t, v) { + let th = g.theme; + th[t] = v; + if (t==="bg") { + th['dark'] = (v===cv("#000")); + } + updT(th); } - updT(th); + const rgb = { + black: "#000", white: "#fff", + red: "#f00", green: "#0f0", blue: "#00f", + cyan: "#0ff", magenta: "#f0f", yellow: "#ff0", + }; + let colors = [], names = []; + for(const c in rgb) { + names.push(c); + colors.push(cv(rgb[c])); + } + function cn(v) { + const i = colors.indexOf(v); + return i!== -1 ? names[i] : v; // another color: just show value + } + let menu = { + '':{title:'Customize Theme'}, + "< Back"] : () => showThemeMenu(); + }; + const labels = { + fg: 'Foreground', bg: 'Background', + fg2: 'Foreground 2', bg2: 'Background 2', + fgH: 'Highlight FG', bgH: 'Highlight BG', + }; + ["fg", "bg", "fg2", "bg2", "fgH", "bgH"].forEach(t => { + menu[labels[t]] = { + value: colors.indexOf(g.theme[t]), + format: () => cn(g.theme[t]), + onchange: function(v) { + // wrap around + if (v>=colors.length) {v = 0;} + if (v<0) {v = colors.length-1;} + this.value = v; + const c = colors[v]; + // if we select the same fg and bg: set the other to the old color + // e.g. bg=black;fg=white, user selects fg=black -> bg changes to white automatically + // so users don't end up with a black-on-black menu + if (t === 'fg' && g.theme.bg === c) setT('bg', g.theme.fg); + if (t === 'bg' && g.theme.fg === c) setT('fg', g.theme.bg); + setT(t, c); + }, + }; + }); + menu["< Back"] = () => showThemeMenu(); + m = E.showMenu(menu); } - const rgb = { - black: "#000", white: "#fff", - red: "#f00", green: "#0f0", blue: "#00f", - cyan: "#0ff", magenta: "#f0f", yellow: "#ff0", - }; - let colors = [], names = []; - for(const c in rgb) { - names.push(c); - colors.push(cv(rgb[c])); - } - function cn(v) { - const i = colors.indexOf(v); - return i!== -1 ? names[i] : v; // another color: just show value - } - let menu = {'':{title:'Customize Theme'}}; - const labels = { - fg: 'Foreground', bg: 'Background', - fg2: 'Foreground 2', bg2: 'Background 2', - fgH: 'Highlight FG', bgH: 'Highlight BG', - }; - ["fg", "bg", "fg2", "bg2", "fgH", "bgH"].forEach(t => { - menu[labels[t]] = { - value: colors.indexOf(g.theme[t]), - format: () => cn(g.theme[t]), - onchange: function(v) { - // wrap around - if (v>=colors.length) {v = 0;} - if (v<0) {v = colors.length-1;} - this.value = v; - const c = colors[v]; - // if we select the same fg and bg: set the other to the old color - // e.g. bg=black;fg=white, user selects fg=black -> bg changes to white automatically - // so users don't end up with a black-on-black menu - if (t === 'fg' && g.theme.bg === c) setT('bg', g.theme.fg); - if (t === 'bg' && g.theme.fg === c) setT('fg', g.theme.bg); - setT(t, c); - }, - }; - }); - menu["< Back"] = () => {delete m;showThemeMenu();}; - m = E.showMenu(menu); } function showPasskeyMenu() { @@ -291,7 +294,7 @@ function showWhitelistMenu() { if (settings.whitelist) settings.whitelist.forEach(function(d){ menu[d.substr(0,17)] = function() { E.showPrompt('Remove\n'+d).then((v) => { - if (v) + if (v) { settings.whitelist.splice(settings.whitelist.indexOf(d),1); updateSettings(); } From b5337717e74aa9ef26529f2b3b2b18fb011906c4 Mon Sep 17 00:00:00 2001 From: Gordon Williams Date: Wed, 6 Oct 2021 20:14:33 +0100 Subject: [PATCH 020/392] fix widclk regression --- apps/widclk/widget.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/widclk/widget.js b/apps/widclk/widget.js index da3f60ce8..9e035ca9a 100644 --- a/apps/widclk/widget.js +++ b/apps/widclk/widget.js @@ -8,7 +8,7 @@ if (!Bangle.CLOCK) WIDGETS["wdclk"]={area:"tl",width:52/* g.stringWidth("00:00") var time = require("locale").time(new Date(),1); g.drawString(time, this.x, this.y+3, true); // 5 * 6*2 = 60 // queue draw in one minute - if (drawTimeout) clearTimeout(drawTimeout); + if (this.drawTimeout) clearTimeout(this.drawTimeout); this.drawTimeout = setTimeout(()=>{ this.drawTimeout = undefined; this.draw(); From 45b5332c3cc431538e5b451135f061ed7db6481b Mon Sep 17 00:00:00 2001 From: Gordon Williams Date: Wed, 6 Oct 2021 20:17:34 +0100 Subject: [PATCH 021/392] oops, and update versions after merge --- apps.json | 2 +- apps/setting/settings.js | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/apps.json b/apps.json index d554b0354..532a0c898 100644 --- a/apps.json +++ b/apps.json @@ -185,7 +185,7 @@ { "id": "setting", "name": "Settings", "icon": "settings.png", - "version":"0.29", + "version":"0.30", "description": "A menu for setting up Bangle.js", "tags": "tool,system,b2", "readme": "README.md", diff --git a/apps/setting/settings.js b/apps/setting/settings.js index 255a413cb..a0e535df7 100644 --- a/apps/setting/settings.js +++ b/apps/setting/settings.js @@ -207,7 +207,7 @@ function showThemeMenu() { if (t==="bg") { th['dark'] = (v===cv("#000")); } - updT(th); + upd(th); } const rgb = { black: "#000", white: "#fff", @@ -224,8 +224,8 @@ function showThemeMenu() { return i!== -1 ? names[i] : v; // another color: just show value } let menu = { - '':{title:'Customize Theme'}, - "< Back"] : () => showThemeMenu(); + '':{title:'Custom Theme'}, + "< Back": () => showThemeMenu() }; const labels = { fg: 'Foreground', bg: 'Background', From e6d4573f701cdaa6bb14c84868bc785740f02744 Mon Sep 17 00:00:00 2001 From: hughbarney Date: Wed, 6 Oct 2021 23:47:09 +0100 Subject: [PATCH 022/392] accellog, dont show decimal places for seconds, set Exit as first menu option --- apps.json | 2 +- apps/accellog/ChangeLog | 1 + apps/accellog/app.js | 8 ++++---- 3 files changed, 6 insertions(+), 5 deletions(-) diff --git a/apps.json b/apps.json index 532a0c898..876b243ae 100644 --- a/apps.json +++ b/apps.json @@ -2413,7 +2413,7 @@ "name": "Acceleration Logger", "shortName":"Accel Log", "icon": "app.png", - "version":"0.02", + "version":"0.03", "interface": "interface.html", "description": "Logs XYZ acceleration data to a CSV file that can be downloaded to your PC", "tags": "outdoor,b2", diff --git a/apps/accellog/ChangeLog b/apps/accellog/ChangeLog index 084f26aff..c0097db80 100644 --- a/apps/accellog/ChangeLog +++ b/apps/accellog/ChangeLog @@ -1,2 +1,3 @@ 0.01: New App! 0.02: Use the new multiplatform 'Layout' library +0.03: Exit as first menu option, dont show decimal places for seconds diff --git a/apps/accellog/app.js b/apps/accellog/app.js index 3ee88059b..fdb4d52be 100644 --- a/apps/accellog/app.js +++ b/apps/accellog/app.js @@ -8,6 +8,9 @@ function getFileName(n) { function showMenu() { var menu = { "" : { title : "Accel Logger" }, + "Exit" : function() { + load(); + }, "File No" : { value : fileNumber, min : 0, @@ -21,9 +24,6 @@ function showMenu() { "View Logs" : function() { viewLogs(); }, - "Exit" : function() { - load(); - }, }; E.showMenu(menu); } @@ -34,7 +34,7 @@ function viewLog(n) { var records = 0, l = "", ll=""; while ((l=f.readLine())!==undefined) {records++;ll=l;} var length = 0; - if (ll) length = (ll.split(",")[0]|0)/1000; + if (ll) length = Math.round( (ll.split(",")[0]|0)/1000 ); var menu = { "" : { title : "Log "+n } From ba97b157026de86558bd377359147486820c4573 Mon Sep 17 00:00:00 2001 From: Paul Spenke <50266156+deepDiverPaul@users.noreply.github.com> Date: Thu, 7 Oct 2021 09:41:19 +0200 Subject: [PATCH 023/392] Fix translation slidingtext.locale.de.js --- apps/slidingtext/slidingtext.locale.de.js | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/apps/slidingtext/slidingtext.locale.de.js b/apps/slidingtext/slidingtext.locale.de.js index 11124c24a..3cb178232 100644 --- a/apps/slidingtext/slidingtext.locale.de.js +++ b/apps/slidingtext/slidingtext.locale.de.js @@ -1,15 +1,15 @@ var DateFormatter = require("slidingtext.dtfmt.js"); -const germanNumberStr = [ ["ZERO",""], // 0 +const germanNumberStr = [ ["NULL",""], // 0 ["EINS",""], // 1 ["ZWEI",""], //2 ["DREI",''], //3 ["VIER",''], //4 ["FÜNF",''], //5 ["SECHS",''], //6 - ["SEIBEN",''], //7 + ["SIEBEN",''], //7 ["ACHT",''], //8 - ["NUEN",''], // 9, + ["NEUN",''], // 9, ["ZEHN",''], // 10 ["ELF",''], // 11, ["ZWÖLF",''], // 12 @@ -22,7 +22,7 @@ const germanNumberStr = [ ["ZERO",""], // 0 ["NEUN",'ZEHN'], // 19 ]; -const germanTensStr = ["ZERO",//0 +const germanTensStr = ["NULL",//0 "ZEHN",//10 "ZWANZIG",//20 "DREIßIG",//30 @@ -38,7 +38,7 @@ const germanUnit = ["",//0 "VIERUND", //4 "FÜNFUND", //5 "SECHSUND", //6 - "SEIBENUND", //7 + "SIEBENUND", //7 "ACHTUND", //8 "NEUNUND" //9 ] @@ -91,4 +91,4 @@ class GermanDateFormatter extends DateFormatter { } } -module.exports = GermanDateFormatter; \ No newline at end of file +module.exports = GermanDateFormatter; From be556e859e9e73c649ee19c05a60b42281a6ef89 Mon Sep 17 00:00:00 2001 From: Gordon Williams Date: Thu, 7 Oct 2021 11:09:41 +0100 Subject: [PATCH 024/392] add floral clock --- apps.json | 15 +++++++- apps/alarm/ChangeLog | 2 +- apps/floralclk/ChangeLog | 1 + apps/floralclk/app-icon.js | 1 + apps/floralclk/app.js | 76 +++++++++++++++++++++++++++++++++++++ apps/floralclk/app.png | Bin 0 -> 4978 bytes 6 files changed, 93 insertions(+), 2 deletions(-) create mode 100644 apps/floralclk/ChangeLog create mode 100644 apps/floralclk/app-icon.js create mode 100644 apps/floralclk/app.js create mode 100644 apps/floralclk/app.png diff --git a/apps.json b/apps.json index 532a0c898..c576eada6 100644 --- a/apps.json +++ b/apps.json @@ -3533,7 +3533,7 @@ "name": "Wave Clock", "icon": "app.png", "version":"0.02", - "description": "A clock using a wave image by [Lillith May](https://www.instagram.com/_lilustrations_/). **Note: This requires a bugfix for #2049 on Bangle.js 1**", + "description": "A clock using a wave image by [Lillith May](https://www.instagram.com/_lilustrations_/). **Note: This requires firmware 2v11 or later Bangle.js 1**", "tags":"clock,b2", "type":"clock", "allow_emulator":true, @@ -3541,5 +3541,18 @@ {"name":"waveclk.app.js","url":"app.js"}, {"name":"waveclk.img","url":"app-icon.js","evaluate":true} ] +}, +{ "id": "floralclk", + "name": "Floral Clock", + "icon": "app.png", + "version":"0.01", + "description": "A clock with a flower background by [Lillith May](https://www.instagram.com/_lilustrations_/). **Note: This requires firmware 2v11 or later Bangle.js 1**", + "tags":"clock,b2", + "type":"clock", + "allow_emulator":true, + "storage": [ + {"name":"floralclk.app.js","url":"app.js"}, + {"name":"floralclk.img","url":"app-icon.js","evaluate":true} + ] } ] diff --git a/apps/alarm/ChangeLog b/apps/alarm/ChangeLog index a151fd07e..fce54f273 100644 --- a/apps/alarm/ChangeLog +++ b/apps/alarm/ChangeLog @@ -11,4 +11,4 @@ 0.11: Respect Quiet Mode 0.12: Fix widget for bangle 2, now uses theme Widgets now shown on Alarm screen - Alarm widget state now updates when setting/resetting an alarm +0.13: Alarm widget state now updates when setting/resetting an alarm diff --git a/apps/floralclk/ChangeLog b/apps/floralclk/ChangeLog new file mode 100644 index 000000000..5560f00bc --- /dev/null +++ b/apps/floralclk/ChangeLog @@ -0,0 +1 @@ +0.01: New App! diff --git a/apps/floralclk/app-icon.js b/apps/floralclk/app-icon.js new file mode 100644 index 000000000..4dfc57191 --- /dev/null +++ b/apps/floralclk/app-icon.js @@ -0,0 +1 @@ +require("heatshrink").decompress(atob("mEwhE+sVin0/tVjsdim84sdro1GAQNrAAlHAYVqABk/FINosc/AoNpF4cTGoMTnIhBo1qEgIvFABJACoAvEFwJaDGoNjnFpn5eCik/DYQwBAAQwOFIMUDYKBBLwQwBnwoBBAM3GIIEBhs5E4RLBPYqMKFwU4AAM+nwCBF4SJCAwMxXII2BnBeDJogAGNQIAFBIJMBRIYvCLQK+Bow7BhsNCINjm45BXwZgHF5ITBigoBF4NpQoIwBLwLJBn8Oh0NBoU4F4J6CF4RiKR47iCtIrBiaGBEgdknMOnBABiYKBtNkKoaUIdo5hCQoKvBYgKGBGAIJBMANjhqfBHgLQBNgKcBEpAxBBA9HHoiwBF4S3BcoM4Nwdim83sVEGAINBMQIfBEASYGLII4ECISFBnEyFgKHBGwRsDHYKfBaQOGrifCXw4qBNgIEBXoQHBCQZXBnArCAQNpnBWBFwUTBINiwGkwFcsbzDEwJcFG4pcCAAMUik/EIKJBn6JBMYNpnzABsY0BwGeAAN6wLnCEQQACF4ztCF4UUJ4QNDGAKTCtMTnASBHwOezAwCveIP4ReEeQzNDFwgvDDQU/oDlDJYVkF4e8z2Hx2Px2IAAKKEGo1qnAuBtLYBBwRJCAoIuCbgVqxAsCAQWB1mBwN6AANWmSwBJwRcCDIIuDnxAGAYU5HQmPF4W84QBBvWlGoOY4TIBmMxnJGCYYc5ik+coNjn8UhsUiqRDGQQUBQQJUBz3CzAxBYYYADvWGsTZBDoNHcQUTXgU+n1pB4LmBFQSUCAoNkw4uCF4QBBF4QFBAAIFBF4IjBoBMCn84nwtCMAIABm8TnLREXYd7KQSLBzoBDAQJlBBQN5w1osU/VAQuBnCLBGQNpGYM4R4LRCAATTBRgJcCy4kBz3I5HO5HHy4JBYwRfBcYIfBoE4m5YCho0BA4M4FwzzCxCMBEIO73guB5wAC5BgBSoWAF4KQBsdkKoKNChoACik4nIuHF4i0BdQOdF4XNAQK8Cz2lqzjCnCIBFwTnBS4IrBTQQuBdoLuCBAWOdoOYWgRfC5ovDy4vDriDCAAS8CFQYADdQgvCowvDSAK0CF4SPC4QwCvVcmUymMxFwSUBFwQoDFQToBAoIsBBoSQBMASRBy6QDXwIJCSIWAFwjzDWowAKGYOHwIhBYIOezooC3YuBF4d6GAK/BYAVkF6CUExBiBYQQCBFQIvCzAvCAYM3LoUTLwIeDF5pBDSQRgCLQYDBZQZrBz1cw9iiZeCWoQvWeYQuBfIIxCLwd6w1inEULyQvFtYvFEwOB0uBz4zCX4QuBnDsCDortNCQNHL4mYFwN7ZAOIfgN6AANcsc+m6NBDoRgQFwNGo5FBx2HKoZeBHYNqsg7BqtVsS8BRoReCL6AgBSYQ1CwJWBveHZYlkmMxLwM4h05sgADPwRRCF5ouDMIKKCxwPDsk4mM4XgMTXwLvBikOYYQvOBoQOBoE/JA4DBn8UFwNim8NF4QABhsNnIvQUgVAnMOVoQ4CAANqscUidiRoMNm4zBAAQHBF6CLDO4JIBGAVHXgYiBn1jn0NGYVoAAIvBIwYvOBgM/hyxBAAQXBHYU5RANjscTLwNjLgIuBny+FF5xeBhtcPYU+DYJeDRog0CCIYSBoAvRGAMUmOHJgcbF4QuBFIUNmIBBeYItCIIRNBd54ABisUVgNED4QJBn69Dm4uBh0OnIsBoArCFBoPDHgNqoAvBL4YvCb4JeBnxiCslkDogvRNQVGGALrBVobwBfAMNXoMTigsHDINHAAIvJGIdGn9ro4FBscNMANpF4LoBm4DChq1BFAJDBDobmMMIgvDA4UULwKHBMoLlBG4MynBeBCYQfFF56MBoAbDMAKzBnETm7oBGoM4hxeCQoJfCcJC/KAgIvFMAMNAASNBsQ1BLwVqFwIeELppCBF4dq")) diff --git a/apps/floralclk/app.js b/apps/floralclk/app.js new file mode 100644 index 000000000..5fb9303a8 --- /dev/null +++ b/apps/floralclk/app.js @@ -0,0 +1,76 @@ +function getImg() { + return require("heatshrink").decompress(atob("2F0gdt23bAX4C/AWvYppB+2kAgM2IPuwgRB/2ESpJB/IIMmzYUN6EJIN1IgECChuAa9u0IIUApoUMgVAINsCoMkwBBMKYRBs0kAgMkyBBGwDOEIIUmDoqbOAS0EySDBII1sgMAIJmgLgJBithBLpMkYpmBkmBIMckyTFByQLFsBBGgRBGxJBlgmQIIOTBYtiII0AgDFEtkJkmAJQoCdgGSFAILGgRBD7QOBIIMAibUFyBBj22SpJxEtsG7cSIIfQH4QACBAMAiBBn7ZBFsEAghLBIIXAAgJBDhuBkgOCyBcFIMDFEYQRBHwDIBAQIDBIIcAIMsEAobCCII0ggA9BHQJBEyUAjZBx7TCCQYRBDtu0yVIgZBizdJgGbYpQRB2mAoBEBhuBIIlJIMWggEBkBBDsA+Bydt0gUEwFJ0wFB2CDowDrBIIltWwJBGQYIaESQZBBjZBhghBCEwmJIJGCIJNJrZBhEoMAkhBDtiDDklsgEApukIIjFCIIVATwhBggjsBkhBBOIcktEEwEN0j7EIIw+fAQWkyEIIINggEbsBBEsEkwCLBiZBJgBBi2matuEwS7BgdiII2QhMgagZBCyFIIMoCCwGAgJBJyRBG2kAgMwBgMGIM41BZANJghBGgGbC4nAhu2TQMmIMugiBBDgBBDtkAyEIIIxEDgI4coBfI2D7BgETBAUCIIKPBgBBByR3k23aUQJrH2mQBYIIDsFIIIL+BpEAwEBmxBmO4ZBEiUAgwIDYQMAAoPQoEEKAJBlfYQLHyQyIpu26VAkgOBcBBBcegJBIwVAQYgCChJBq7ZBBgVtgEbBYnApBBHgJBBgEkyEBSQ9sghBetEAiYLE7EJgAUGoLRBgMkgFJEY9AgGbILVIkECZA/aIJO0iCGBEZMAILiABgEJII8BkDOFTAM0yEJEZJZBkhBbtuAIITFE2kAIJMgwENIJSkBILmkIIQ4E0GSgEkgQOBYokEwFNUhEE6RBekiwBkAIEIINIIILUBR4cBgkAEBFAgmCILtpkh6CIIsSIILSBgCGBBYMAggFDAQqhBwBBBQDJBDyFJkwLE2mSNwJBBZARBCkkDIOe2d4JBBgIvBIIcgZYYCFCIUAEAzFYMROgyBBFgMgiQgKIIMEzZBatskyZBJ2BBCwS5DkEQgIgI0hBBgEbILZlDEBESIIMCIIcAyVAXJG0gAUBahKGWEAOkEYvCoEAgYICpEEyT7J2ECoJBg0mDIgI4DIJFAgmQgEGDo+AyTmBYrxBBwQjBXgYCB6FIeQkBkGAwBBHtkEydtkBBf2mSU4ImBBYfaIIObIIe0wmSII9gkgRBAQRBeiRBBEY1JgDyDhO28mSoAdGgMkHbgCGYoRBHkEDAoVNIIVBoEAJofYhKeGATvApEEBY1hkkABAlEbAWSgBNC4BTBgENIMPQpMmBY1AgmAQAIIBwA+BSwJBBwARBgAHBwBBjhJBG7EAIIIvBzdsgBBFyFN2kCIMvadgLOGBAOQgOwidgAwJBEyVN0ESgLFBSoYCfgJBHeoJBBgECsA+CIIqGBgAOBH0ACCsEgzZBHiAyBgFiHwIPBRoMEyFIgGABoMTfa8AgxBKkkbYo0AiUAHAJBFyUEwFAAQMAkx3X4CkBBxNoghoFKwJBBGoOSYoRBDRoUkQC4CCE4MAiEBmxBIwQIE7SAB7BBByBBDtLFBIAMBbowCERh5iBoAhBCg9BgBBFIgdIXINshIdBIgIgCagLpKgBNKAQWwEYRBBggOF6AuByFNDQ9JkEAtq9BIIpNBIJTZCIKGAgEbBwnSFwUJDQ9pIIW0IIggBpEGGRNBkmTIKACBpBBF4QKBiUBDREkIILjCDocCoE2IMEDBwnABQMCoIsIkmAAoMEyQwBDoJWBIJUBIJts5KnFgRBFhMgNxWkIIQaBgMECQMQTBJBQoA+DdIcNIIkAAANIOwIQBzYdD2mSQYcE6ATBwAdEGQ8kiZBLgQ+CVwJBCMonYFgPYhYYDCAJBGwmQg3bsBBM6QjBIJfYN4STB0jpBgTpH7VbAwhBD2xBCSoIXBoEEgFt0wyH0GSU4VNIJUSIItJiVBIIu0ywbGkxuDKAQKCGQQABa4gCBtjWBoEAyRuHQZZJBCIukGYNJk36BgVkGQm0AoXagMgIIUbIJdAL4aDJVYLFDTA0t3/SIIP+AQIqBIIkAgYFB6EJgAlBII9tkmQIIUAIJPaIIYCCpETCItptu3+RBDkgMBLAJxCgECAoOAhBBDYoyVBHwMAiDFK7dghJBFMQ1rAYKACIITaB2QOCtAtBAoMApB0BIIIyJoDIBWAwCFxJBMpdt03/IImaIIImCsEEyFN2kCWwVISgS2HoDCJWYMkTYOxIIlAIIvardt0nf5JBF2xBDDIMN2BBCiUJWxJBMpEEIJDmF7QDB0mf9MnIIXfII9NwESZQMSWw/aBAPSoBNJ7YoBII2Qgj3BCIfWAYMkyf5IIQCBFQPJCINoQYWAiEBGRPAgEENoIOI2nahJBC2AkBMYMAG4JBGv+kIILFCn/yIIlsF4MNgGQhJxHAQOApMgagJBIwEAhMgfwO0QAS7CIIv27f//2Sv8k7VJ33SpJBDtpBBhEAwENIJOCV4MCSROEwEJgD+CJAMmIIWSIIubv//6V9a4W2AQRBDwmQWwOARwJBLiUBBxEETwMABY5BG22bpO//1NkiABIgU27JrC0DgCgQ+HAQXCDIMQIJOAyQeBBY1AVoJBF7dJk//5M3/5BI2AiBfAJBKLYWQIJOgIJD3BGIIID2hBCkn//M///pII+0gEBkETIJQfBkGQhoOIDocbIJwJCzf/IIP5m/+IIu2wDpBEYrvIwBBJDoIuBL4pBM71tIIQCB/+27MmDQXAhEAzZBMwhBLiQuBL4vYhMgyVNYo03/VJYoR+BIQP5QYZBCHxQCCgmABZO0iVBghfF7TOBII9//3SpMm/6TCpO/IItIghBMthBL2AlBkgLGoIxBTYZBD+hLBHwQCCm3ZIIeAoEGIJ0CIJYaKIIm2AYNpHYNt0hBKgVAkxBMtEkgVICJGEyAaKXYM2aIQJBHYVvkmTI4VJ2xBD2kCgE2yQyJAQNgkEAoEABYmkyZBBwRBLZAKeCIIl/IIP/ZYJRB5JBC2ESgE0yTILoJBBpEANYQLBghBCwZBQyxBCyd9IIX/SYO2IIsBKQNIIJUBkDFBgEbBAVsgmSpkEIKPS7a/Byf9GYNN//+ppBE0GQIJvahMAIISDDIIVIkkDIJpQCIINtIIP5GYNJm//BgPJC4WAyEAFIRBJ7BBBAAMEBYgXBoBBPa4JBEzZBDknf9pBEgmAIJvQIIOaToPQgARCwESIIMTIJYOBTYdbtukz5BEBgQpBVQRBDgEmQAwIB4FIQAcACQMbcAKMBkgFBIJVIEwlLtu0IIoMCIIwABgM2EYvABQOAIIewEANIPoXTOgJBStIDC9JBCBgWyBQVokhBDhIjGwEBkEAaIexIIUDCIVgIJnadg0tIoQgBBIYEDMoJACboYCEJQIOBoBbCIIVJg5BY0oDBXoQJDyYECgMkgQjKwBBBgRBHghZBjZfBLhBBK2gSHDoi2BIJfAIIc2IIoCCR4MkzVJGoo4DbIILG6QGF7BrCIIcTIJZ3BIIm5II0AkkQgEEDo+gIIILG7VJAwitDIJ/aGYMSgJBCbYJBEkBBBgVIgAdHgjZCBY1pkgDBgmQFIYHBhLsBIJXbtBBEsDMBIIkkIIMSIJFsCASPI22SoBsBhILEIJyqBIIdCHYObtukIItAGo9sQYSPIVoJBBgQLFIII+KIIq7BgRBGYoRpBgzFKIJVILI5BQyUAG4MSIJTsFAQeAWwIsJ6RBIhDaJIIuQgMkwBBGpEDsEkVQx3FIJSDJUhJBNydtkiDBiZBBiZBgA")); +} +var IMAGEWIDTH = 176; +var IMAGEHEIGHT = 109; + + +Graphics.prototype.setFontDancingScript = function() { + // Actual height 44 (44 - 1) + var widths = atob("DBIhFB4bGRoeFhweDQ=="); + var font = atob("AAAAAAAAAAAAAAMAAAAAAAHgAAAAAAD4AAAAAAA+AAAAAAAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD4AAAAAAD8AAAAAAD+AAAAAAD/AAAAAAD/gAAAAAH/gAAAAAH/wAAAAAH/gAAAAAP/gAAAAAP/gAAAAAf/AAAAAAf/AAAAAA/+AAAAAA/+AAAAAB/+AAAAAB/8AAAAAB/8AAAAAA/4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH/8AAAAAf//4AAAAf///AAAAf///4AAAf////AAAf/8Af4AAP/gAA/AAP/AAADwAH+AAAAcAD+AAAAHAA+AAAABwAfAAAAAcAPAAAAAHADgAAAABwB4AAAAA8AcAAAAAOAHAAAAAHgBgAAAAHwAYAAAAD4AGAAAAD+ABwAAAD/AAcAAAD/gAHgAAH/wAA+AAP/wAAH+H//4AAB////4AAAP///4AAAA///4AAAAD//gAAAAAD8AAAAAAAAAAAGAAAAAAABwAAAAAAAcAAAAAAAHAAAAAAABwAAAAAAAcAAGAAAAPAADwAAA/wAA4AAB/8AAeAAP//AAPAD//7wAHwf//w8AB////gPAA///+ABwAf//4AAcAP/+AAADAH/wAAAAQB8AAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAAAAAAB8AAAAAAAfAAAAAAAGwAAAAAABsAAAAAAAfAAAAAAAHwAAP4AAB4AAP/AAAeAAH/wAAHAAD/+AAD4AB+AgAB+AA8AAAA/gAOAAAAf8AHAAAAPvABwAAAPzwAYAAAH4eAGAAAH8HgBgAAD+B8AcAAD/AfAHAAH/AHwB4AH/gB8AP4//gAfAD///wAHwAf//wAB8AB//gAAeAAP/gAAHAAAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfwAAAAAAP+AAAAAAH/wAAAAAB/+AAAAAAcfgAAAAAEB8AB/AAAAPAA/4AAABwAf+AAAAcAP/gAAAHADwQAAABwAwABAAAcAcAAYAAHAHAAOAADwBgAHwAB4AYAD+AB+AHAB/4B/ABwB+///wAeB/P//4AH//h//8AA//4P/+AAH/4B/+AAA/8AH/AAAH8AAEAAAAAAAAAAAAAAAAAAAAAAABgAAAAAAA4AAAAAAAeAAAAAAAPAAAAAAAHwAAAAAAD8AAAAAAB/AAAAAAA/wAAAAAAe8AAAAAAPPAAAAAAHjwAAAAADw8AAAAAB4PAAwAAA8DwP+AAAeA///wAAPAP//8AAHh////AAH3////wAD////AAAB///wAAAA//88AAAAf/gPAAAAf8ADgAAAHgAA4AAAAAAAMAAAAAAAAAfwAAAAAAP+AAAAAAH/wAAAAAB/+AAAAAA8PgAAAAwEA8AAAH8AAHAAAP/AABwAA//gAAcAD/4YAAHAH/gGAABwB/ABgAAcAfgAYAAPAD4AHAADwA+ABwAB4APgAeAB+AD4AH4B/AA+AA///wAPgAP//4AD4AB//8AB+AAP/+AAfgAB//AAHwAAH/AAB8AAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4AAAAAAf/4AAAAA///gAAAB///+AAAB////wAAB////+AAA//+B/gAA//8AD8AAf+OAAPAAP8HAABwAH8BgAAcAD8A4AAHAB+AOAABwAeADgAAcAPAA4AAHADgAOAADwBwADgAA8AcAA8AA+AGAAPgAfgBgAD+A/wAYAAf//4AGAAH//8ABwAA//+AAfgAH//AAD4AAf/AAAcAAA+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAAAAHAA/AAAABwB/wAwAA8B/8AeAAPB//AHwADx//gB8AA9//wAfAAP/4IAHwAD/wAAB8AB/wAAAPAB/gAAADwB/wAAAA8A/8AAAAPA/PAAAADw/DwAAAA8/A8AAAAP/AOAAAAD/ADgAAAB/gAwAAAAAAAAAAAAAAAAABAAAAAAAH/AAAAAAD/4AAAAAB//AAAAAA//4AAOAAfA+AAf8APgHwAP/wHgA8AH/+DwAHAD//48ABwA///eAAcAeAf/AAHAHAB/gABwBwAP4AA8AYAB/AAPAGAAf4AHgBgAP/AD4AcAHv8B8AHgD5///AA8H8H//gAP/+A//wAB/+AH/4AAP/AAf8AAA/AAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwAAAAAAP/gAAeAAP/+AAPgAH//wAD8AD//+AAPAB///gAAwAfwD8AAMAPwAfAADADwADwAAwB4AAeAAcAcAAHgAHAHAAA4ADgBwAAOAB4AcAADAB8AHAAAwA/ABwAAcA/gAeAAGB/wAHwADh/4AA+AB//8AAP+D//8AAB////+AAAP///+AAAB///+AAAAP//8AAAAAf/4AAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAA4AAAAAAAeAAAAADAHgAAAAB4BwAAAAAeAIAAAAAHgAAAAAABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"); + var scale = 1; // size multiplier for this font + g.setFontCustom(font, 46, widths, 50+(scale<<8)+(1<<16)); +} + +// timeout used to update every minute +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 draw() { + var x = g.getWidth()/2; + var y = 50; + g.reset().clearRect(0,24,g.getWidth(),g.getHeight()-IMAGEHEIGHT); + if (g.getWidth() == IMAGEWIDTH) + g.drawImage(getImg(),0,g.getHeight()-IMAGEHEIGHT); + else { + let scale = g.getWidth()/IMAGEWIDTH; + y *= scale; + g.drawImage(getImg(),0,g.getHeight()-IMAGEHEIGHT*scale,{scale:scale}); + } + + var date = new Date(); + var dateStr = require("locale").date(date); + // draw time + g.setFont("DancingScript").setFontAlign(0,0).setColor("#f00"); + g.drawString(date.getHours(), x,y); + y += 43; + g.drawString(date.getMinutes().toString().padStart(2,0), x,y); + // draw date + y += 22; + g.setFontAlign(0,0).setFont("6x8"); + var p = g.getWidth()-60; + g.clearRect(p,y-4,g.getWidth()-p,y+3); // clear the background + g.drawString(dateStr,x,y); + // queue draw in one minute + queueDraw(); +} + +// 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; + } +}); +// set background colour +g.setTheme({bg:"#0ff"}); +// Clear the screen once, at startup +g.clear(); +// draw immediately at first, queue update +draw(); +// Show launcher when middle button pressed +Bangle.setUI("clock"); +// Load widgets +Bangle.loadWidgets(); +Bangle.drawWidgets(); diff --git a/apps/floralclk/app.png b/apps/floralclk/app.png new file mode 100644 index 0000000000000000000000000000000000000000..a0284226eccdda08db3135319404d62daf4d973c GIT binary patch literal 4978 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 literal 0 HcmV?d00001 From 154652e51d9d7e46e4566a3b8c70b2d2e3cc8122 Mon Sep 17 00:00:00 2001 From: Mika Dede Date: Sun, 10 Oct 2021 22:08:20 +0200 Subject: [PATCH 025/392] create new app 'score' --- apps.json | 13 ++ apps/score/ChangeLog | 1 + apps/score/score.app-icon.js | 1 + apps/score/score.app.js | 288 +++++++++++++++++++++++++++++++++++ apps/score/score.app.png | Bin 0 -> 897 bytes apps/score/score.settings.js | 81 ++++++++++ 6 files changed, 384 insertions(+) create mode 100644 apps/score/ChangeLog create mode 100644 apps/score/score.app-icon.js create mode 100644 apps/score/score.app.js create mode 100644 apps/score/score.app.png create mode 100644 apps/score/score.settings.js diff --git a/apps.json b/apps.json index 6b0703601..314504276 100644 --- a/apps.json +++ b/apps.json @@ -3554,5 +3554,18 @@ {"name":"floralclk.app.js","url":"app.js"}, {"name":"floralclk.img","url":"app-icon.js","evaluate":true} ] +}, +{ "id": "score", + "name": "Score Tracker", + "icon": "score.app.png", + "version":"0.01", + "description": "Score Tracker for sports that use plain numbers. (e.g. Badminton, Volleyball, Soccer, Table Tennis, ...)", + "tags": "b2", + "type": "app", + "storage": [ + {"name":"score.app.js","url":"score.app.js"}, + {"name":"score.settings.js","url":"score.settings.js"}, + {"name":"score.img","url":"score.app-icon.js","evaluate":true} + ] } ] diff --git a/apps/score/ChangeLog b/apps/score/ChangeLog new file mode 100644 index 000000000..5560f00bc --- /dev/null +++ b/apps/score/ChangeLog @@ -0,0 +1 @@ +0.01: New App! diff --git a/apps/score/score.app-icon.js b/apps/score/score.app-icon.js new file mode 100644 index 000000000..b1d4631ba --- /dev/null +++ b/apps/score/score.app-icon.js @@ -0,0 +1 @@ +require("heatshrink").decompress(atob("mEwxH+AH4A/AH4A/AE2IxAKSCigv/F/4vS44ABB4IECAAoKECgM7AAIJBAgQAFBQguJF6HHEhAvKGAwvy4wPB4wuGBQwdCmgJBmguGBQwvJ0ulF5AKFEgeCwQvIBQqPJ4wuHBQ4lEFw4KHF5IAQFJAALF+vNACYv/F/4v053P64vPxPXAAOJF6vP6wbCF52zCQQAB2YvTDIgvOLoWzMJQvOL6JeCss7spgIF5nPMQgvNCAQEBr4FEd6YvVAowv/F/4v4d9WzCANlndlAgOzF82JFQWJGgWJF8xgDAAReGF8RhDLo4vRABQiHABgv/F/4v/F4owTCgIuZAH4A/AH4A/ADgA==")) diff --git a/apps/score/score.app.js b/apps/score/score.app.js new file mode 100644 index 000000000..7bfadb1ce --- /dev/null +++ b/apps/score/score.app.js @@ -0,0 +1,288 @@ +require('Font5x9Numeric7Seg').add(Graphics); +require('Font7x11Numeric7Seg').add(Graphics); +require('FontTeletext5x9Ascii').add(Graphics); +require('FontTeletext10x18Ascii').add(Graphics); + +let settingsMenu = eval(require('Storage').read('score.settings.js')); +let settings = settingsMenu(null, true); + +let scores = null; +let cSet = null; + +let firstShownSet = null; + +let settingsMenuOpened = null; +let correctionMode = false; + +let w = g.getWidth(); +let h = g.getHeight(); + +function setupInputWatchers() { + if (global.BTN4) { + setWatch(() => handleInput(2), BTN2, { repeat: true }); + setWatch(() => handleInput(3), BTN1, { repeat: true }); + setWatch(() => handleInput(4), BTN3, { repeat: true }); + } else { + setWatch(() => handleInput(2), BTN, { repeat: true }); + } + Bangle.on('touch', (b, e) => { + if (b) { + if (b === 1) { + handleInput(0); + } else { + handleInput(1); + } + } else { + if (e.x < w/2) { + handleInput(0); + } else { + handleInput(1); + } + } + }) +} + +function setupMatch() { + scores = []; + for (let s = 0; s < sets(); s++) { + scores.push([0,0,null]); + } + scores.push([0,0,null]); + + scores[0][2] = getTime(); + + cSet = 0; + firstShownSet = 0 - Math.floor(setsPerPage() / 2); +} + +function showSettingsMenu() { + settingsMenuOpened = getTime(); + settingsMenu(function (s, reset) { + E.showMenu(); + + settings = s; + + if (reset) { + setupMatch(); + } else if (getTime() - settingsMenuOpened < 0.5 || correctionMode) { + correctionMode = !correctionMode; + } + + settingsMenuOpened = null; + + draw(); + }); +} + +function setsPerPage() { + return Math.min(settings.setsPerPage, sets()); +} + +function sets() { + return settings.winSets * 2 - 1; +} + +function currentSet() { + return matchEnded() ? cSet - 1 : cSet; +} + +function formatNumber(num, length) { + return num.toString().padStart(length ? length : 2,"0"); +} + +function formatDuration(duration) { + let durS = Math.floor(duration); + let durM = Math.floor(durS / 60); + let durH = Math.floor(durM / 60); + durS = durS - durM * 60; + durM = durM - durH * 60; + + durS = formatNumber(durS); + durM = formatNumber(durM); + durH = formatNumber(durH); + + let dur = null; + if (durH > 0) { + dur = durH + ':' + durM; + } else { + dur = durM + ':' + durS; + } + + return dur; +} + +function setWon(set, player) { + let pScore = scores[set][player]; + let p2Score = scores[set][~~!player]; + + let winScoreReached = pScore >= settings.winScore; + let isTwoAhead = !settings.enableTwoAhead || pScore - p2Score >= 2; + let reachedMaxScore = settings.enableMaxScore && pScore >= settings.maxScore; + + return reachedMaxScore || (winScoreReached && isTwoAhead); +} + +function setEnded(set) { + return setWon(set, 0) || setWon(set, 1); +} + +function setsWon(player) { + return Array(sets()).fill(0).map((_, s) => ~~setWon(s, player)).reduce((a,v) => a+v, 0); +} + +function matchWon(player) { + return setsWon(player) >= settings.winSets; +} + +function matchEnded() { + return matchWon(0) || matchWon(1); +} + +function matchScore(player) { + return scores.reduce((acc, val) => acc += val[player], 0); +} + +function score(player) { + let updateCurrentSet = function (val) { + cSet += val; + firstShownSet = Math.max(0, currentSet() - settings.setsPerPage + 1); + } + + if (!matchEnded() || correctionMode) { + firstShownSet = currentSet() - Math.floor(setsPerPage() / 2); + } + + if (correctionMode) { + if ( + scores[cSet][0] === 0 && scores[cSet][1] === 0 && + cSet > 0 + ) { + updateCurrentSet(-1); + } + + if (scores[cSet][player] > 0) { + scores[cSet][player]--; + } + } else { + if (matchEnded()) return; + + scores[cSet][player]++; + + if (setEnded(cSet) && cSet < sets()) { + updateCurrentSet(1); + scores[cSet][2] = getTime(); + } + + if (matchEnded()) { + firstShownSet = 0; + } + } +} + +function handleInput(button) { + if (settingsMenuOpened) { + return; + } + + switch (button) { + case 0: + case 1: + score(button); + break; + case 2: + showSettingsMenu(); + return; + case 3: + case 4: + let hLimit = currentSet(); + let lLimit = 1 - setsPerPage(); + let val = (button * 2 - 7); + firstShownSet += val; + if (firstShownSet > hLimit) firstShownSet = hLimit; + if (firstShownSet < lLimit) firstShownSet = lLimit; + break; + } + + draw(); +} + +function draw() { + g.setFontAlign(0,0); + g.clear(); + + for (let p = 0; p < 2; p++) { + if (matchWon(p)) { + g.setFontAlign(0,0); + g.setFont('Teletext10x18Ascii',1); + g.drawString("WINNER", p === 0 ? w/4 : w/4*3, 15); + } else if (matchEnded()) { + g.setFontAlign(0,-1); + + let dur1 = formatDuration(scores[cSet][2] - scores[0][2]); + g.setFont('5x9Numeric7Seg',1); + g.drawString(dur1, p === 0 ? w/8 : w/8*5, 10); + + g.setFont('Teletext5x9Ascii',1); + g.drawString((currentSet()+1) + ' set' + (currentSet() > 1 ? 's' : ''), p === 0 ? w/8*3 : w/8*7, 12); + + } + + g.setFontAlign(p === 0 ? -1 : 1,1); + g.setFont('7x11Numeric7Seg',2); + g.drawString(setsWon(p), p === 0 ? 10 : w-8, h-5); + + g.setFontAlign(p === 0 ? 1 : -1,1); + g.setFont('7x11Numeric7Seg',2); + g.drawString(formatNumber(matchScore(p), 3), p === 0 ? w/2 - 8 : w/2 + 11, h-5); + } + g.setFontAlign(0,0); + + if (correctionMode) { + g.setFont('Teletext10x18Ascii',1); + g.drawString("R", w/2, h-10); + } + + let lastShownSet = Math.min( + sets(), + currentSet() + 1, + firstShownSet+setsPerPage() + ); + let setsOnCurrentPage = Math.min( + sets(), + setsPerPage() + ); + for (let set = firstShownSet; set < lastShownSet; set++) { + if (set < 0) continue; + + let y = (h-15)/(setsOnCurrentPage+1)*(set-firstShownSet+1)+5; + + g.setFontAlign(1,0); + g.setFont('7x11Numeric7Seg',1); + g.drawString(set+1, 40, y-10); + if (scores[set+1][2] != null) { + let dur2 = formatDuration(scores[set+1][2] - scores[set][2]); + g.drawString(dur2, 40, y+10); + } + + g.setFontAlign(0,0); + g.setFont('7x11Numeric7Seg',3); + for (let p = 0; p < 2; p++) { + if (!setWon(set, p === 0 ? 1 : 0) || matchEnded()) { + g.drawString( + formatNumber(scores[set][p]), + p === 0 ? (w-20)/4+20 : (w-20)/4*3+20, + y + ); + } + } + } + + // draw separator + g.drawLine(w/2,20,w/2,h-25); + + g.flip(); +} + +setupInputWatchers(); +setupMatch(); +draw(); diff --git a/apps/score/score.app.png b/apps/score/score.app.png new file mode 100644 index 0000000000000000000000000000000000000000..c1e7e22157fc295811c8b0291dd736d7d1878e5a GIT binary patch literal 897 zcmV-{1AhF8P)-q;>a)qdEv4t%nBoLyDDR~j<9&`&l zbnlXgNO%l7dGZn+>{ierq}uY3iGi7fhrmBe8YsJ!ZRKF5hsneX&? z@7wQvzu)iun+1IM@Zsag;`zG|(=XDKQ*LtI)|9FZ5{3?d@yx}|bz4*5QaZvo_5oOy zko+<=h%Gt*3K0Na?esrO?pyOcToDvOX{aMREff?CXj)klm;(SLM)Dl%$jTK2(7J#y z^yO~k;SR%E0h9SdgF=K%2d(B02Tg-mP_#jFpEUrJd6qArQo9mtxf&DA=4r8L3>7!4 zYT9w>u4LHm0lKe`mM57SG_L|kWOZVz^-?kMX^$|#^ zgzW@QxI(xVp)>ZTop4XqJs`B!xIRIGx}T#ZQ~TIgzz@J{RJ{l6KYO`()yg>E zR8B~V0^f2P0AOxi)5qJI_;Sl1z{-<@_}do^q4IMkUt;=KZ=qx?`uZT>gU_>LRIK37 zyk{j&XUF~?@GJmY;fORBMb-9>SAu5&{M}yfVbd;b3>hJ8$b27Co&~V*tDNH60KwUY zvW;Z3VQ29-UkMyNCEP$dLvf|GeAYj>7DPHj(c5O6{co2kmyTxvj4!IVaZW^gOhmF- zuw?)98pWGszQ>SfOGslt|AdUOc?D|)22}&r3JhcO3i>Bx-v1JuRY0A%?Br*Au%!Z{ zvkFFM6~`L>J>WG?TmUO>iZkH*f6~-p34j27y9tMxh%nLz=B}ndSf3kOK79D_;ST-* XivUhVT==`h00000NkvXXu0mjflmwo` literal 0 HcmV?d00001 diff --git a/apps/score/score.settings.js b/apps/score/score.settings.js new file mode 100644 index 000000000..dde77a225 --- /dev/null +++ b/apps/score/score.settings.js @@ -0,0 +1,81 @@ +(function (back, ret) { + + const fileName = 'score.json' + let settings = require('Storage').readJSON(fileName, 1) || {}; + const offon = ['No', 'Yes']; + + let changed = false; + + function save(key, value) { + changed = true; + settings[key] = value; + if (key === 'winScore' && settings.maxScore < value) { + settings.maxScore = value; + } + require('Storage').writeJSON(fileName, settings); + } + + if (!settings.winSets) { + settings.winSets = 1; + } + if (!settings.winScore) { + settings.winScore = 21; + } + if (!settings.enableTwoAhead) { + settings.enableTwoAhead = true; + } + if (!settings.enableMaxScore) { + settings.enableMaxScore = true; + } + if (!settings.maxScore) { + settings.maxScore = 30; + } + if (!settings.setsPerPage) { + settings.setsPerPage = 5; + } + + if (ret) { + return settings; + } + + const appMenu = {}; + appMenu[''] = {'title': 'Score Settings'}, + appMenu['< Back'] = function () { back(settings, changed); }; + if (reset) { + appMenu['Reset match'] = function () { back(settings, true); }; + } + appMenu['Sets to win'] = { + value: settings.winSets, + min:1, + onchange: m => save('winSets', m) + }; + appMenu['Sets per page'] = { + value: settings.setsPerPage, + min:1, + max:5, + onchange: m => save('setsPerPage', m) + }; + appMenu['Score to win'] = { + value: settings.winScore, + min:1, + onchange: m => save('winScore', m) + }; + appMenu['2-point lead'] = { + value: settings['enableTwoAhead'], + format: m => offon[~~m], + onchange: m => save('enableTwoAhead', m) + }; + appMenu['Maximum score?'] = { + value: settings['enableMaxScore'], + format: m => offon[~~m], + onchange: m => save('enableMaxScore', m) + }; + appMenu['Maximum score'] = { + value: settings.maxScore, + min: settings.winScore, + onchange: m => save('maxScore', m) + }; + + E.showMenu(appMenu) + +}) From 2b612de6f6281651ccc611f77eef9d348880492e Mon Sep 17 00:00:00 2001 From: Mika Dede Date: Mon, 27 Sep 2021 03:45:48 +0200 Subject: [PATCH 026/392] score: refactor and fix settings --- apps/score/score.settings.js | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/apps/score/score.settings.js b/apps/score/score.settings.js index dde77a225..4843b4a4c 100644 --- a/apps/score/score.settings.js +++ b/apps/score/score.settings.js @@ -15,22 +15,22 @@ require('Storage').writeJSON(fileName, settings); } - if (!settings.winSets) { + if (!settings.winSets == null) { settings.winSets = 1; } - if (!settings.winScore) { + if (!settings.winScore == null) { settings.winScore = 21; } - if (!settings.enableTwoAhead) { + if (!settings.enableTwoAhead == null) { settings.enableTwoAhead = true; } - if (!settings.enableMaxScore) { + if (settings.enableMaxScore == null) { settings.enableMaxScore = true; } - if (!settings.maxScore) { + if (!settings.maxScore == null) { settings.maxScore = 30; } - if (!settings.setsPerPage) { + if (!settings.setsPerPage == null) { settings.setsPerPage = 5; } @@ -61,12 +61,12 @@ onchange: m => save('winScore', m) }; appMenu['2-point lead'] = { - value: settings['enableTwoAhead'], + value: settings.enableTwoAhead, format: m => offon[~~m], onchange: m => save('enableTwoAhead', m) }; appMenu['Maximum score?'] = { - value: settings['enableMaxScore'], + value: settings.enableMaxScore, format: m => offon[~~m], onchange: m => save('enableMaxScore', m) }; From e598c4abf691bdbc052d9464e2419984a21dbe33 Mon Sep 17 00:00:00 2001 From: Mika Dede Date: Mon, 27 Sep 2021 03:46:03 +0200 Subject: [PATCH 027/392] score: fix maxScore --- apps/score/score.app.js | 6 +++++- apps/score/score.settings.js | 2 +- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/apps/score/score.app.js b/apps/score/score.app.js index 7bfadb1ce..dbe9f74ef 100644 --- a/apps/score/score.app.js +++ b/apps/score/score.app.js @@ -74,6 +74,10 @@ function showSettingsMenu() { }); } +function maxScore() { + return Math.max(settings.maxScore, settings.winScore); +} + function setsPerPage() { return Math.min(settings.setsPerPage, sets()); } @@ -117,7 +121,7 @@ function setWon(set, player) { let winScoreReached = pScore >= settings.winScore; let isTwoAhead = !settings.enableTwoAhead || pScore - p2Score >= 2; - let reachedMaxScore = settings.enableMaxScore && pScore >= settings.maxScore; + let reachedMaxScore = settings.enableMaxScore && pScore >= maxScore(); return reachedMaxScore || (winScoreReached && isTwoAhead); } diff --git a/apps/score/score.settings.js b/apps/score/score.settings.js index 4843b4a4c..d1a4332fd 100644 --- a/apps/score/score.settings.js +++ b/apps/score/score.settings.js @@ -72,7 +72,7 @@ }; appMenu['Maximum score'] = { value: settings.maxScore, - min: settings.winScore, + min: 1, onchange: m => save('maxScore', m) }; From 7a68984626ce8eace5e55d9a5be86fa30a3b9872 Mon Sep 17 00:00:00 2001 From: Mika Dede Date: Mon, 27 Sep 2021 03:40:55 +0200 Subject: [PATCH 028/392] score: fix set/sets display --- apps/score/score.app.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/score/score.app.js b/apps/score/score.app.js index dbe9f74ef..7e02f8dfe 100644 --- a/apps/score/score.app.js +++ b/apps/score/score.app.js @@ -227,7 +227,7 @@ function draw() { g.drawString(dur1, p === 0 ? w/8 : w/8*5, 10); g.setFont('Teletext5x9Ascii',1); - g.drawString((currentSet()+1) + ' set' + (currentSet() > 1 ? 's' : ''), p === 0 ? w/8*3 : w/8*7, 12); + g.drawString((currentSet()+1) + ' set' + (currentSet() > 0 ? 's' : ''), p === 0 ? w/8*3 : w/8*7, 12); } From dcd15516f14696c9cff94b09bcf019b7f7a14a32 Mon Sep 17 00:00:00 2001 From: Mika Dede Date: Mon, 27 Sep 2021 03:41:15 +0200 Subject: [PATCH 029/392] score: add tennis scoring --- apps.json | 2 +- apps/score/score.app.js | 66 ++++++++++++++++++++++++++++++------ apps/score/score.settings.js | 8 +++++ 3 files changed, 64 insertions(+), 12 deletions(-) diff --git a/apps.json b/apps.json index 314504276..c98686e72 100644 --- a/apps.json +++ b/apps.json @@ -3559,7 +3559,7 @@ "name": "Score Tracker", "icon": "score.app.png", "version":"0.01", - "description": "Score Tracker for sports that use plain numbers. (e.g. Badminton, Volleyball, Soccer, Table Tennis, ...)", + "description": "Score Tracker for sports that use plain numbers (e.g. Badminton, Volleyball, Soccer, Table Tennis, ...). Also supports tennis scoring.", "tags": "b2", "type": "app", "storage": [ diff --git a/apps/score/score.app.js b/apps/score/score.app.js index 7e02f8dfe..11d158440 100644 --- a/apps/score/score.app.js +++ b/apps/score/score.app.js @@ -6,7 +6,10 @@ require('FontTeletext10x18Ascii').add(Graphics); let settingsMenu = eval(require('Storage').read('score.settings.js')); let settings = settingsMenu(null, true); +let tennisScores = ['00','15','30','40','DC','AD'] + let scores = null; +let tScores = null; let cSet = null; let firstShownSet = null; @@ -49,6 +52,12 @@ function setupMatch() { } scores.push([0,0,null]); + if (settings.enableTennisScoring) { + tScores = [0,0]; + } else { + tScores = null; + } + scores[0][2] = getTime(); cSet = 0; @@ -170,7 +179,22 @@ function score(player) { } else { if (matchEnded()) return; - scores[cSet][player]++; + if (settings.enableTennisScoring) { + if (tScores[player] === 4 && tScores[~~!player] === 5) { // DC : AD + tScores[~~!player]--; + } else if (tScores[player] === 2 && tScores[~~!player] === 3) { // 30 : 40 + tScores[0] = 4; + tScores[1] = 4; + } else if (tScores[player] === 3 || tScores[player] === 5) { // 40 / AD + tScores[0] = 0; + tScores[1] = 0; + scores[cSet][player]++; + } else { + tScores[player]++; + } + } else { + scores[cSet][player]++; + } if (setEnded(cSet) && cSet < sets()) { updateCurrentSet(1); @@ -235,9 +259,11 @@ function draw() { g.setFont('7x11Numeric7Seg',2); g.drawString(setsWon(p), p === 0 ? 10 : w-8, h-5); - g.setFontAlign(p === 0 ? 1 : -1,1); - g.setFont('7x11Numeric7Seg',2); - g.drawString(formatNumber(matchScore(p), 3), p === 0 ? w/2 - 8 : w/2 + 11, h-5); + if (!settings.enableTennisScoring) { + g.setFontAlign(p === 0 ? 1 : -1,1); + g.setFont('7x11Numeric7Seg',2); + g.drawString(formatNumber(matchScore(p), 3), p === 0 ? w/2 - 8 : w/2 + 11, h-5); + } } g.setFontAlign(0,0); @@ -268,15 +294,33 @@ function draw() { g.drawString(dur2, 40, y+10); } - g.setFontAlign(0,0); - g.setFont('7x11Numeric7Seg',3); for (let p = 0; p < 2; p++) { if (!setWon(set, p === 0 ? 1 : 0) || matchEnded()) { - g.drawString( - formatNumber(scores[set][p]), - p === 0 ? (w-20)/4+20 : (w-20)/4*3+20, - y - ); + if (settings.enableTennisScoring && set === cSet) { + g.setFontAlign(0,0); + g.setFont('7x11Numeric7Seg',3); + g.drawString( + formatNumber(tennisScores[tScores[p]]), + p === 0 ? (w-20)/4+20 : (w-20)/4*3+2, + y + ); + + g.setFontAlign(p === 0 ? 1 : -1,0); + g.setFont('7x11Numeric7Seg',1); + g.drawString( + formatNumber(scores[set][p]), + p === 0 ? w/2-5 : w/2+6, + y + ); + } else { + g.setFontAlign(0,0); + g.setFont('7x11Numeric7Seg',3); + g.drawString( + formatNumber(scores[set][p]), + p === 0 ? (w-20)/4+20 : (w-20)/4*3+2, + y + ); + } } } } diff --git a/apps/score/score.settings.js b/apps/score/score.settings.js index d1a4332fd..7d058f07f 100644 --- a/apps/score/score.settings.js +++ b/apps/score/score.settings.js @@ -33,6 +33,9 @@ if (!settings.setsPerPage == null) { settings.setsPerPage = 5; } + if (!settings.enableTennisScoring == null) { + settings.enableTennisScoring = false; + } if (ret) { return settings; @@ -75,6 +78,11 @@ min: 1, onchange: m => save('maxScore', m) }; + appMenu['Tennis scoring'] = { + value: settings.enableTennisScoring, + format: m => offon[~~m], + onchange: m => save('enableTennisScoring', m) + }; E.showMenu(appMenu) From a6a5f674a090473e1396647ea19e4e2a3f2c29d2 Mon Sep 17 00:00:00 2001 From: Mika Dede Date: Mon, 27 Sep 2021 03:59:24 +0200 Subject: [PATCH 030/392] score: fix commit 58c7b6c4 --- apps/score/score.settings.js | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/apps/score/score.settings.js b/apps/score/score.settings.js index 7d058f07f..ab8b8fb85 100644 --- a/apps/score/score.settings.js +++ b/apps/score/score.settings.js @@ -15,25 +15,25 @@ require('Storage').writeJSON(fileName, settings); } - if (!settings.winSets == null) { + if (settings.winSets == null) { settings.winSets = 1; } - if (!settings.winScore == null) { + if (settings.winScore == null) { settings.winScore = 21; } - if (!settings.enableTwoAhead == null) { + if (settings.enableTwoAhead == null) { settings.enableTwoAhead = true; } if (settings.enableMaxScore == null) { settings.enableMaxScore = true; } - if (!settings.maxScore == null) { + if (settings.maxScore == null) { settings.maxScore = 30; } - if (!settings.setsPerPage == null) { + if (settings.setsPerPage == null) { settings.setsPerPage = 5; } - if (!settings.enableTennisScoring == null) { + if (settings.enableTennisScoring == null) { settings.enableTennisScoring = false; } From a441d423a417538969d8fd6b39c73e0043acddfe Mon Sep 17 00:00:00 2001 From: Mika Dede Date: Mon, 27 Sep 2021 04:27:27 +0200 Subject: [PATCH 031/392] score: refactor --- apps/score/score.app.js | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/apps/score/score.app.js b/apps/score/score.app.js index 11d158440..2052df226 100644 --- a/apps/score/score.app.js +++ b/apps/score/score.app.js @@ -6,7 +6,7 @@ require('FontTeletext10x18Ascii').add(Graphics); let settingsMenu = eval(require('Storage').read('score.settings.js')); let settings = settingsMenu(null, true); -let tennisScores = ['00','15','30','40','DC','AD'] +let tennisScores = ['00','15','30','40','DC','AD']; let scores = null; let tScores = null; @@ -42,7 +42,7 @@ function setupInputWatchers() { handleInput(1); } } - }) + }); } function setupMatch() { @@ -159,17 +159,14 @@ function score(player) { let updateCurrentSet = function (val) { cSet += val; firstShownSet = Math.max(0, currentSet() - settings.setsPerPage + 1); - } + }; if (!matchEnded() || correctionMode) { firstShownSet = currentSet() - Math.floor(setsPerPage() / 2); } if (correctionMode) { - if ( - scores[cSet][0] === 0 && scores[cSet][1] === 0 && - cSet > 0 - ) { + if (scores[cSet][0] === 0 && scores[cSet][1] === 0 && cSet > 0) { updateCurrentSet(-1); } From 4c6e9a086049d1250f49cc499df99c2c807b54cd Mon Sep 17 00:00:00 2001 From: Mika Dede Date: Mon, 27 Sep 2021 04:34:30 +0200 Subject: [PATCH 032/392] score: tennis scoring: allow corrections --- apps/score/score.app.js | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/apps/score/score.app.js b/apps/score/score.app.js index 2052df226..636d3a97e 100644 --- a/apps/score/score.app.js +++ b/apps/score/score.app.js @@ -171,7 +171,12 @@ function score(player) { } if (scores[cSet][player] > 0) { - scores[cSet][player]--; + if (tScores[player] === 0 && tScores[~~!player] === 0) { + scores[cSet][player]--; + } else { + tScores[player] = 0; + tScores[~~!player] = 0; + } } } else { if (matchEnded()) return; From c45781bc8b536c91718ecb67ef25d94cbaaa90c9 Mon Sep 17 00:00:00 2001 From: Mika Dede Date: Mon, 27 Sep 2021 04:42:35 +0200 Subject: [PATCH 033/392] score: add README --- apps/score/README.md | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 apps/score/README.md diff --git a/apps/score/README.md b/apps/score/README.md new file mode 100644 index 000000000..cdb34902c --- /dev/null +++ b/apps/score/README.md @@ -0,0 +1,37 @@ +This app will allow you to keep scores for most kinds of sports. + +# Keybinds +*On Bangle.js 2 BTN is equivalent to BTN2 on Bangle.js 1* +| Keybinding | Description | +|-------------------|------------------------------| +| `BTN1` | Scroll up | +| `BTN3` | Scroll down | +| `BTN2` | Menu | +| tap on left side | increment left player score | +| tap on right side | increment right player score | + +To correct a falsely awarded point simply open and close the menu within .5 seconds. This will put the app into correction mode (indicated by the `R`). +In this mode any score increments will be decrements. To move back a set, reduce both players scores to 0, then decrement one of the scores once again. + +# Settings +| Setting | Description | +|----------------|------------------------------------------------------------------------------------------------------------------------------| +| Sets to win | How many sets a player has to win before the match is won (Maximum sets: this*2-1) | +| Sets per page | How many sets should be shown in the app. Further sets will be available by scrolling (ignored if higher than `Sets to win`) | +| Score to win | What score ends a given set | +| 2-point lead | Does winning a set require a two-point lead | +| Maximum score? | Should there be a maximum score, at which point the two-point lead rule falls away | +| Maximum score | At which score should the two-point lead rule fall away (ignored if lower than Sets to win) | +| Tennis scoring | If enabled, each point in a set will require a full tennis game | + +The settings can be changed both from within the app by simply pressing `BTN2` (`BTN1` on Bangle.js 2) or in the `App Settings` in the `Settings` app. + +If changes are made to the settings from within the app, a new match will automatically be initialized upon exiting the settings. + +By default the settings will reflect Badminton rules. + +## Tennis Scoring +While tennis scoring is available, correcting in this mode will reset to the beginning of the current game. +Resetting at the beginning of the current game will reset to the beginning of the previous game, leaving the user to fast-forward to the correct score once again. + +This might get changed at some point. From 97166e0d1a876c8ddbea00b12afcd7cd99b2bde1 Mon Sep 17 00:00:00 2001 From: Mika Dede Date: Mon, 27 Sep 2021 13:45:23 +0200 Subject: [PATCH 034/392] score: refactor settings --- apps/score/score.settings.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/apps/score/score.settings.js b/apps/score/score.settings.js index ab8b8fb85..b7a2fefad 100644 --- a/apps/score/score.settings.js +++ b/apps/score/score.settings.js @@ -18,6 +18,9 @@ if (settings.winSets == null) { settings.winSets = 1; } + if (settings.setsPerPage == null) { + settings.setsPerPage = 5; + } if (settings.winScore == null) { settings.winScore = 21; } @@ -30,9 +33,6 @@ if (settings.maxScore == null) { settings.maxScore = 30; } - if (settings.setsPerPage == null) { - settings.setsPerPage = 5; - } if (settings.enableTennisScoring == null) { settings.enableTennisScoring = false; } From c0a18add642da63d9afd74b740e06474587f4509 Mon Sep 17 00:00:00 2001 From: Mika Dede Date: Mon, 27 Sep 2021 13:47:22 +0200 Subject: [PATCH 035/392] score: implement tie-breaks instead of fixed max scores --- apps/score/score.app.js | 86 ++++++++++++++++++++++++++++++------ apps/score/score.settings.js | 39 ++++++++++++++++ 2 files changed, 111 insertions(+), 14 deletions(-) diff --git a/apps/score/score.app.js b/apps/score/score.app.js index 636d3a97e..2566d6922 100644 --- a/apps/score/score.app.js +++ b/apps/score/score.app.js @@ -48,9 +48,9 @@ function setupInputWatchers() { function setupMatch() { scores = []; for (let s = 0; s < sets(); s++) { - scores.push([0,0,null]); + scores.push([0,0,null,0,0]); } - scores.push([0,0,null]); + scores.push([0,0,null,0,0]); if (settings.enableTennisScoring) { tScores = [0,0]; @@ -87,6 +87,10 @@ function maxScore() { return Math.max(settings.maxScore, settings.winScore); } +function tiebreakMaxScore() { + return Math.max(settings.maxScoreTiebreakMaxScore, settings.maxScoreTiebreakWinScore); +} + function setsPerPage() { return Math.min(settings.setsPerPage, sets()); } @@ -99,6 +103,11 @@ function currentSet() { return matchEnded() ? cSet - 1 : cSet; } +function shouldTiebreak() { + return settings.enableMaxScoreTiebreak && + scores[cSet][0] + scores[cSet][1] === (maxScore() - 1) * 2; +} + function formatNumber(num, length) { return num.toString().padStart(length ? length : 2,"0"); } @@ -124,15 +133,30 @@ function formatDuration(duration) { return dur; } +function tiebreakWon(set, player) { + let pScore = scores[set][3+player]; + let p2Score = scores[set][3+~~!player]; + + let winScoreReached = pScore >= settings.maxScoreTiebreakWinScore; + let isTwoAhead = !settings.maxScoreTiebreakEnableTwoAhead || pScore - p2Score >= 2; + let reachedMaxScore = settings.maxScoreTiebreakEnableMaxScore && pScore >= tiebreakMaxScore(); + + return reachedMaxScore || (winScoreReached && isTwoAhead); +} + function setWon(set, player) { let pScore = scores[set][player]; let p2Score = scores[set][~~!player]; let winScoreReached = pScore >= settings.winScore; let isTwoAhead = !settings.enableTwoAhead || pScore - p2Score >= 2; + let tiebreakW = tiebreakWon(set, player); let reachedMaxScore = settings.enableMaxScore && pScore >= maxScore(); - return reachedMaxScore || (winScoreReached && isTwoAhead); + return ( + (settings.enableMaxScoreTiebreak ? tiebreakW : reachedMaxScore) || + (winScoreReached && isTwoAhead) + ); } function setEnded(set) { @@ -166,11 +190,19 @@ function score(player) { } if (correctionMode) { - if (scores[cSet][0] === 0 && scores[cSet][1] === 0 && cSet > 0) { + if ( + scores[cSet][0] === 0 && scores[cSet][1] === 0 && + scores[cSet][3] === 0 && scores[cSet][4] === 0 && + cSet > 0 + ) { updateCurrentSet(-1); } - if (scores[cSet][player] > 0) { + if (scores[cSet][3] > 0 || scores[cSet][4] > 0) { + if (scores[cSet][3+player] > 0) { + scores[cSet][3+player]--; + } + } else if (scores[cSet][player] > 0) { if (tScores[player] === 0 && tScores[~~!player] === 0) { scores[cSet][player]--; } else { @@ -181,7 +213,9 @@ function score(player) { } else { if (matchEnded()) return; - if (settings.enableTennisScoring) { + if (shouldTiebreak()) { + scores[cSet][3+player]++; + } else if (settings.enableTennisScoring) { if (tScores[player] === 4 && tScores[~~!player] === 5) { // DC : AD tScores[~~!player]--; } else if (tScores[player] === 2 && tScores[~~!player] === 3) { // 30 : 40 @@ -199,6 +233,9 @@ function score(player) { } if (setEnded(cSet) && cSet < sets()) { + if (shouldTiebreak()) { + scores[cSet][player]++; + } updateCurrentSet(1); scores[cSet][2] = getTime(); } @@ -298,20 +335,23 @@ function draw() { for (let p = 0; p < 2; p++) { if (!setWon(set, p === 0 ? 1 : 0) || matchEnded()) { - if (settings.enableTennisScoring && set === cSet) { + let bigNumX = p === 0 ? (w-20)/4+18 : (w-20)/4*3+4; + let smallNumX = p === 0 ? w/2-2 : w/2+3; + + if (settings.enableTennisScoring && set === cSet && !shouldTiebreak()) { g.setFontAlign(0,0); g.setFont('7x11Numeric7Seg',3); g.drawString( formatNumber(tennisScores[tScores[p]]), - p === 0 ? (w-20)/4+20 : (w-20)/4*3+2, + bigNumX, y ); - - g.setFontAlign(p === 0 ? 1 : -1,0); - g.setFont('7x11Numeric7Seg',1); + } else if (shouldTiebreak() && set === cSet) { + g.setFontAlign(0,0); + g.setFont('7x11Numeric7Seg',3); g.drawString( - formatNumber(scores[set][p]), - p === 0 ? w/2-5 : w/2+6, + formatNumber(scores[set][3+p], 3), + bigNumX, y ); } else { @@ -319,7 +359,25 @@ function draw() { g.setFont('7x11Numeric7Seg',3); g.drawString( formatNumber(scores[set][p]), - p === 0 ? (w-20)/4+20 : (w-20)/4*3+2, + bigNumX, + y + ); + } + + if ((shouldTiebreak() || settings.enableTennisScoring) && set === cSet) { + g.setFontAlign(p === 0 ? 1 : -1,0); + g.setFont('7x11Numeric7Seg',1); + g.drawString( + formatNumber(scores[set][p]), + smallNumX, + y + ); + } else if ((scores[set][3] !== 0 || scores[set][4] !== 0) && set !== cSet) { + g.setFontAlign(p === 0 ? 1 : -1,0); + g.setFont('7x11Numeric7Seg',1); + g.drawString( + formatNumber(scores[set][3+p], 3), + smallNumX, y ); } diff --git a/apps/score/score.settings.js b/apps/score/score.settings.js index b7a2fefad..c1a0382d2 100644 --- a/apps/score/score.settings.js +++ b/apps/score/score.settings.js @@ -37,6 +37,22 @@ settings.enableTennisScoring = false; } + if (settings.enableMaxScoreTiebreak == null) { + settings.enableMaxScoreTiebreak = false; + } + if (settings.maxScoreTiebreakWinScore == null) { + settings.maxScoreTiebreakWinScore = 6; + } + if (settings.maxScoreTiebreakEnableTwoAhead == null) { + settings.maxScoreTiebreakEnableTwoAhead = true; + } + if (settings.maxScoreTiebreakEnableMaxScore == null) { + settings.maxScoreTiebreakEnableMaxScore = false; + } + if (settings.maxScoreTiebreakMaxScore == null) { + settings.maxScoreTiebreakMaxScore = 15; + } + if (ret) { return settings; } @@ -83,6 +99,29 @@ format: m => offon[~~m], onchange: m => save('enableTennisScoring', m) }; + appMenu['TB sets?'] = { + value: settings.enableMaxScoreTiebreak, + format: m => offon[~~m], + onchange: m => save('enableMaxScoreTiebreak', m) + } + appMenu['TB Score to win'] = { + value: settings.maxScoreTiebreakWinScore, + onchange: m => save('maxScoreTiebreakWinScore', m) + } + appMenu['TB 2-point lead'] = { + value: settings.maxScoreTiebreakEnableTwoAhead, + format: m => offon[~~m], + onchange: m => save('maxScoreTiebreakEnableTwoAhead', m) + } + appMenu['TB max score?'] = { + value: settings.maxScoreTiebreakEnableMaxScore, + format: m => offon[~~m], + onchange: m => save('maxScoreTiebreakEnableMaxScore', m) + } + appMenu['TB max score'] = { + value: settings.maxScoreTiebreakMaxScore, + onchange: m => save('maxScoreTiebreakMaxScore', m) + } E.showMenu(appMenu) From de2e897119b4644fd2744ca35ff4644a79e0e391 Mon Sep 17 00:00:00 2001 From: Mika Dede Date: Mon, 27 Sep 2021 13:47:49 +0200 Subject: [PATCH 036/392] score: always disable correction mode on new match --- apps/score/score.app.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/apps/score/score.app.js b/apps/score/score.app.js index 2566d6922..053a8df43 100644 --- a/apps/score/score.app.js +++ b/apps/score/score.app.js @@ -62,6 +62,8 @@ function setupMatch() { cSet = 0; firstShownSet = 0 - Math.floor(setsPerPage() / 2); + + correctionMode = false; } function showSettingsMenu() { From 64930265d7cf00a032894e239c65890a007f2948 Mon Sep 17 00:00:00 2001 From: Mika Dede Date: Mon, 27 Sep 2021 13:48:12 +0200 Subject: [PATCH 037/392] score: fix automatic scrolling on score --- apps/score/score.app.js | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/apps/score/score.app.js b/apps/score/score.app.js index 053a8df43..9f22927af 100644 --- a/apps/score/score.app.js +++ b/apps/score/score.app.js @@ -182,13 +182,16 @@ function matchScore(player) { } function score(player) { + let setFirstShownSet = function () { + firstShownSet = currentSet() - Math.floor(setsPerPage() / 2); + }; let updateCurrentSet = function (val) { cSet += val; - firstShownSet = Math.max(0, currentSet() - settings.setsPerPage + 1); + setFirstShownSet(); }; if (!matchEnded() || correctionMode) { - firstShownSet = currentSet() - Math.floor(setsPerPage() / 2); + setFirstShownSet(); } if (correctionMode) { From 1983c37a819005179be5cc9b0cd410d272271973 Mon Sep 17 00:00:00 2001 From: Mika Dede Date: Mon, 27 Sep 2021 13:53:24 +0200 Subject: [PATCH 038/392] score: document tiebreaks --- apps/score/README.md | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/apps/score/README.md b/apps/score/README.md index cdb34902c..ffd35e065 100644 --- a/apps/score/README.md +++ b/apps/score/README.md @@ -14,15 +14,17 @@ To correct a falsely awarded point simply open and close the menu within .5 seco In this mode any score increments will be decrements. To move back a set, reduce both players scores to 0, then decrement one of the scores once again. # Settings -| Setting | Description | -|----------------|------------------------------------------------------------------------------------------------------------------------------| -| Sets to win | How many sets a player has to win before the match is won (Maximum sets: this*2-1) | -| Sets per page | How many sets should be shown in the app. Further sets will be available by scrolling (ignored if higher than `Sets to win`) | -| Score to win | What score ends a given set | -| 2-point lead | Does winning a set require a two-point lead | -| Maximum score? | Should there be a maximum score, at which point the two-point lead rule falls away | -| Maximum score | At which score should the two-point lead rule fall away (ignored if lower than Sets to win) | -| Tennis scoring | If enabled, each point in a set will require a full tennis game | +| Setting | Description | +|------------------------------------|------------------------------------------------------------------------------------------------------------------------------| +| `Sets to win` | How many sets a player has to win before the match is won (Maximum sets: this*2-1) | +| `Sets per page` | How many sets should be shown in the app. Further sets will be available by scrolling (ignored if higher than `Sets to win`) | +| `Score to win` | What score ends a given set | +| `2-point lead` | Does winning a set require a two-point lead | +| `Maximum score?` | Should there be a maximum score, at which point the two-point lead rule falls away | +| `Maximum score` | At which score should the two-point lead rule fall away (ignored if lower than Sets to win) | +| `Tennis scoring` | If enabled, each point in a set will require a full tennis game | +| `TB sets?` | Should sets that have reached `(maxScore-1):(maxScore-1)` be decided with a tiebreak | +| All other options starting with TB | Equivalent to option with same name but applied to tiebreaks | The settings can be changed both from within the app by simply pressing `BTN2` (`BTN1` on Bangle.js 2) or in the `App Settings` in the `Settings` app. From 506918e77239cd67a7a78865670d82cc310473a3 Mon Sep 17 00:00:00 2001 From: Mika Dede Date: Mon, 27 Sep 2021 23:04:22 +0200 Subject: [PATCH 039/392] score: fix code style (indent by 2 spaces) --- apps/score/score.app.js | 554 +++++++++++++++++------------------ apps/score/score.settings.js | 232 +++++++-------- 2 files changed, 393 insertions(+), 393 deletions(-) diff --git a/apps/score/score.app.js b/apps/score/score.app.js index 9f22927af..7f0b04a59 100644 --- a/apps/score/score.app.js +++ b/apps/score/score.app.js @@ -21,93 +21,93 @@ let w = g.getWidth(); let h = g.getHeight(); function setupInputWatchers() { - if (global.BTN4) { - setWatch(() => handleInput(2), BTN2, { repeat: true }); - setWatch(() => handleInput(3), BTN1, { repeat: true }); - setWatch(() => handleInput(4), BTN3, { repeat: true }); + if (global.BTN4) { + setWatch(() => handleInput(2), BTN2, { repeat: true }); + setWatch(() => handleInput(3), BTN1, { repeat: true }); + setWatch(() => handleInput(4), BTN3, { repeat: true }); + } else { + setWatch(() => handleInput(2), BTN, { repeat: true }); + } + Bangle.on('touch', (b, e) => { + if (b) { + if (b === 1) { + handleInput(0); + } else { + handleInput(1); + } } else { - setWatch(() => handleInput(2), BTN, { repeat: true }); + if (e.x < w/2) { + handleInput(0); + } else { + handleInput(1); + } } - Bangle.on('touch', (b, e) => { - if (b) { - if (b === 1) { - handleInput(0); - } else { - handleInput(1); - } - } else { - if (e.x < w/2) { - handleInput(0); - } else { - handleInput(1); - } - } - }); + }); } function setupMatch() { - scores = []; - for (let s = 0; s < sets(); s++) { - scores.push([0,0,null,0,0]); - } + scores = []; + for (let s = 0; s < sets(); s++) { scores.push([0,0,null,0,0]); + } + scores.push([0,0,null,0,0]); - if (settings.enableTennisScoring) { - tScores = [0,0]; - } else { - tScores = null; - } + if (settings.enableTennisScoring) { + tScores = [0,0]; + } else { + tScores = null; + } - scores[0][2] = getTime(); + scores[0][2] = getTime(); - cSet = 0; - firstShownSet = 0 - Math.floor(setsPerPage() / 2); + cSet = 0; + firstShownSet = 0 - Math.floor(setsPerPage() / 2); - correctionMode = false; + correctionMode = false; } function showSettingsMenu() { - settingsMenuOpened = getTime(); - settingsMenu(function (s, reset) { - E.showMenu(); + settingsMenuOpened = getTime(); + settingsMenu(function (s, reset) { + E.showMenu(); - settings = s; + settings = s; - if (reset) { - setupMatch(); - } else if (getTime() - settingsMenuOpened < 0.5 || correctionMode) { - correctionMode = !correctionMode; - } + if (reset) { + setupMatch(); + } else if (getTime() - settingsMenuOpened < 0.5 || correctionMode) { + correctionMode = !correctionMode; + } - settingsMenuOpened = null; + settingsMenuOpened = null; - draw(); - }); + draw(); + }); } function maxScore() { - return Math.max(settings.maxScore, settings.winScore); + return Math.max(settings.maxScore, settings.winScore); } function tiebreakMaxScore() { - return Math.max(settings.maxScoreTiebreakMaxScore, settings.maxScoreTiebreakWinScore); + return Math.max(settings.maxScoreTiebreakMaxScore, settings.maxScoreTiebreakWinScore); } function setsPerPage() { - return Math.min(settings.setsPerPage, sets()); + return Math.min(settings.setsPerPage, sets()); } function sets() { - return settings.winSets * 2 - 1; + return settings.winSets * 2 - 1; } function currentSet() { - return matchEnded() ? cSet - 1 : cSet; + return matchEnded() ? cSet - 1 : cSet; } function shouldTiebreak() { - return settings.enableMaxScoreTiebreak && - scores[cSet][0] + scores[cSet][1] === (maxScore() - 1) * 2; + return settings.enableMaxScoreTiebreak && + scores[cSet][0] + scores[cSet][1] === (maxScore() - 1) * 2; } function formatNumber(num, length) { @@ -115,285 +115,285 @@ function formatNumber(num, length) { } function formatDuration(duration) { - let durS = Math.floor(duration); - let durM = Math.floor(durS / 60); - let durH = Math.floor(durM / 60); - durS = durS - durM * 60; - durM = durM - durH * 60; + let durS = Math.floor(duration); + let durM = Math.floor(durS / 60); + let durH = Math.floor(durM / 60); + durS = durS - durM * 60; + durM = durM - durH * 60; - durS = formatNumber(durS); - durM = formatNumber(durM); - durH = formatNumber(durH); + durS = formatNumber(durS); + durM = formatNumber(durM); + durH = formatNumber(durH); - let dur = null; - if (durH > 0) { - dur = durH + ':' + durM; - } else { - dur = durM + ':' + durS; - } + let dur = null; + if (durH > 0) { + dur = durH + ':' + durM; + } else { + dur = durM + ':' + durS; + } - return dur; + return dur; } function tiebreakWon(set, player) { - let pScore = scores[set][3+player]; - let p2Score = scores[set][3+~~!player]; + let pScore = scores[set][3+player]; + let p2Score = scores[set][3+~~!player]; - let winScoreReached = pScore >= settings.maxScoreTiebreakWinScore; - let isTwoAhead = !settings.maxScoreTiebreakEnableTwoAhead || pScore - p2Score >= 2; - let reachedMaxScore = settings.maxScoreTiebreakEnableMaxScore && pScore >= tiebreakMaxScore(); + let winScoreReached = pScore >= settings.maxScoreTiebreakWinScore; + let isTwoAhead = !settings.maxScoreTiebreakEnableTwoAhead || pScore - p2Score >= 2; + let reachedMaxScore = settings.maxScoreTiebreakEnableMaxScore && pScore >= tiebreakMaxScore(); - return reachedMaxScore || (winScoreReached && isTwoAhead); + return reachedMaxScore || (winScoreReached && isTwoAhead); } function setWon(set, player) { - let pScore = scores[set][player]; - let p2Score = scores[set][~~!player]; + let pScore = scores[set][player]; + let p2Score = scores[set][~~!player]; - let winScoreReached = pScore >= settings.winScore; - let isTwoAhead = !settings.enableTwoAhead || pScore - p2Score >= 2; - let tiebreakW = tiebreakWon(set, player); - let reachedMaxScore = settings.enableMaxScore && pScore >= maxScore(); + let winScoreReached = pScore >= settings.winScore; + let isTwoAhead = !settings.enableTwoAhead || pScore - p2Score >= 2; + let tiebreakW = tiebreakWon(set, player); + let reachedMaxScore = settings.enableMaxScore && pScore >= maxScore(); - return ( - (settings.enableMaxScoreTiebreak ? tiebreakW : reachedMaxScore) || - (winScoreReached && isTwoAhead) - ); + return ( + (settings.enableMaxScoreTiebreak ? tiebreakW : reachedMaxScore) || + (winScoreReached && isTwoAhead) + ); } function setEnded(set) { - return setWon(set, 0) || setWon(set, 1); + return setWon(set, 0) || setWon(set, 1); } function setsWon(player) { - return Array(sets()).fill(0).map((_, s) => ~~setWon(s, player)).reduce((a,v) => a+v, 0); + return Array(sets()).fill(0).map((_, s) => ~~setWon(s, player)).reduce((a,v) => a+v, 0); } function matchWon(player) { - return setsWon(player) >= settings.winSets; + return setsWon(player) >= settings.winSets; } function matchEnded() { - return matchWon(0) || matchWon(1); + return matchWon(0) || matchWon(1); } function matchScore(player) { - return scores.reduce((acc, val) => acc += val[player], 0); + return scores.reduce((acc, val) => acc += val[player], 0); } function score(player) { - let setFirstShownSet = function () { - firstShownSet = currentSet() - Math.floor(setsPerPage() / 2); - }; - let updateCurrentSet = function (val) { - cSet += val; - setFirstShownSet(); - }; + let setFirstShownSet = function () { + firstShownSet = currentSet() - Math.floor(setsPerPage() / 2); + }; + let updateCurrentSet = function (val) { + cSet += val; + setFirstShownSet(); + }; - if (!matchEnded() || correctionMode) { - setFirstShownSet(); + if (!matchEnded() || correctionMode) { + setFirstShownSet(); + } + + if (correctionMode) { + if ( + scores[cSet][0] === 0 && scores[cSet][1] === 0 && + scores[cSet][3] === 0 && scores[cSet][4] === 0 && + cSet > 0 + ) { + updateCurrentSet(-1); } - if (correctionMode) { - if ( - scores[cSet][0] === 0 && scores[cSet][1] === 0 && - scores[cSet][3] === 0 && scores[cSet][4] === 0 && - cSet > 0 - ) { - updateCurrentSet(-1); - } + if (scores[cSet][3] > 0 || scores[cSet][4] > 0) { + if (scores[cSet][3+player] > 0) { + scores[cSet][3+player]--; + } + } else if (scores[cSet][player] > 0) { + if (tScores[player] === 0 && tScores[~~!player] === 0) { + scores[cSet][player]--; + } else { + tScores[player] = 0; + tScores[~~!player] = 0; + } + } + } else { + if (matchEnded()) return; - if (scores[cSet][3] > 0 || scores[cSet][4] > 0) { - if (scores[cSet][3+player] > 0) { - scores[cSet][3+player]--; - } - } else if (scores[cSet][player] > 0) { - if (tScores[player] === 0 && tScores[~~!player] === 0) { - scores[cSet][player]--; - } else { - tScores[player] = 0; - tScores[~~!player] = 0; - } - } + if (shouldTiebreak()) { + scores[cSet][3+player]++; + } else if (settings.enableTennisScoring) { + if (tScores[player] === 4 && tScores[~~!player] === 5) { // DC : AD + tScores[~~!player]--; + } else if (tScores[player] === 2 && tScores[~~!player] === 3) { // 30 : 40 + tScores[0] = 4; + tScores[1] = 4; + } else if (tScores[player] === 3 || tScores[player] === 5) { // 40 / AD + tScores[0] = 0; + tScores[1] = 0; + scores[cSet][player]++; + } else { + tScores[player]++; + } } else { - if (matchEnded()) return; - - if (shouldTiebreak()) { - scores[cSet][3+player]++; - } else if (settings.enableTennisScoring) { - if (tScores[player] === 4 && tScores[~~!player] === 5) { // DC : AD - tScores[~~!player]--; - } else if (tScores[player] === 2 && tScores[~~!player] === 3) { // 30 : 40 - tScores[0] = 4; - tScores[1] = 4; - } else if (tScores[player] === 3 || tScores[player] === 5) { // 40 / AD - tScores[0] = 0; - tScores[1] = 0; - scores[cSet][player]++; - } else { - tScores[player]++; - } - } else { - scores[cSet][player]++; - } - - if (setEnded(cSet) && cSet < sets()) { - if (shouldTiebreak()) { - scores[cSet][player]++; - } - updateCurrentSet(1); - scores[cSet][2] = getTime(); - } - - if (matchEnded()) { - firstShownSet = 0; - } + scores[cSet][player]++; } + + if (setEnded(cSet) && cSet < sets()) { + if (shouldTiebreak()) { + scores[cSet][player]++; + } + updateCurrentSet(1); + scores[cSet][2] = getTime(); + } + + if (matchEnded()) { + firstShownSet = 0; + } + } } function handleInput(button) { - if (settingsMenuOpened) { + if (settingsMenuOpened) { + return; + } + + switch (button) { + case 0: + case 1: + score(button); + break; + case 2: + showSettingsMenu(); return; - } + case 3: + case 4: + let hLimit = currentSet(); + let lLimit = 1 - setsPerPage(); + let val = (button * 2 - 7); + firstShownSet += val; + if (firstShownSet > hLimit) firstShownSet = hLimit; + if (firstShownSet < lLimit) firstShownSet = lLimit; + break; + } - switch (button) { - case 0: - case 1: - score(button); - break; - case 2: - showSettingsMenu(); - return; - case 3: - case 4: - let hLimit = currentSet(); - let lLimit = 1 - setsPerPage(); - let val = (button * 2 - 7); - firstShownSet += val; - if (firstShownSet > hLimit) firstShownSet = hLimit; - if (firstShownSet < lLimit) firstShownSet = lLimit; - break; - } - - draw(); + draw(); } function draw() { - g.setFontAlign(0,0); - g.clear(); + g.setFontAlign(0,0); + g.clear(); + + for (let p = 0; p < 2; p++) { + if (matchWon(p)) { + g.setFontAlign(0,0); + g.setFont('Teletext10x18Ascii',1); + g.drawString("WINNER", p === 0 ? w/4 : w/4*3, 15); + } else if (matchEnded()) { + g.setFontAlign(0,-1); + + let dur1 = formatDuration(scores[cSet][2] - scores[0][2]); + g.setFont('5x9Numeric7Seg',1); + g.drawString(dur1, p === 0 ? w/8 : w/8*5, 10); + + g.setFont('Teletext5x9Ascii',1); + g.drawString((currentSet()+1) + ' set' + (currentSet() > 0 ? 's' : ''), p === 0 ? w/8*3 : w/8*7, 12); + + } + + g.setFontAlign(p === 0 ? -1 : 1,1); + g.setFont('7x11Numeric7Seg',2); + g.drawString(setsWon(p), p === 0 ? 10 : w-8, h-5); + + if (!settings.enableTennisScoring) { + g.setFontAlign(p === 0 ? 1 : -1,1); + g.setFont('7x11Numeric7Seg',2); + g.drawString(formatNumber(matchScore(p), 3), p === 0 ? w/2 - 8 : w/2 + 11, h-5); + } + } + g.setFontAlign(0,0); + + if (correctionMode) { + g.setFont('Teletext10x18Ascii',1); + g.drawString("R", w/2, h-10); + } + + let lastShownSet = Math.min( + sets(), + currentSet() + 1, + firstShownSet+setsPerPage() + ); + let setsOnCurrentPage = Math.min( + sets(), + setsPerPage() + ); + for (let set = firstShownSet; set < lastShownSet; set++) { + if (set < 0) continue; + + let y = (h-15)/(setsOnCurrentPage+1)*(set-firstShownSet+1)+5; + + g.setFontAlign(1,0); + g.setFont('7x11Numeric7Seg',1); + g.drawString(set+1, 40, y-10); + if (scores[set+1][2] != null) { + let dur2 = formatDuration(scores[set+1][2] - scores[set][2]); + g.drawString(dur2, 40, y+10); + } for (let p = 0; p < 2; p++) { - if (matchWon(p)) { - g.setFontAlign(0,0); - g.setFont('Teletext10x18Ascii',1); - g.drawString("WINNER", p === 0 ? w/4 : w/4*3, 15); - } else if (matchEnded()) { - g.setFontAlign(0,-1); - - let dur1 = formatDuration(scores[cSet][2] - scores[0][2]); - g.setFont('5x9Numeric7Seg',1); - g.drawString(dur1, p === 0 ? w/8 : w/8*5, 10); - - g.setFont('Teletext5x9Ascii',1); - g.drawString((currentSet()+1) + ' set' + (currentSet() > 0 ? 's' : ''), p === 0 ? w/8*3 : w/8*7, 12); + if (!setWon(set, p === 0 ? 1 : 0) || matchEnded()) { + let bigNumX = p === 0 ? (w-20)/4+18 : (w-20)/4*3+4; + let smallNumX = p === 0 ? w/2-2 : w/2+3; + if (settings.enableTennisScoring && set === cSet && !shouldTiebreak()) { + g.setFontAlign(0,0); + g.setFont('7x11Numeric7Seg',3); + g.drawString( + formatNumber(tennisScores[tScores[p]]), + bigNumX, + y + ); + } else if (shouldTiebreak() && set === cSet) { + g.setFontAlign(0,0); + g.setFont('7x11Numeric7Seg',3); + g.drawString( + formatNumber(scores[set][3+p], 3), + bigNumX, + y + ); + } else { + g.setFontAlign(0,0); + g.setFont('7x11Numeric7Seg',3); + g.drawString( + formatNumber(scores[set][p]), + bigNumX, + y + ); } - g.setFontAlign(p === 0 ? -1 : 1,1); - g.setFont('7x11Numeric7Seg',2); - g.drawString(setsWon(p), p === 0 ? 10 : w-8, h-5); - - if (!settings.enableTennisScoring) { - g.setFontAlign(p === 0 ? 1 : -1,1); - g.setFont('7x11Numeric7Seg',2); - g.drawString(formatNumber(matchScore(p), 3), p === 0 ? w/2 - 8 : w/2 + 11, h-5); + if ((shouldTiebreak() || settings.enableTennisScoring) && set === cSet) { + g.setFontAlign(p === 0 ? 1 : -1,0); + g.setFont('7x11Numeric7Seg',1); + g.drawString( + formatNumber(scores[set][p]), + smallNumX, + y + ); + } else if ((scores[set][3] !== 0 || scores[set][4] !== 0) && set !== cSet) { + g.setFontAlign(p === 0 ? 1 : -1,0); + g.setFont('7x11Numeric7Seg',1); + g.drawString( + formatNumber(scores[set][3+p], 3), + smallNumX, + y + ); } + } } - g.setFontAlign(0,0); + } - if (correctionMode) { - g.setFont('Teletext10x18Ascii',1); - g.drawString("R", w/2, h-10); - } + // draw separator + g.drawLine(w/2,20,w/2,h-25); - let lastShownSet = Math.min( - sets(), - currentSet() + 1, - firstShownSet+setsPerPage() - ); - let setsOnCurrentPage = Math.min( - sets(), - setsPerPage() - ); - for (let set = firstShownSet; set < lastShownSet; set++) { - if (set < 0) continue; - - let y = (h-15)/(setsOnCurrentPage+1)*(set-firstShownSet+1)+5; - - g.setFontAlign(1,0); - g.setFont('7x11Numeric7Seg',1); - g.drawString(set+1, 40, y-10); - if (scores[set+1][2] != null) { - let dur2 = formatDuration(scores[set+1][2] - scores[set][2]); - g.drawString(dur2, 40, y+10); - } - - for (let p = 0; p < 2; p++) { - if (!setWon(set, p === 0 ? 1 : 0) || matchEnded()) { - let bigNumX = p === 0 ? (w-20)/4+18 : (w-20)/4*3+4; - let smallNumX = p === 0 ? w/2-2 : w/2+3; - - if (settings.enableTennisScoring && set === cSet && !shouldTiebreak()) { - g.setFontAlign(0,0); - g.setFont('7x11Numeric7Seg',3); - g.drawString( - formatNumber(tennisScores[tScores[p]]), - bigNumX, - y - ); - } else if (shouldTiebreak() && set === cSet) { - g.setFontAlign(0,0); - g.setFont('7x11Numeric7Seg',3); - g.drawString( - formatNumber(scores[set][3+p], 3), - bigNumX, - y - ); - } else { - g.setFontAlign(0,0); - g.setFont('7x11Numeric7Seg',3); - g.drawString( - formatNumber(scores[set][p]), - bigNumX, - y - ); - } - - if ((shouldTiebreak() || settings.enableTennisScoring) && set === cSet) { - g.setFontAlign(p === 0 ? 1 : -1,0); - g.setFont('7x11Numeric7Seg',1); - g.drawString( - formatNumber(scores[set][p]), - smallNumX, - y - ); - } else if ((scores[set][3] !== 0 || scores[set][4] !== 0) && set !== cSet) { - g.setFontAlign(p === 0 ? 1 : -1,0); - g.setFont('7x11Numeric7Seg',1); - g.drawString( - formatNumber(scores[set][3+p], 3), - smallNumX, - y - ); - } - } - } - } - - // draw separator - g.drawLine(w/2,20,w/2,h-25); - - g.flip(); + g.flip(); } setupInputWatchers(); diff --git a/apps/score/score.settings.js b/apps/score/score.settings.js index c1a0382d2..901867d7b 100644 --- a/apps/score/score.settings.js +++ b/apps/score/score.settings.js @@ -1,128 +1,128 @@ (function (back, ret) { - const fileName = 'score.json' - let settings = require('Storage').readJSON(fileName, 1) || {}; - const offon = ['No', 'Yes']; + const fileName = 'score.json' + let settings = require('Storage').readJSON(fileName, 1) || {}; + const offon = ['No', 'Yes']; - let changed = false; + let changed = false; - function save(key, value) { - changed = true; - settings[key] = value; - if (key === 'winScore' && settings.maxScore < value) { - settings.maxScore = value; - } - require('Storage').writeJSON(fileName, settings); + function save(key, value) { + changed = true; + settings[key] = value; + if (key === 'winScore' && settings.maxScore < value) { + settings.maxScore = value; } + require('Storage').writeJSON(fileName, settings); + } - if (settings.winSets == null) { - settings.winSets = 1; - } - if (settings.setsPerPage == null) { - settings.setsPerPage = 5; - } - if (settings.winScore == null) { - settings.winScore = 21; - } - if (settings.enableTwoAhead == null) { - settings.enableTwoAhead = true; - } - if (settings.enableMaxScore == null) { - settings.enableMaxScore = true; - } - if (settings.maxScore == null) { - settings.maxScore = 30; - } - if (settings.enableTennisScoring == null) { - settings.enableTennisScoring = false; - } + if (settings.winSets == null) { + settings.winSets = 1; + } + if (settings.setsPerPage == null) { + settings.setsPerPage = 5; + } + if (settings.winScore == null) { + settings.winScore = 21; + } + if (settings.enableTwoAhead == null) { + settings.enableTwoAhead = true; + } + if (settings.enableMaxScore == null) { + settings.enableMaxScore = true; + } + if (settings.maxScore == null) { + settings.maxScore = 30; + } + if (settings.enableTennisScoring == null) { + settings.enableTennisScoring = false; + } - if (settings.enableMaxScoreTiebreak == null) { - settings.enableMaxScoreTiebreak = false; - } - if (settings.maxScoreTiebreakWinScore == null) { - settings.maxScoreTiebreakWinScore = 6; - } - if (settings.maxScoreTiebreakEnableTwoAhead == null) { - settings.maxScoreTiebreakEnableTwoAhead = true; - } - if (settings.maxScoreTiebreakEnableMaxScore == null) { - settings.maxScoreTiebreakEnableMaxScore = false; - } - if (settings.maxScoreTiebreakMaxScore == null) { - settings.maxScoreTiebreakMaxScore = 15; - } + if (settings.enableMaxScoreTiebreak == null) { + settings.enableMaxScoreTiebreak = false; + } + if (settings.maxScoreTiebreakWinScore == null) { + settings.maxScoreTiebreakWinScore = 6; + } + if (settings.maxScoreTiebreakEnableTwoAhead == null) { + settings.maxScoreTiebreakEnableTwoAhead = true; + } + if (settings.maxScoreTiebreakEnableMaxScore == null) { + settings.maxScoreTiebreakEnableMaxScore = false; + } + if (settings.maxScoreTiebreakMaxScore == null) { + settings.maxScoreTiebreakMaxScore = 15; + } - if (ret) { - return settings; - } + if (ret) { + return settings; + } - const appMenu = {}; - appMenu[''] = {'title': 'Score Settings'}, - appMenu['< Back'] = function () { back(settings, changed); }; - if (reset) { - appMenu['Reset match'] = function () { back(settings, true); }; - } - appMenu['Sets to win'] = { - value: settings.winSets, - min:1, - onchange: m => save('winSets', m) - }; - appMenu['Sets per page'] = { - value: settings.setsPerPage, - min:1, - max:5, - onchange: m => save('setsPerPage', m) - }; - appMenu['Score to win'] = { - value: settings.winScore, - min:1, - onchange: m => save('winScore', m) - }; - appMenu['2-point lead'] = { - value: settings.enableTwoAhead, - format: m => offon[~~m], - onchange: m => save('enableTwoAhead', m) - }; - appMenu['Maximum score?'] = { - value: settings.enableMaxScore, - format: m => offon[~~m], - onchange: m => save('enableMaxScore', m) - }; - appMenu['Maximum score'] = { - value: settings.maxScore, - min: 1, - onchange: m => save('maxScore', m) - }; - appMenu['Tennis scoring'] = { - value: settings.enableTennisScoring, - format: m => offon[~~m], - onchange: m => save('enableTennisScoring', m) - }; - appMenu['TB sets?'] = { - value: settings.enableMaxScoreTiebreak, - format: m => offon[~~m], - onchange: m => save('enableMaxScoreTiebreak', m) - } - appMenu['TB Score to win'] = { - value: settings.maxScoreTiebreakWinScore, - onchange: m => save('maxScoreTiebreakWinScore', m) - } - appMenu['TB 2-point lead'] = { - value: settings.maxScoreTiebreakEnableTwoAhead, - format: m => offon[~~m], - onchange: m => save('maxScoreTiebreakEnableTwoAhead', m) - } - appMenu['TB max score?'] = { - value: settings.maxScoreTiebreakEnableMaxScore, - format: m => offon[~~m], - onchange: m => save('maxScoreTiebreakEnableMaxScore', m) - } - appMenu['TB max score'] = { - value: settings.maxScoreTiebreakMaxScore, - onchange: m => save('maxScoreTiebreakMaxScore', m) - } + const appMenu = {}; + appMenu[''] = {'title': 'Score Settings'}, + appMenu['< Back'] = function () { back(settings, changed); }; + if (reset) { + appMenu['Reset match'] = function () { back(settings, true); }; + } + appMenu['Sets to win'] = { + value: settings.winSets, + min:1, + onchange: m => save('winSets', m) + }; + appMenu['Sets per page'] = { + value: settings.setsPerPage, + min:1, + max:5, + onchange: m => save('setsPerPage', m) + }; + appMenu['Score to win'] = { + value: settings.winScore, + min:1, + onchange: m => save('winScore', m) + }; + appMenu['2-point lead'] = { + value: settings.enableTwoAhead, + format: m => offon[~~m], + onchange: m => save('enableTwoAhead', m) + }; + appMenu['Maximum score?'] = { + value: settings.enableMaxScore, + format: m => offon[~~m], + onchange: m => save('enableMaxScore', m) + }; + appMenu['Maximum score'] = { + value: settings.maxScore, + min: 1, + onchange: m => save('maxScore', m) + }; + appMenu['Tennis scoring'] = { + value: settings.enableTennisScoring, + format: m => offon[~~m], + onchange: m => save('enableTennisScoring', m) + }; + appMenu['TB sets?'] = { + value: settings.enableMaxScoreTiebreak, + format: m => offon[~~m], + onchange: m => save('enableMaxScoreTiebreak', m) + } + appMenu['TB Score to win'] = { + value: settings.maxScoreTiebreakWinScore, + onchange: m => save('maxScoreTiebreakWinScore', m) + } + appMenu['TB 2-point lead'] = { + value: settings.maxScoreTiebreakEnableTwoAhead, + format: m => offon[~~m], + onchange: m => save('maxScoreTiebreakEnableTwoAhead', m) + } + appMenu['TB max score?'] = { + value: settings.maxScoreTiebreakEnableMaxScore, + format: m => offon[~~m], + onchange: m => save('maxScoreTiebreakEnableMaxScore', m) + } + appMenu['TB max score'] = { + value: settings.maxScoreTiebreakMaxScore, + onchange: m => save('maxScoreTiebreakMaxScore', m) + } - E.showMenu(appMenu) + E.showMenu(appMenu) }) From 9f73450b8318b930cdf6108184ebc9f757393c91 Mon Sep 17 00:00:00 2001 From: Mika Dede Date: Tue, 28 Sep 2021 01:03:13 +0200 Subject: [PATCH 040/392] score: add configuration preset functionality --- apps.json | 1 + apps/score/README.md | 1 + apps/score/score.presets.json | 1 + apps/score/score.settings.js | 208 ++++++++++++++++++++-------------- 4 files changed, 127 insertions(+), 84 deletions(-) create mode 100644 apps/score/score.presets.json diff --git a/apps.json b/apps.json index c98686e72..b1e6f70fc 100644 --- a/apps.json +++ b/apps.json @@ -3565,6 +3565,7 @@ "storage": [ {"name":"score.app.js","url":"score.app.js"}, {"name":"score.settings.js","url":"score.settings.js"}, + {"name":"score.presets.json","url":"score.presets.json"}, {"name":"score.img","url":"score.app-icon.js","evaluate":true} ] } diff --git a/apps/score/README.md b/apps/score/README.md index ffd35e065..c3ad0e622 100644 --- a/apps/score/README.md +++ b/apps/score/README.md @@ -16,6 +16,7 @@ In this mode any score increments will be decrements. To move back a set, reduce # Settings | Setting | Description | |------------------------------------|------------------------------------------------------------------------------------------------------------------------------| +| `Presets` | Enable a preset for one of the configured sports | | `Sets to win` | How many sets a player has to win before the match is won (Maximum sets: this*2-1) | | `Sets per page` | How many sets should be shown in the app. Further sets will be available by scrolling (ignored if higher than `Sets to win`) | | `Score to win` | What score ends a given set | diff --git a/apps/score/score.presets.json b/apps/score/score.presets.json new file mode 100644 index 000000000..0967ef424 --- /dev/null +++ b/apps/score/score.presets.json @@ -0,0 +1 @@ +{} diff --git a/apps/score/score.settings.js b/apps/score/score.settings.js index 901867d7b..cbae83f0c 100644 --- a/apps/score/score.settings.js +++ b/apps/score/score.settings.js @@ -1,20 +1,4 @@ -(function (back, ret) { - - const fileName = 'score.json' - let settings = require('Storage').readJSON(fileName, 1) || {}; - const offon = ['No', 'Yes']; - - let changed = false; - - function save(key, value) { - changed = true; - settings[key] = value; - if (key === 'winScore' && settings.maxScore < value) { - settings.maxScore = value; - } - require('Storage').writeJSON(fileName, settings); - } - +function fillSettingsWithDefaults(settings) { if (settings.winSets == null) { settings.winSets = 1; } @@ -53,76 +37,132 @@ settings.maxScoreTiebreakMaxScore = 15; } + return settings; +} + +(function (back, ret) { + + const fileName = 'score.json'; + let settings = require('Storage').readJSON(fileName, 1) || {}; + const offon = ['No', 'Yes']; + + let presetsFileName = 'score.presets.json'; + let presets = require('Storage').readJSON(presetsFileName); + let presetNames = Object.keys(presets); + + let changed = false; + + function save(settings) { + require('Storage').writeJSON(fileName, settings); + } + + function setAndSave(key, value) { + changed = true; + settings[key] = value; + if (key === 'winScore' && settings.maxScore < value) { + settings.maxScore = value; + } + save(settings); + } + + settings = fillSettingsWithDefaults(settings); + if (ret) { return settings; } - const appMenu = {}; - appMenu[''] = {'title': 'Score Settings'}, - appMenu['< Back'] = function () { back(settings, changed); }; - if (reset) { - appMenu['Reset match'] = function () { back(settings, true); }; - } - appMenu['Sets to win'] = { - value: settings.winSets, - min:1, - onchange: m => save('winSets', m) - }; - appMenu['Sets per page'] = { - value: settings.setsPerPage, - min:1, - max:5, - onchange: m => save('setsPerPage', m) - }; - appMenu['Score to win'] = { - value: settings.winScore, - min:1, - onchange: m => save('winScore', m) - }; - appMenu['2-point lead'] = { - value: settings.enableTwoAhead, - format: m => offon[~~m], - onchange: m => save('enableTwoAhead', m) - }; - appMenu['Maximum score?'] = { - value: settings.enableMaxScore, - format: m => offon[~~m], - onchange: m => save('enableMaxScore', m) - }; - appMenu['Maximum score'] = { - value: settings.maxScore, - min: 1, - onchange: m => save('maxScore', m) - }; - appMenu['Tennis scoring'] = { - value: settings.enableTennisScoring, - format: m => offon[~~m], - onchange: m => save('enableTennisScoring', m) - }; - appMenu['TB sets?'] = { - value: settings.enableMaxScoreTiebreak, - format: m => offon[~~m], - onchange: m => save('enableMaxScoreTiebreak', m) - } - appMenu['TB Score to win'] = { - value: settings.maxScoreTiebreakWinScore, - onchange: m => save('maxScoreTiebreakWinScore', m) - } - appMenu['TB 2-point lead'] = { - value: settings.maxScoreTiebreakEnableTwoAhead, - format: m => offon[~~m], - onchange: m => save('maxScoreTiebreakEnableTwoAhead', m) - } - appMenu['TB max score?'] = { - value: settings.maxScoreTiebreakEnableMaxScore, - format: m => offon[~~m], - onchange: m => save('maxScoreTiebreakEnableMaxScore', m) - } - appMenu['TB max score'] = { - value: settings.maxScoreTiebreakMaxScore, - onchange: m => save('maxScoreTiebreakMaxScore', m) - } + const presetMenu = function () { + let ret = function () { E.showMenu(appMenu()); }; + let m = { + '': {'title': 'Score Presets'}, + '< Back': ret, + }; + for (let i = 0; i < presetNames.length; i++) { + m[presetNames[i]] = (function (i) { + return function() { + changed = true; + settings = fillSettingsWithDefaults(presets[presetNames[i]]); + save(settings); + ret(); + }; + })(i); + } - E.showMenu(appMenu) + return m; + }; -}) + const appMenu = function () { + let m = {}; + + m[''] = {'title': 'Score Settings'}; + m['< Back'] = function () { back(settings, changed); }; + if (reset) { + m['Reset match'] = function () { back(settings, true); }; + } + m['Presets'] = function () { E.showMenu(presetMenu()); }; + m['Sets to win'] = { + value: settings.winSets, + min:1, + onchange: m => setAndSave('winSets', m), + }; + m['Sets per page'] = { + value: settings.setsPerPage, + min:1, + max:5, + onchange: m => setAndSave('setsPerPage', m), + }; + m['Score to win'] = { + value: settings.winScore, + min:1, + onchange: m => setAndSave('winScore', m), + }; + m['2-point lead'] = { + value: settings.enableTwoAhead, + format: m => offon[~~m], + onchange: m => setAndSave('enableTwoAhead', m), + }; + m['Maximum score?'] = { + value: settings.enableMaxScore, + format: m => offon[~~m], + onchange: m => setAndSave('enableMaxScore', m), + }; + m['Maximum score'] = { + value: settings.maxScore, + min: 1, + onchange: m => setAndSave('maxScore', m), + }; + m['Tennis scoring'] = { + value: settings.enableTennisScoring, + format: m => offon[~~m], + onchange: m => setAndSave('enableTennisScoring', m), + }; + m['TB sets?'] = { + value: settings.enableMaxScoreTiebreak, + format: m => offon[~~m], + onchange: m => setAndSave('enableMaxScoreTiebreak', m), + }; + m['TB Score to win'] = { + value: settings.maxScoreTiebreakWinScore, + onchange: m => setAndSave('maxScoreTiebreakWinScore', m), + }; + m['TB 2-point lead'] = { + value: settings.maxScoreTiebreakEnableTwoAhead, + format: m => offon[~~m], + onchange: m => setAndSave('maxScoreTiebreakEnableTwoAhead', m), + }; + m['TB max score?'] = { + value: settings.maxScoreTiebreakEnableMaxScore, + format: m => offon[~~m], + onchange: m => setAndSave('maxScoreTiebreakEnableMaxScore', m), + }; + m['TB max score'] = { + value: settings.maxScoreTiebreakMaxScore, + onchange: m => setAndSave('maxScoreTiebreakMaxScore', m), + }; + + return m; + }; + + E.showMenu(appMenu()); + +}); From a516d409919e0f4052321bc5713b4a6caa67a31c Mon Sep 17 00:00:00 2001 From: Mika Dede Date: Tue, 28 Sep 2021 01:04:13 +0200 Subject: [PATCH 041/392] score: add badminton config preset --- apps/score/score.presets.json | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/apps/score/score.presets.json b/apps/score/score.presets.json index 0967ef424..12b030044 100644 --- a/apps/score/score.presets.json +++ b/apps/score/score.presets.json @@ -1 +1,8 @@ -{} +{ + "Badminton": { + "winScore": 21, + "enableTwoAhead": true, + "enableMaxScore": true, + "maxScore": 30 + } +} From 8567e3d8e156592640d4d6495199e5fcd7716b76 Mon Sep 17 00:00:00 2001 From: Mika Dede Date: Tue, 28 Sep 2021 01:04:26 +0200 Subject: [PATCH 042/392] score: add tennis config preset --- apps/score/score.presets.json | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/apps/score/score.presets.json b/apps/score/score.presets.json index 12b030044..fe11c9e6b 100644 --- a/apps/score/score.presets.json +++ b/apps/score/score.presets.json @@ -4,5 +4,16 @@ "enableTwoAhead": true, "enableMaxScore": true, "maxScore": 30 + }, + "Tennis": { + "winScore": 6, + "enableTwoAhead": true, + "enableMaxScore": true, + "maxScore": 7, + "enableMaxScoreTiebreak": true, + "maxScoreTiebreakWinScore": 7, + "maxScoreTiebreakEnableTwoAhead": true, + "maxScoreTiebreakEnableMaxScore": false, + "enableTennisScoring": true } } From ad90c410d7a3c4fa959a5cfdca5768c633b566e7 Mon Sep 17 00:00:00 2001 From: Mika Dede Date: Tue, 28 Sep 2021 01:09:13 +0200 Subject: [PATCH 043/392] score: select winSets entry after selecting preset --- apps/score/score.settings.js | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/apps/score/score.settings.js b/apps/score/score.settings.js index cbae83f0c..8442fd80b 100644 --- a/apps/score/score.settings.js +++ b/apps/score/score.settings.js @@ -72,7 +72,7 @@ function fillSettingsWithDefaults(settings) { } const presetMenu = function () { - let ret = function () { E.showMenu(appMenu()); }; + let ret = function (changed) { E.showMenu(appMenu(changed ? 3 : null)); }; let m = { '': {'title': 'Score Presets'}, '< Back': ret, @@ -83,7 +83,7 @@ function fillSettingsWithDefaults(settings) { changed = true; settings = fillSettingsWithDefaults(presets[presetNames[i]]); save(settings); - ret(); + ret(true); }; })(i); } @@ -91,10 +91,13 @@ function fillSettingsWithDefaults(settings) { return m; }; - const appMenu = function () { + const appMenu = function (selected) { let m = {}; m[''] = {'title': 'Score Settings'}; + if (selected != null) { + m[''].selected = selected; + } m['< Back'] = function () { back(settings, changed); }; if (reset) { m['Reset match'] = function () { back(settings, true); }; From ecc4e59a01fb82edc096040a05eeaa13eee0c43a Mon Sep 17 00:00:00 2001 From: Mika Dede Date: Tue, 28 Sep 2021 14:02:15 +0200 Subject: [PATCH 044/392] score: set default winSets to 2 --- apps/score/score.settings.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/score/score.settings.js b/apps/score/score.settings.js index 8442fd80b..83a98d93f 100644 --- a/apps/score/score.settings.js +++ b/apps/score/score.settings.js @@ -1,6 +1,6 @@ function fillSettingsWithDefaults(settings) { if (settings.winSets == null) { - settings.winSets = 1; + settings.winSets = 2; } if (settings.setsPerPage == null) { settings.setsPerPage = 5; From 7074340f444c25100434ee3101a30424ba626fba Mon Sep 17 00:00:00 2001 From: Mika Dede Date: Tue, 28 Sep 2021 14:03:23 +0200 Subject: [PATCH 045/392] score: add additional in-app menu, allow ending current set --- apps/score/score.app.js | 50 ++++++++++++++++++++++++------------ apps/score/score.settings.js | 33 +++++++++++++++++------- 2 files changed, 58 insertions(+), 25 deletions(-) diff --git a/apps/score/score.app.js b/apps/score/score.app.js index 7f0b04a59..4b72f911c 100644 --- a/apps/score/score.app.js +++ b/apps/score/score.app.js @@ -4,7 +4,7 @@ require('FontTeletext5x9Ascii').add(Graphics); require('FontTeletext10x18Ascii').add(Graphics); let settingsMenu = eval(require('Storage').read('score.settings.js')); -let settings = settingsMenu(null, true); +let settings = settingsMenu(null, null, true); let tennisScores = ['00','15','30','40','DC','AD']; @@ -61,7 +61,7 @@ function setupMatch() { scores[0][2] = getTime(); cSet = 0; - firstShownSet = 0 - Math.floor(setsPerPage() / 2); + setFirstShownSet(); correctionMode = false; } @@ -82,6 +82,12 @@ function showSettingsMenu() { settingsMenuOpened = null; draw(); + }, function (msg) { + switch (msg) { + case 'end_set': + updateCurrentSet(1); + break; + } }); } @@ -154,10 +160,12 @@ function setWon(set, player) { let isTwoAhead = !settings.enableTwoAhead || pScore - p2Score >= 2; let tiebreakW = tiebreakWon(set, player); let reachedMaxScore = settings.enableMaxScore && pScore >= maxScore(); + let manuallyEndedWon = cSet > set ? pScore > p2Score : false return ( (settings.enableMaxScoreTiebreak ? tiebreakW : reachedMaxScore) || - (winScoreReached && isTwoAhead) + (winScoreReached && isTwoAhead) || + manuallyEndedWon ); } @@ -181,15 +189,30 @@ function matchScore(player) { return scores.reduce((acc, val) => acc += val[player], 0); } -function score(player) { - let setFirstShownSet = function () { - firstShownSet = currentSet() - Math.floor(setsPerPage() / 2); - }; - let updateCurrentSet = function (val) { - cSet += val; - setFirstShownSet(); - }; +function setFirstShownSet() { + firstShownSet = Math.max(0, currentSet() - setsPerPage() + 1); +} +function updateCurrentSet(val) { + if (val > 0) { + cSet++ + } else if (val < 0) { + cSet-- + } else { + return; + } + setFirstShownSet(); + + if (matchEnded()) { + firstShownSet = 0; + } + + if (val > 0) { + scores[cSet][2] = getTime(); + } +} + +function score(player) { if (!matchEnded() || correctionMode) { setFirstShownSet(); } @@ -242,11 +265,6 @@ function score(player) { scores[cSet][player]++; } updateCurrentSet(1); - scores[cSet][2] = getTime(); - } - - if (matchEnded()) { - firstShownSet = 0; } } } diff --git a/apps/score/score.settings.js b/apps/score/score.settings.js index 83a98d93f..4a4b5e56a 100644 --- a/apps/score/score.settings.js +++ b/apps/score/score.settings.js @@ -40,7 +40,7 @@ function fillSettingsWithDefaults(settings) { return settings; } -(function (back, ret) { +(function (back, inApp, ret) { const fileName = 'score.json'; let settings = require('Storage').readJSON(fileName, 1) || {}; @@ -71,8 +71,8 @@ function fillSettingsWithDefaults(settings) { return settings; } - const presetMenu = function () { - let ret = function (changed) { E.showMenu(appMenu(changed ? 3 : null)); }; + const presetMenu = function (appMenuBack) { + let ret = function (changed) { E.showMenu(appMenu(appMenuBack, changed ? 2 : null)); }; let m = { '': {'title': 'Score Presets'}, '< Back': ret, @@ -91,7 +91,7 @@ function fillSettingsWithDefaults(settings) { return m; }; - const appMenu = function (selected) { + const appMenu = function (back, selected) { let m = {}; m[''] = {'title': 'Score Settings'}; @@ -99,10 +99,7 @@ function fillSettingsWithDefaults(settings) { m[''].selected = selected; } m['< Back'] = function () { back(settings, changed); }; - if (reset) { - m['Reset match'] = function () { back(settings, true); }; - } - m['Presets'] = function () { E.showMenu(presetMenu()); }; + m['Presets'] = function () { E.showMenu(presetMenu(back)); }; m['Sets to win'] = { value: settings.winSets, min:1, @@ -166,6 +163,24 @@ function fillSettingsWithDefaults(settings) { return m; }; - E.showMenu(appMenu()); + const inAppMenu = function () { + let m = { + '': {'title': 'Score Menu'}, + '< Back': function () { back(settings, changed); }, + 'Reset match': function () { back(settings, true); }, + 'End current set': function () { inApp('end_set'); back(settings, changed); }, + 'Configuration': function () { E.showMenu(appMenu(function () { + E.showMenu(inAppMenu()); + })); }, + }; + + return m; + }; + + if (inApp != null) { + E.showMenu(inAppMenu()); + } else { + E.showMenu(appMenu(back)); + } }); From e27303a09a0d899675fea361e691de2a781df101 Mon Sep 17 00:00:00 2001 From: Mika Dede Date: Tue, 28 Sep 2021 14:04:15 +0200 Subject: [PATCH 046/392] score: code style + firstShownSet limits --- apps/score/score.app.js | 32 ++++++++++++++++---------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/apps/score/score.app.js b/apps/score/score.app.js index 4b72f911c..4409b86b6 100644 --- a/apps/score/score.app.js +++ b/apps/score/score.app.js @@ -275,22 +275,22 @@ function handleInput(button) { } switch (button) { - case 0: - case 1: - score(button); - break; - case 2: - showSettingsMenu(); - return; - case 3: - case 4: - let hLimit = currentSet(); - let lLimit = 1 - setsPerPage(); - let val = (button * 2 - 7); - firstShownSet += val; - if (firstShownSet > hLimit) firstShownSet = hLimit; - if (firstShownSet < lLimit) firstShownSet = lLimit; - break; + case 0: + case 1: + score(button); + break; + case 2: + showSettingsMenu(); + return; + case 3: + case 4: + let hLimit = currentSet() - setsPerPage() + 1; + let lLimit = 0; + let val = (button * 2 - 7); + firstShownSet += val; + if (firstShownSet > hLimit) firstShownSet = hLimit; + if (firstShownSet < lLimit) firstShownSet = lLimit; + break; } draw(); From a504addd8f220ea786053bb613f3bf029d414958 Mon Sep 17 00:00:00 2001 From: Mika Dede Date: Tue, 28 Sep 2021 14:29:34 +0200 Subject: [PATCH 047/392] score: remove reference to Teletext10x18Ascii font --- apps/score/score.app.js | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/apps/score/score.app.js b/apps/score/score.app.js index 4409b86b6..c9ed89260 100644 --- a/apps/score/score.app.js +++ b/apps/score/score.app.js @@ -1,7 +1,6 @@ require('Font5x9Numeric7Seg').add(Graphics); require('Font7x11Numeric7Seg').add(Graphics); require('FontTeletext5x9Ascii').add(Graphics); -require('FontTeletext10x18Ascii').add(Graphics); let settingsMenu = eval(require('Storage').read('score.settings.js')); let settings = settingsMenu(null, null, true); @@ -303,7 +302,7 @@ function draw() { for (let p = 0; p < 2; p++) { if (matchWon(p)) { g.setFontAlign(0,0); - g.setFont('Teletext10x18Ascii',1); + g.setFont('Teletext5x9Ascii',2); g.drawString("WINNER", p === 0 ? w/4 : w/4*3, 15); } else if (matchEnded()) { g.setFontAlign(0,-1); @@ -318,7 +317,7 @@ function draw() { } g.setFontAlign(p === 0 ? -1 : 1,1); - g.setFont('7x11Numeric7Seg',2); + g.setFont('5x9Numeric7Seg',2); g.drawString(setsWon(p), p === 0 ? 10 : w-8, h-5); if (!settings.enableTennisScoring) { @@ -330,7 +329,7 @@ function draw() { g.setFontAlign(0,0); if (correctionMode) { - g.setFont('Teletext10x18Ascii',1); + g.setFont('Teletext5x9Ascii',2); g.drawString("R", w/2, h-10); } From 978c181435f9afa14b6705e073fd95999109c495 Mon Sep 17 00:00:00 2001 From: Mika Dede Date: Tue, 28 Sep 2021 14:30:05 +0200 Subject: [PATCH 048/392] score: fix correctionMode without tennis scoring --- apps/score/score.app.js | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/apps/score/score.app.js b/apps/score/score.app.js index c9ed89260..eb373ed50 100644 --- a/apps/score/score.app.js +++ b/apps/score/score.app.js @@ -230,7 +230,10 @@ function score(player) { scores[cSet][3+player]--; } } else if (scores[cSet][player] > 0) { - if (tScores[player] === 0 && tScores[~~!player] === 0) { + if ( + !settings.enableTennisScoring || + (tScores[player] === 0 && tScores[~~!player] === 0) + ) { scores[cSet][player]--; } else { tScores[player] = 0; From f3398e65501ba3d0bbd52a2f703943ca3fb53ca0 Mon Sep 17 00:00:00 2001 From: Mika Dede Date: Tue, 28 Sep 2021 14:32:14 +0200 Subject: [PATCH 049/392] score: add preset for soccer --- apps/score/score.presets.json | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/apps/score/score.presets.json b/apps/score/score.presets.json index fe11c9e6b..3224556a6 100644 --- a/apps/score/score.presets.json +++ b/apps/score/score.presets.json @@ -15,5 +15,11 @@ "maxScoreTiebreakEnableTwoAhead": true, "maxScoreTiebreakEnableMaxScore": false, "enableTennisScoring": true + }, + "Soccer": { + "winSets": 1, + "winScore": 9999, + "enableTwoAhead": false, + "enableMaxScore": false } } From 6155893856c42248e0c3a070f9112aebd802050b Mon Sep 17 00:00:00 2001 From: Mika Dede Date: Tue, 28 Sep 2021 14:36:25 +0200 Subject: [PATCH 050/392] score: add preset for table tennis --- apps/score/score.presets.json | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/apps/score/score.presets.json b/apps/score/score.presets.json index 3224556a6..b57b52157 100644 --- a/apps/score/score.presets.json +++ b/apps/score/score.presets.json @@ -21,5 +21,10 @@ "winScore": 9999, "enableTwoAhead": false, "enableMaxScore": false + }, + "Table Tennis": { + "winScore": 11, + "enableTwoAhead": true, + "enableMaxScore": false } } From f4d820bf607c4ec16c955464364a595c0f457f96 Mon Sep 17 00:00:00 2001 From: Mika Dede Date: Tue, 28 Sep 2021 15:43:21 +0200 Subject: [PATCH 051/392] score: code style --- apps/score/score.app.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/apps/score/score.app.js b/apps/score/score.app.js index eb373ed50..48f503cb7 100644 --- a/apps/score/score.app.js +++ b/apps/score/score.app.js @@ -159,7 +159,7 @@ function setWon(set, player) { let isTwoAhead = !settings.enableTwoAhead || pScore - p2Score >= 2; let tiebreakW = tiebreakWon(set, player); let reachedMaxScore = settings.enableMaxScore && pScore >= maxScore(); - let manuallyEndedWon = cSet > set ? pScore > p2Score : false + let manuallyEndedWon = cSet > set ? pScore > p2Score : false; return ( (settings.enableMaxScoreTiebreak ? tiebreakW : reachedMaxScore) || @@ -194,9 +194,9 @@ function setFirstShownSet() { function updateCurrentSet(val) { if (val > 0) { - cSet++ + cSet++; } else if (val < 0) { - cSet-- + cSet--; } else { return; } From 7a98c039e705e67db0f10e94c7623cc6769c7b78 Mon Sep 17 00:00:00 2001 From: Mika Dede Date: Tue, 28 Sep 2021 15:47:19 +0200 Subject: [PATCH 052/392] score: fix settings module --- apps/score/score.settings.js | 83 ++++++++++++++++++------------------ 1 file changed, 41 insertions(+), 42 deletions(-) diff --git a/apps/score/score.settings.js b/apps/score/score.settings.js index 4a4b5e56a..c4e22e45d 100644 --- a/apps/score/score.settings.js +++ b/apps/score/score.settings.js @@ -1,46 +1,45 @@ -function fillSettingsWithDefaults(settings) { - if (settings.winSets == null) { - settings.winSets = 2; - } - if (settings.setsPerPage == null) { - settings.setsPerPage = 5; - } - if (settings.winScore == null) { - settings.winScore = 21; - } - if (settings.enableTwoAhead == null) { - settings.enableTwoAhead = true; - } - if (settings.enableMaxScore == null) { - settings.enableMaxScore = true; - } - if (settings.maxScore == null) { - settings.maxScore = 30; - } - if (settings.enableTennisScoring == null) { - settings.enableTennisScoring = false; - } - - if (settings.enableMaxScoreTiebreak == null) { - settings.enableMaxScoreTiebreak = false; - } - if (settings.maxScoreTiebreakWinScore == null) { - settings.maxScoreTiebreakWinScore = 6; - } - if (settings.maxScoreTiebreakEnableTwoAhead == null) { - settings.maxScoreTiebreakEnableTwoAhead = true; - } - if (settings.maxScoreTiebreakEnableMaxScore == null) { - settings.maxScoreTiebreakEnableMaxScore = false; - } - if (settings.maxScoreTiebreakMaxScore == null) { - settings.maxScoreTiebreakMaxScore = 15; - } - - return settings; -} - (function (back, inApp, ret) { + function fillSettingsWithDefaults(settings) { + if (settings.winSets == null) { + settings.winSets = 2; + } + if (settings.setsPerPage == null) { + settings.setsPerPage = 5; + } + if (settings.winScore == null) { + settings.winScore = 21; + } + if (settings.enableTwoAhead == null) { + settings.enableTwoAhead = true; + } + if (settings.enableMaxScore == null) { + settings.enableMaxScore = true; + } + if (settings.maxScore == null) { + settings.maxScore = 30; + } + if (settings.enableTennisScoring == null) { + settings.enableTennisScoring = false; + } + + if (settings.enableMaxScoreTiebreak == null) { + settings.enableMaxScoreTiebreak = false; + } + if (settings.maxScoreTiebreakWinScore == null) { + settings.maxScoreTiebreakWinScore = 6; + } + if (settings.maxScoreTiebreakEnableTwoAhead == null) { + settings.maxScoreTiebreakEnableTwoAhead = true; + } + if (settings.maxScoreTiebreakEnableMaxScore == null) { + settings.maxScoreTiebreakEnableMaxScore = false; + } + if (settings.maxScoreTiebreakMaxScore == null) { + settings.maxScoreTiebreakMaxScore = 15; + } + + return settings; + } const fileName = 'score.json'; let settings = require('Storage').readJSON(fileName, 1) || {}; From ea3cfece674c5af827ca4fb077694fc1098c4daf Mon Sep 17 00:00:00 2001 From: Mika Dede Date: Tue, 28 Sep 2021 15:57:56 +0200 Subject: [PATCH 053/392] score: prevent warning in web ide for settings module --- apps/score/score.settings.js | 342 ++++++++++++++++++----------------- 1 file changed, 172 insertions(+), 170 deletions(-) diff --git a/apps/score/score.settings.js b/apps/score/score.settings.js index c4e22e45d..da35d7a21 100644 --- a/apps/score/score.settings.js +++ b/apps/score/score.settings.js @@ -1,185 +1,187 @@ -(function (back, inApp, ret) { - function fillSettingsWithDefaults(settings) { - if (settings.winSets == null) { - settings.winSets = 2; - } - if (settings.setsPerPage == null) { - settings.setsPerPage = 5; - } - if (settings.winScore == null) { - settings.winScore = 21; - } - if (settings.enableTwoAhead == null) { - settings.enableTwoAhead = true; - } - if (settings.enableMaxScore == null) { - settings.enableMaxScore = true; - } - if (settings.maxScore == null) { - settings.maxScore = 30; - } - if (settings.enableTennisScoring == null) { - settings.enableTennisScoring = false; +(function () { + return (function (back, inApp, ret) { + function fillSettingsWithDefaults(settings) { + if (settings.winSets == null) { + settings.winSets = 2; + } + if (settings.setsPerPage == null) { + settings.setsPerPage = 5; + } + if (settings.winScore == null) { + settings.winScore = 21; + } + if (settings.enableTwoAhead == null) { + settings.enableTwoAhead = true; + } + if (settings.enableMaxScore == null) { + settings.enableMaxScore = true; + } + if (settings.maxScore == null) { + settings.maxScore = 30; + } + if (settings.enableTennisScoring == null) { + settings.enableTennisScoring = false; + } + + if (settings.enableMaxScoreTiebreak == null) { + settings.enableMaxScoreTiebreak = false; + } + if (settings.maxScoreTiebreakWinScore == null) { + settings.maxScoreTiebreakWinScore = 6; + } + if (settings.maxScoreTiebreakEnableTwoAhead == null) { + settings.maxScoreTiebreakEnableTwoAhead = true; + } + if (settings.maxScoreTiebreakEnableMaxScore == null) { + settings.maxScoreTiebreakEnableMaxScore = false; + } + if (settings.maxScoreTiebreakMaxScore == null) { + settings.maxScoreTiebreakMaxScore = 15; + } + + return settings; } - if (settings.enableMaxScoreTiebreak == null) { - settings.enableMaxScoreTiebreak = false; - } - if (settings.maxScoreTiebreakWinScore == null) { - settings.maxScoreTiebreakWinScore = 6; - } - if (settings.maxScoreTiebreakEnableTwoAhead == null) { - settings.maxScoreTiebreakEnableTwoAhead = true; - } - if (settings.maxScoreTiebreakEnableMaxScore == null) { - settings.maxScoreTiebreakEnableMaxScore = false; - } - if (settings.maxScoreTiebreakMaxScore == null) { - settings.maxScoreTiebreakMaxScore = 15; + const fileName = 'score.json'; + let settings = require('Storage').readJSON(fileName, 1) || {}; + const offon = ['No', 'Yes']; + + let presetsFileName = 'score.presets.json'; + let presets = require('Storage').readJSON(presetsFileName); + let presetNames = Object.keys(presets); + + let changed = false; + + function save(settings) { + require('Storage').writeJSON(fileName, settings); } - return settings; - } - - const fileName = 'score.json'; - let settings = require('Storage').readJSON(fileName, 1) || {}; - const offon = ['No', 'Yes']; - - let presetsFileName = 'score.presets.json'; - let presets = require('Storage').readJSON(presetsFileName); - let presetNames = Object.keys(presets); - - let changed = false; - - function save(settings) { - require('Storage').writeJSON(fileName, settings); - } - - function setAndSave(key, value) { - changed = true; - settings[key] = value; - if (key === 'winScore' && settings.maxScore < value) { - settings.maxScore = value; - } - save(settings); - } - - settings = fillSettingsWithDefaults(settings); - - if (ret) { - return settings; - } - - const presetMenu = function (appMenuBack) { - let ret = function (changed) { E.showMenu(appMenu(appMenuBack, changed ? 2 : null)); }; - let m = { - '': {'title': 'Score Presets'}, - '< Back': ret, - }; - for (let i = 0; i < presetNames.length; i++) { - m[presetNames[i]] = (function (i) { - return function() { - changed = true; - settings = fillSettingsWithDefaults(presets[presetNames[i]]); - save(settings); - ret(true); - }; - })(i); + function setAndSave(key, value) { + changed = true; + settings[key] = value; + if (key === 'winScore' && settings.maxScore < value) { + settings.maxScore = value; + } + save(settings); } - return m; - }; + settings = fillSettingsWithDefaults(settings); - const appMenu = function (back, selected) { - let m = {}; - - m[''] = {'title': 'Score Settings'}; - if (selected != null) { - m[''].selected = selected; + if (ret) { + return settings; } - m['< Back'] = function () { back(settings, changed); }; - m['Presets'] = function () { E.showMenu(presetMenu(back)); }; - m['Sets to win'] = { - value: settings.winSets, - min:1, - onchange: m => setAndSave('winSets', m), - }; - m['Sets per page'] = { - value: settings.setsPerPage, - min:1, - max:5, - onchange: m => setAndSave('setsPerPage', m), - }; - m['Score to win'] = { - value: settings.winScore, - min:1, - onchange: m => setAndSave('winScore', m), - }; - m['2-point lead'] = { - value: settings.enableTwoAhead, - format: m => offon[~~m], - onchange: m => setAndSave('enableTwoAhead', m), - }; - m['Maximum score?'] = { - value: settings.enableMaxScore, - format: m => offon[~~m], - onchange: m => setAndSave('enableMaxScore', m), - }; - m['Maximum score'] = { - value: settings.maxScore, - min: 1, - onchange: m => setAndSave('maxScore', m), - }; - m['Tennis scoring'] = { - value: settings.enableTennisScoring, - format: m => offon[~~m], - onchange: m => setAndSave('enableTennisScoring', m), - }; - m['TB sets?'] = { - value: settings.enableMaxScoreTiebreak, - format: m => offon[~~m], - onchange: m => setAndSave('enableMaxScoreTiebreak', m), - }; - m['TB Score to win'] = { - value: settings.maxScoreTiebreakWinScore, - onchange: m => setAndSave('maxScoreTiebreakWinScore', m), - }; - m['TB 2-point lead'] = { - value: settings.maxScoreTiebreakEnableTwoAhead, - format: m => offon[~~m], - onchange: m => setAndSave('maxScoreTiebreakEnableTwoAhead', m), - }; - m['TB max score?'] = { - value: settings.maxScoreTiebreakEnableMaxScore, - format: m => offon[~~m], - onchange: m => setAndSave('maxScoreTiebreakEnableMaxScore', m), - }; - m['TB max score'] = { - value: settings.maxScoreTiebreakMaxScore, - onchange: m => setAndSave('maxScoreTiebreakMaxScore', m), + + const presetMenu = function (appMenuBack) { + let ret = function (changed) { E.showMenu(appMenu(appMenuBack, changed ? 2 : null)); }; + let m = { + '': {'title': 'Score Presets'}, + '< Back': ret, + }; + for (let i = 0; i < presetNames.length; i++) { + m[presetNames[i]] = (function (i) { + return function() { + changed = true; + settings = fillSettingsWithDefaults(presets[presetNames[i]]); + save(settings); + ret(true); + }; + })(i); + } + + return m; }; - return m; - }; + const appMenu = function (back, selected) { + let m = {}; - const inAppMenu = function () { - let m = { - '': {'title': 'Score Menu'}, - '< Back': function () { back(settings, changed); }, - 'Reset match': function () { back(settings, true); }, - 'End current set': function () { inApp('end_set'); back(settings, changed); }, - 'Configuration': function () { E.showMenu(appMenu(function () { - E.showMenu(inAppMenu()); - })); }, + m[''] = {'title': 'Score Settings'}; + if (selected != null) { + m[''].selected = selected; + } + m['< Back'] = function () { back(settings, changed); }; + m['Presets'] = function () { E.showMenu(presetMenu(back)); }; + m['Sets to win'] = { + value: settings.winSets, + min:1, + onchange: m => setAndSave('winSets', m), + }; + m['Sets per page'] = { + value: settings.setsPerPage, + min:1, + max:5, + onchange: m => setAndSave('setsPerPage', m), + }; + m['Score to win'] = { + value: settings.winScore, + min:1, + onchange: m => setAndSave('winScore', m), + }; + m['2-point lead'] = { + value: settings.enableTwoAhead, + format: m => offon[~~m], + onchange: m => setAndSave('enableTwoAhead', m), + }; + m['Maximum score?'] = { + value: settings.enableMaxScore, + format: m => offon[~~m], + onchange: m => setAndSave('enableMaxScore', m), + }; + m['Maximum score'] = { + value: settings.maxScore, + min: 1, + onchange: m => setAndSave('maxScore', m), + }; + m['Tennis scoring'] = { + value: settings.enableTennisScoring, + format: m => offon[~~m], + onchange: m => setAndSave('enableTennisScoring', m), + }; + m['TB sets?'] = { + value: settings.enableMaxScoreTiebreak, + format: m => offon[~~m], + onchange: m => setAndSave('enableMaxScoreTiebreak', m), + }; + m['TB Score to win'] = { + value: settings.maxScoreTiebreakWinScore, + onchange: m => setAndSave('maxScoreTiebreakWinScore', m), + }; + m['TB 2-point lead'] = { + value: settings.maxScoreTiebreakEnableTwoAhead, + format: m => offon[~~m], + onchange: m => setAndSave('maxScoreTiebreakEnableTwoAhead', m), + }; + m['TB max score?'] = { + value: settings.maxScoreTiebreakEnableMaxScore, + format: m => offon[~~m], + onchange: m => setAndSave('maxScoreTiebreakEnableMaxScore', m), + }; + m['TB max score'] = { + value: settings.maxScoreTiebreakMaxScore, + onchange: m => setAndSave('maxScoreTiebreakMaxScore', m), + }; + + return m; }; - return m; - }; + const inAppMenu = function () { + let m = { + '': {'title': 'Score Menu'}, + '< Back': function () { back(settings, changed); }, + 'Reset match': function () { back(settings, true); }, + 'End current set': function () { inApp('end_set'); back(settings, changed); }, + 'Configuration': function () { E.showMenu(appMenu(function () { + E.showMenu(inAppMenu()); + })); }, + }; - if (inApp != null) { - E.showMenu(inAppMenu()); - } else { - E.showMenu(appMenu(back)); - } + return m; + }; -}); + if (inApp != null) { + E.showMenu(inAppMenu()); + } else { + E.showMenu(appMenu(back)); + } + + }); +})(); From 656d3e65cd54b079e2fb5b47d75f2f5314238d3d Mon Sep 17 00:00:00 2001 From: Mika Dede Date: Tue, 28 Sep 2021 16:22:16 +0200 Subject: [PATCH 054/392] score: shift score display right --- apps/score/score.app.js | 46 +++++++++++++++++++++++++++++++++-------- 1 file changed, 37 insertions(+), 9 deletions(-) diff --git a/apps/score/score.app.js b/apps/score/score.app.js index 48f503cb7..8c4a16a41 100644 --- a/apps/score/score.app.js +++ b/apps/score/score.app.js @@ -299,6 +299,10 @@ function handleInput(button) { } function draw() { + let getXCoord = function (func) { + let offset = 40; + return func(w-offset)+offset; + }; g.setFontAlign(0,0); g.clear(); @@ -306,34 +310,58 @@ function draw() { if (matchWon(p)) { g.setFontAlign(0,0); g.setFont('Teletext5x9Ascii',2); - g.drawString("WINNER", p === 0 ? w/4 : w/4*3, 15); + g.drawString( + "WINNER", + getXCoord(w => p === 0 ? w/4 : w/4*3), + 15 + ); } else if (matchEnded()) { g.setFontAlign(0,-1); let dur1 = formatDuration(scores[cSet][2] - scores[0][2]); g.setFont('5x9Numeric7Seg',1); - g.drawString(dur1, p === 0 ? w/8 : w/8*5, 10); + g.drawString( + dur1, + getXCoord(w => p === 0 ? w/8 : w/8*5), + 10 + ); g.setFont('Teletext5x9Ascii',1); - g.drawString((currentSet()+1) + ' set' + (currentSet() > 0 ? 's' : ''), p === 0 ? w/8*3 : w/8*7, 12); + g.drawString( + (currentSet()+1) + ' set' + (currentSet() > 0 ? 's' : ''), + getXCoord(w => p === 0 ? w/8*3 : w/8*7), + 12 + ); } g.setFontAlign(p === 0 ? -1 : 1,1); g.setFont('5x9Numeric7Seg',2); - g.drawString(setsWon(p), p === 0 ? 10 : w-8, h-5); + g.drawString( + setsWon(p), + getXCoord(w => p === 0 ? 10 : w-8), + h-5 + ); if (!settings.enableTennisScoring) { g.setFontAlign(p === 0 ? 1 : -1,1); g.setFont('7x11Numeric7Seg',2); - g.drawString(formatNumber(matchScore(p), 3), p === 0 ? w/2 - 8 : w/2 + 11, h-5); + g.drawString( + formatNumber(matchScore(p), 3), + getXCoord(w => p === 0 ? w/2 - 8 : w/2 + 11), + h-5 + ); } } g.setFontAlign(0,0); if (correctionMode) { g.setFont('Teletext5x9Ascii',2); - g.drawString("R", w/2, h-10); + g.drawString( + "R", + getXCoord(w => w/2), + h-10 + ); } let lastShownSet = Math.min( @@ -360,8 +388,8 @@ function draw() { for (let p = 0; p < 2; p++) { if (!setWon(set, p === 0 ? 1 : 0) || matchEnded()) { - let bigNumX = p === 0 ? (w-20)/4+18 : (w-20)/4*3+4; - let smallNumX = p === 0 ? w/2-2 : w/2+3; + let bigNumX = getXCoord(w => p === 0 ? w/4 : w/4*3+3); + let smallNumX = getXCoord(w => p === 0 ? w/2-2 : w/2+3); if (settings.enableTennisScoring && set === cSet && !shouldTiebreak()) { g.setFontAlign(0,0); @@ -411,7 +439,7 @@ function draw() { } // draw separator - g.drawLine(w/2,20,w/2,h-25); + g.drawLine(getXCoord(w => w/2), 20, getXCoord(w => w/2), h-25); g.flip(); } From df13e80b143b613a7d2d8e58edcedb054b28f965 Mon Sep 17 00:00:00 2001 From: Mika Dede Date: Tue, 28 Sep 2021 16:22:31 +0200 Subject: [PATCH 055/392] score: move match sets and time tothe left --- apps/score/score.app.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/apps/score/score.app.js b/apps/score/score.app.js index 8c4a16a41..73e1e8794 100644 --- a/apps/score/score.app.js +++ b/apps/score/score.app.js @@ -316,20 +316,20 @@ function draw() { 15 ); } else if (matchEnded()) { - g.setFontAlign(0,-1); + g.setFontAlign(1,0); let dur1 = formatDuration(scores[cSet][2] - scores[0][2]); g.setFont('5x9Numeric7Seg',1); g.drawString( dur1, - getXCoord(w => p === 0 ? w/8 : w/8*5), + 40, 10 ); g.setFont('Teletext5x9Ascii',1); g.drawString( (currentSet()+1) + ' set' + (currentSet() > 0 ? 's' : ''), - getXCoord(w => p === 0 ? w/8*3 : w/8*7), + 40, 12 ); From 7f5037066925f26088bc45e87265029795a23579 Mon Sep 17 00:00:00 2001 From: Mika Dede Date: Tue, 28 Sep 2021 16:42:21 +0200 Subject: [PATCH 056/392] score: change b1 control scheme --- apps/score/README.md | 25 ++++++++++++++++--------- apps/score/score.app.js | 19 ++++++++++--------- 2 files changed, 26 insertions(+), 18 deletions(-) diff --git a/apps/score/README.md b/apps/score/README.md index c3ad0e622..1de1ccdb5 100644 --- a/apps/score/README.md +++ b/apps/score/README.md @@ -1,18 +1,25 @@ This app will allow you to keep scores for most kinds of sports. # Keybinds -*On Bangle.js 2 BTN is equivalent to BTN2 on Bangle.js 1* -| Keybinding | Description | -|-------------------|------------------------------| -| `BTN1` | Scroll up | -| `BTN3` | Scroll down | -| `BTN2` | Menu | -| tap on left side | increment left player score | -| tap on right side | increment right player score | - To correct a falsely awarded point simply open and close the menu within .5 seconds. This will put the app into correction mode (indicated by the `R`). In this mode any score increments will be decrements. To move back a set, reduce both players scores to 0, then decrement one of the scores once again. +## Bangle.js 1 +| Keybinding | Description | +|---------------------|------------------------------| +| `BTN1` | Increment left player score | +| `BTN3` | Increment right player score | +| `BTN2` | Menu | +| touch on left side | Scroll up | +| touch on right side | Scroll down | + +## Bangle.js 2 +| Keybinding | Description | +|-------------------------------------|------------------------------| +| `BTN1` | Menu | +| touch on left side of divider line | Increment left player score | +| touch on right side of divider line | Increment right player score | + # Settings | Setting | Description | |------------------------------------|------------------------------------------------------------------------------------------------------------------------------| diff --git a/apps/score/score.app.js b/apps/score/score.app.js index 73e1e8794..072617e6b 100644 --- a/apps/score/score.app.js +++ b/apps/score/score.app.js @@ -19,23 +19,28 @@ let correctionMode = false; let w = g.getWidth(); let h = g.getHeight(); +function getXCoord(func) { + let offset = 40; + return func(w-offset)+offset; +}; + function setupInputWatchers() { if (global.BTN4) { setWatch(() => handleInput(2), BTN2, { repeat: true }); - setWatch(() => handleInput(3), BTN1, { repeat: true }); - setWatch(() => handleInput(4), BTN3, { repeat: true }); + setWatch(() => handleInput(0), BTN1, { repeat: true }); + setWatch(() => handleInput(1), BTN3, { repeat: true }); } else { setWatch(() => handleInput(2), BTN, { repeat: true }); } Bangle.on('touch', (b, e) => { if (b) { if (b === 1) { - handleInput(0); + handleInput(3); } else { - handleInput(1); + handleInput(4); } } else { - if (e.x < w/2) { + if (e.x < getXCoord(w => w/2)) { handleInput(0); } else { handleInput(1); @@ -299,10 +304,6 @@ function handleInput(button) { } function draw() { - let getXCoord = function (func) { - let offset = 40; - return func(w-offset)+offset; - }; g.setFontAlign(0,0); g.clear(); From f5b9c5d005e44b756fc4c5dc28e61c0bbed393eb Mon Sep 17 00:00:00 2001 From: Mika Dede Date: Tue, 28 Sep 2021 16:44:33 +0200 Subject: [PATCH 057/392] score: fix scrolling in correction mode --- apps/score/score.app.js | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/apps/score/score.app.js b/apps/score/score.app.js index 072617e6b..357cd965b 100644 --- a/apps/score/score.app.js +++ b/apps/score/score.app.js @@ -186,7 +186,7 @@ function matchWon(player) { } function matchEnded() { - return matchWon(0) || matchWon(1); + return (matchWon(0) || matchWon(1)) && cSet > (setsWon(0) + setsWon(1) - 1); } function matchScore(player) { @@ -207,17 +207,17 @@ function updateCurrentSet(val) { } setFirstShownSet(); - if (matchEnded()) { - firstShownSet = 0; - } - if (val > 0) { scores[cSet][2] = getTime(); + + if (matchEnded()) { + firstShownSet = 0; + } } } function score(player) { - if (!matchEnded() || correctionMode) { + if (!matchEnded()) { setFirstShownSet(); } From a749a382716664ebba33695e8337d6182d7c39c0 Mon Sep 17 00:00:00 2001 From: Mika Dede Date: Tue, 28 Sep 2021 16:44:49 +0200 Subject: [PATCH 058/392] score: fix/reorder draw function --- apps/score/score.app.js | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/apps/score/score.app.js b/apps/score/score.app.js index 357cd965b..1ec15adb2 100644 --- a/apps/score/score.app.js +++ b/apps/score/score.app.js @@ -319,21 +319,20 @@ function draw() { } else if (matchEnded()) { g.setFontAlign(1,0); + g.setFont('Teletext5x9Ascii',1); + g.drawString( + (currentSet()+1) + ' set' + (currentSet() > 0 ? 's' : ''), + 40, + 8 + ); + let dur1 = formatDuration(scores[cSet][2] - scores[0][2]); g.setFont('5x9Numeric7Seg',1); g.drawString( dur1, 40, - 10 + 18 ); - - g.setFont('Teletext5x9Ascii',1); - g.drawString( - (currentSet()+1) + ' set' + (currentSet() > 0 ? 's' : ''), - 40, - 12 - ); - } g.setFontAlign(p === 0 ? -1 : 1,1); From 46fc78772b7bba41314f4feba4f3bbca0d76e06d Mon Sep 17 00:00:00 2001 From: Mika Dede Date: Tue, 28 Sep 2021 16:47:23 +0200 Subject: [PATCH 059/392] score: remove unnecessary semicolon --- apps/score/score.app.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/score/score.app.js b/apps/score/score.app.js index 1ec15adb2..2f07c7de5 100644 --- a/apps/score/score.app.js +++ b/apps/score/score.app.js @@ -22,7 +22,7 @@ let h = g.getHeight(); function getXCoord(func) { let offset = 40; return func(w-offset)+offset; -}; +} function setupInputWatchers() { if (global.BTN4) { From fb3f55be7cd6af03638c3869b485de7cce5f7e1c Mon Sep 17 00:00:00 2001 From: Mika Dede Date: Tue, 28 Sep 2021 21:07:00 +0200 Subject: [PATCH 060/392] score: prevent floating point numbers from getTime() --- apps/score/score.app.js | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/apps/score/score.app.js b/apps/score/score.app.js index 2f07c7de5..0c5d66169 100644 --- a/apps/score/score.app.js +++ b/apps/score/score.app.js @@ -24,6 +24,10 @@ function getXCoord(func) { return func(w-offset)+offset; } +function getSecondsTime() { + return Math.floor(getTime() * 1000); +} + function setupInputWatchers() { if (global.BTN4) { setWatch(() => handleInput(2), BTN2, { repeat: true }); @@ -62,7 +66,7 @@ function setupMatch() { tScores = null; } - scores[0][2] = getTime(); + scores[0][2] = getSecondsTime(); cSet = 0; setFirstShownSet(); @@ -71,7 +75,8 @@ function setupMatch() { } function showSettingsMenu() { - settingsMenuOpened = getTime(); + settingsMenuOpened = getSecondsTime(); + l = null; settingsMenu(function (s, reset) { E.showMenu(); @@ -79,7 +84,7 @@ function showSettingsMenu() { if (reset) { setupMatch(); - } else if (getTime() - settingsMenuOpened < 0.5 || correctionMode) { + } else if (getSecondsTime() - settingsMenuOpened < 500 || correctionMode) { correctionMode = !correctionMode; } @@ -125,7 +130,7 @@ function formatNumber(num, length) { } function formatDuration(duration) { - let durS = Math.floor(duration); + let durS = Math.floor(duration / 1000); let durM = Math.floor(durS / 60); let durH = Math.floor(durM / 60); durS = durS - durM * 60; @@ -208,7 +213,7 @@ function updateCurrentSet(val) { setFirstShownSet(); if (val > 0) { - scores[cSet][2] = getTime(); + scores[cSet][2] = getSecondsTime(); if (matchEnded()) { firstShownSet = 0; From eb384cef31027b03d009cecfa761188e52ccfe8b Mon Sep 17 00:00:00 2001 From: Mika Dede Date: Tue, 28 Sep 2021 21:56:18 +0200 Subject: [PATCH 061/392] score: fix layout for 176x176 resolution --- apps/score/score.app.js | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/apps/score/score.app.js b/apps/score/score.app.js index 0c5d66169..8e1535f86 100644 --- a/apps/score/score.app.js +++ b/apps/score/score.app.js @@ -344,7 +344,7 @@ function draw() { g.setFont('5x9Numeric7Seg',2); g.drawString( setsWon(p), - getXCoord(w => p === 0 ? 10 : w-8), + getXCoord(w => p === 0 ? 5 : w-3), h-5 ); @@ -353,7 +353,7 @@ function draw() { g.setFont('7x11Numeric7Seg',2); g.drawString( formatNumber(matchScore(p), 3), - getXCoord(w => p === 0 ? w/2 - 8 : w/2 + 11), + getXCoord(w => p === 0 ? w/2 - 3 : w/2 + 6), h-5 ); } @@ -383,17 +383,17 @@ function draw() { let y = (h-15)/(setsOnCurrentPage+1)*(set-firstShownSet+1)+5; - g.setFontAlign(1,0); + g.setFontAlign(-1,0); g.setFont('7x11Numeric7Seg',1); - g.drawString(set+1, 40, y-10); + g.drawString(set+1, 5, y-10); if (scores[set+1][2] != null) { let dur2 = formatDuration(scores[set+1][2] - scores[set][2]); - g.drawString(dur2, 40, y+10); + g.drawString(dur2, 5, y+10); } for (let p = 0; p < 2; p++) { if (!setWon(set, p === 0 ? 1 : 0) || matchEnded()) { - let bigNumX = getXCoord(w => p === 0 ? w/4 : w/4*3+3); + let bigNumX = getXCoord(w => p === 0 ? w/4-12 : w/4*3+15); let smallNumX = getXCoord(w => p === 0 ? w/2-2 : w/2+3); if (settings.enableTennisScoring && set === cSet && !shouldTiebreak()) { From dca65f0490e25747e57f10c08afc6d8dfa293751 Mon Sep 17 00:00:00 2001 From: Mika Dede Date: Tue, 28 Sep 2021 21:56:33 +0200 Subject: [PATCH 062/392] score: set score limit of 999 --- apps/score/score.settings.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/apps/score/score.settings.js b/apps/score/score.settings.js index da35d7a21..d63c52a9b 100644 --- a/apps/score/score.settings.js +++ b/apps/score/score.settings.js @@ -114,6 +114,7 @@ m['Score to win'] = { value: settings.winScore, min:1, + max: 999, onchange: m => setAndSave('winScore', m), }; m['2-point lead'] = { @@ -129,6 +130,7 @@ m['Maximum score'] = { value: settings.maxScore, min: 1, + max: 999, onchange: m => setAndSave('maxScore', m), }; m['Tennis scoring'] = { From a15622f00a89e434f085e4920642dbe4243563a0 Mon Sep 17 00:00:00 2001 From: Mika Dede Date: Fri, 1 Oct 2021 22:17:51 +0200 Subject: [PATCH 063/392] score: add readme to apps.json --- apps.json | 1 + 1 file changed, 1 insertion(+) diff --git a/apps.json b/apps.json index b1e6f70fc..f0690f0d3 100644 --- a/apps.json +++ b/apps.json @@ -3560,6 +3560,7 @@ "icon": "score.app.png", "version":"0.01", "description": "Score Tracker for sports that use plain numbers (e.g. Badminton, Volleyball, Soccer, Table Tennis, ...). Also supports tennis scoring.", + "readme": "README.md", "tags": "b2", "type": "app", "storage": [ From e7d0903e82939d257b2a73b275b8a3e1fba1fa95 Mon Sep 17 00:00:00 2001 From: Mika Dede Date: Fri, 1 Oct 2021 22:18:07 +0200 Subject: [PATCH 064/392] score: add data "scores.json" to apps.json --- apps.json | 3 +++ 1 file changed, 3 insertions(+) diff --git a/apps.json b/apps.json index f0690f0d3..611edb53a 100644 --- a/apps.json +++ b/apps.json @@ -3568,6 +3568,9 @@ {"name":"score.settings.js","url":"score.settings.js"}, {"name":"score.presets.json","url":"score.presets.json"}, {"name":"score.img","url":"score.app-icon.js","evaluate":true} + ], + "data": [ + {"name":"score.json"} ] } ] From fbe14a79d1aa096ba3c2bb891a918f5ffc896885 Mon Sep 17 00:00:00 2001 From: Mika Dede Date: Sun, 3 Oct 2021 15:39:07 +0200 Subject: [PATCH 065/392] score: fix scrolling on b2, change b2 detection --- apps/score/score.app.js | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/apps/score/score.app.js b/apps/score/score.app.js index 8e1535f86..24e49fa66 100644 --- a/apps/score/score.app.js +++ b/apps/score/score.app.js @@ -29,15 +29,11 @@ function getSecondsTime() { } function setupInputWatchers() { - if (global.BTN4) { - setWatch(() => handleInput(2), BTN2, { repeat: true }); - setWatch(() => handleInput(0), BTN1, { repeat: true }); - setWatch(() => handleInput(1), BTN3, { repeat: true }); - } else { - setWatch(() => handleInput(2), BTN, { repeat: true }); - } + isBangle1 = !!global.BTN4; + setWatch(() => handleInput(2), isBangle1 != null ? BTN2 : BTN, { repeat: true }); + Bangle.setUI('updown', v => v && handleInput(Math.floor((v+2)/2)+(isBangle1 ? 0 : 3))); Bangle.on('touch', (b, e) => { - if (b) { + if (isBangle1) { if (b === 1) { handleInput(3); } else { From 01d33cbbfa0864b793c2022296607aae0330d3d9 Mon Sep 17 00:00:00 2001 From: Mika Dede Date: Sat, 9 Oct 2021 20:01:48 +0200 Subject: [PATCH 066/392] score: call setUI after menu --- apps/score/score.app.js | 36 ++++++++++++++++++++---------------- 1 file changed, 20 insertions(+), 16 deletions(-) diff --git a/apps/score/score.app.js b/apps/score/score.app.js index 24e49fa66..b48995849 100644 --- a/apps/score/score.app.js +++ b/apps/score/score.app.js @@ -28,25 +28,27 @@ function getSecondsTime() { return Math.floor(getTime() * 1000); } -function setupInputWatchers() { +function setupInputWatchers(init) { isBangle1 = !!global.BTN4; - setWatch(() => handleInput(2), isBangle1 != null ? BTN2 : BTN, { repeat: true }); Bangle.setUI('updown', v => v && handleInput(Math.floor((v+2)/2)+(isBangle1 ? 0 : 3))); - Bangle.on('touch', (b, e) => { - if (isBangle1) { - if (b === 1) { - handleInput(3); + if (init) { + setWatch(() => handleInput(2), isBangle1 != null ? BTN2 : BTN, { repeat: true }); + Bangle.on('touch', (b, e) => { + if (isBangle1) { + if (b === 1) { + handleInput(3); + } else { + handleInput(4); + } } else { - handleInput(4); + if (e.x < getXCoord(w => w/2)) { + handleInput(0); + } else { + handleInput(1); + } } - } else { - if (e.x < getXCoord(w => w/2)) { - handleInput(0); - } else { - handleInput(1); - } - } - }); + }); + } } function setupMatch() { @@ -87,6 +89,8 @@ function showSettingsMenu() { settingsMenuOpened = null; draw(); + + setupInputWatchers(); }, function (msg) { switch (msg) { case 'end_set': @@ -445,6 +449,6 @@ function draw() { g.flip(); } -setupInputWatchers(); +setupInputWatchers(true); setupMatch(); draw(); From 88f17232bc6d99def85f20f1ed83ee1a546a4cac Mon Sep 17 00:00:00 2001 From: Mika Dede Date: Sun, 10 Oct 2021 17:16:09 +0200 Subject: [PATCH 067/392] score: update b1 detection to use process.env --- apps/score/score.app.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/score/score.app.js b/apps/score/score.app.js index b48995849..7da068294 100644 --- a/apps/score/score.app.js +++ b/apps/score/score.app.js @@ -29,7 +29,7 @@ function getSecondsTime() { } function setupInputWatchers(init) { - isBangle1 = !!global.BTN4; + isBangle1 = process.env.BOARD === 'BANGLEJS'; Bangle.setUI('updown', v => v && handleInput(Math.floor((v+2)/2)+(isBangle1 ? 0 : 3))); if (init) { setWatch(() => handleInput(2), isBangle1 != null ? BTN2 : BTN, { repeat: true }); From 23ec132b4d7a7f4574a8bcc8c0e079612d27e8ea Mon Sep 17 00:00:00 2001 From: Mika Dede Date: Sun, 10 Oct 2021 17:19:03 +0200 Subject: [PATCH 068/392] score: switch score buttons --- apps/score/score.app.js | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/apps/score/score.app.js b/apps/score/score.app.js index 7da068294..0c2d8c78d 100644 --- a/apps/score/score.app.js +++ b/apps/score/score.app.js @@ -30,7 +30,15 @@ function getSecondsTime() { function setupInputWatchers(init) { isBangle1 = process.env.BOARD === 'BANGLEJS'; - Bangle.setUI('updown', v => v && handleInput(Math.floor((v+2)/2)+(isBangle1 ? 0 : 3))); + Bangle.setUI('updown', v => { + if (v) { + if (isBangle1) { + handleInput(Math.floor(((v*-1)+2)/2)) + } else { + handleInput(Math.floor((v+2)/2)+3) + } + } + }); if (init) { setWatch(() => handleInput(2), isBangle1 != null ? BTN2 : BTN, { repeat: true }); Bangle.on('touch', (b, e) => { From f6f1a1c352b4f43037280e6bcd198ebe86b405f7 Mon Sep 17 00:00:00 2001 From: Mika Dede Date: Sun, 10 Oct 2021 17:26:35 +0200 Subject: [PATCH 069/392] score: allow user to mirror score buttons on b1 --- apps/score/score.app.js | 5 +++-- apps/score/score.settings.js | 14 ++++++++++++++ 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/apps/score/score.app.js b/apps/score/score.app.js index 0c2d8c78d..4f1fd7b7b 100644 --- a/apps/score/score.app.js +++ b/apps/score/score.app.js @@ -33,9 +33,10 @@ function setupInputWatchers(init) { Bangle.setUI('updown', v => { if (v) { if (isBangle1) { - handleInput(Math.floor(((v*-1)+2)/2)) + let i = settings.mirrorScoreButtons ? v * -1 : v; + handleInput(Math.floor((i+2)/2)); } else { - handleInput(Math.floor((v+2)/2)+3) + handleInput(Math.floor((v+2)/2)+3); } } }); diff --git a/apps/score/score.settings.js b/apps/score/score.settings.js index d63c52a9b..3fc04839b 100644 --- a/apps/score/score.settings.js +++ b/apps/score/score.settings.js @@ -1,6 +1,13 @@ (function () { return (function (back, inApp, ret) { + const isBangle1 = process.env.BOARD === 'BANGLEJS' + function fillSettingsWithDefaults(settings) { + if (isBangle1) { + if (settings.mirrorScoreButtons == null) { + settings.mirrorScoreButtons = false; + } + } if (settings.winSets == null) { settings.winSets = 2; } @@ -100,6 +107,13 @@ } m['< Back'] = function () { back(settings, changed); }; m['Presets'] = function () { E.showMenu(presetMenu(back)); }; + if (isBangle1) { + m['Mirror Buttons'] = { + value: settings.mirrorScoreButtons, + format: m => offon[~~m], + onchange: m => setAndSave('mirrorScoreButtons', m), + }; + } m['Sets to win'] = { value: settings.winSets, min:1, From f5fefc7c993946a66ca7b62cf0f982d030ff05b8 Mon Sep 17 00:00:00 2001 From: Mika Dede Date: Sun, 10 Oct 2021 17:27:50 +0200 Subject: [PATCH 070/392] score: keep display powered on --- apps/score/score.app.js | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/apps/score/score.app.js b/apps/score/score.app.js index 4f1fd7b7b..87fdecf0c 100644 --- a/apps/score/score.app.js +++ b/apps/score/score.app.js @@ -19,6 +19,8 @@ let correctionMode = false; let w = g.getWidth(); let h = g.getHeight(); +let isBangle1 = process.env.BOARD === 'BANGLEJS'; + function getXCoord(func) { let offset = 40; return func(w-offset)+offset; @@ -29,7 +31,6 @@ function getSecondsTime() { } function setupInputWatchers(init) { - isBangle1 = process.env.BOARD === 'BANGLEJS'; Bangle.setUI('updown', v => { if (v) { if (isBangle1) { @@ -458,6 +459,12 @@ function draw() { g.flip(); } +// make sure LCD on Bangle.js 1 stays on +if (isBangle1) { + Bangle.setLCDTimeout(0); + Bangle.setLCDPower(true); +} + setupInputWatchers(true); setupMatch(); draw(); From a575f323d85fd00ac637bb68e9733e2446ef10c1 Mon Sep 17 00:00:00 2001 From: Mika Dede Date: Sun, 10 Oct 2021 17:41:54 +0200 Subject: [PATCH 071/392] score: don't reset match when changing button assignment --- apps/score/score.settings.js | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/apps/score/score.settings.js b/apps/score/score.settings.js index 3fc04839b..20482db65 100644 --- a/apps/score/score.settings.js +++ b/apps/score/score.settings.js @@ -63,8 +63,10 @@ require('Storage').writeJSON(fileName, settings); } - function setAndSave(key, value) { - changed = true; + function setAndSave(key, value, notChanged) { + if (!notChanged) { + changed = true; + } settings[key] = value; if (key === 'winScore' && settings.maxScore < value) { settings.maxScore = value; @@ -111,7 +113,7 @@ m['Mirror Buttons'] = { value: settings.mirrorScoreButtons, format: m => offon[~~m], - onchange: m => setAndSave('mirrorScoreButtons', m), + onchange: m => setAndSave('mirrorScoreButtons', m, true), }; } m['Sets to win'] = { From 729f5baf16350329fb4f49d2d5ec754aacb8fac7 Mon Sep 17 00:00:00 2001 From: Mika Dede Date: Sun, 10 Oct 2021 17:42:21 +0200 Subject: [PATCH 072/392] score: keep specific settings when selecting new preset --- apps/score/score.settings.js | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/apps/score/score.settings.js b/apps/score/score.settings.js index 20482db65..982652b94 100644 --- a/apps/score/score.settings.js +++ b/apps/score/score.settings.js @@ -90,7 +90,11 @@ m[presetNames[i]] = (function (i) { return function() { changed = true; + let mirrorScoreButtons = settings.mirrorScoreButtons; + settings = fillSettingsWithDefaults(presets[presetNames[i]]); + + settings.mirrorScoreButtons = mirrorScoreButtons; save(settings); ret(true); }; From ed9566dbb3486e8d2d82cdbb5b18bc49d3ffa814 Mon Sep 17 00:00:00 2001 From: Mika Dede Date: Sun, 10 Oct 2021 17:44:03 +0200 Subject: [PATCH 073/392] score: change default score button assignment --- apps/score/score.app.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/score/score.app.js b/apps/score/score.app.js index 87fdecf0c..d3bc5d1e1 100644 --- a/apps/score/score.app.js +++ b/apps/score/score.app.js @@ -34,7 +34,7 @@ function setupInputWatchers(init) { Bangle.setUI('updown', v => { if (v) { if (isBangle1) { - let i = settings.mirrorScoreButtons ? v * -1 : v; + let i = settings.mirrorScoreButtons ? v : v * -1; handleInput(Math.floor((i+2)/2)); } else { handleInput(Math.floor((v+2)/2)+3); From 52bdf22352b8d8752b62189b7daffda90a68d033 Mon Sep 17 00:00:00 2001 From: Mika Dede Date: Sun, 10 Oct 2021 20:39:53 +0200 Subject: [PATCH 074/392] score: allow user to choose if screen of b1 should stay on --- apps/score/score.app.js | 20 ++++++++++++++------ apps/score/score.settings.js | 10 ++++++++++ 2 files changed, 24 insertions(+), 6 deletions(-) diff --git a/apps/score/score.app.js b/apps/score/score.app.js index d3bc5d1e1..3a9b71505 100644 --- a/apps/score/score.app.js +++ b/apps/score/score.app.js @@ -30,6 +30,18 @@ function getSecondsTime() { return Math.floor(getTime() * 1000); } +function setupDisplay() { + // make sure LCD on Bangle.js 1 stays on + if (isBangle1) { + if (settings.keepDisplayOn) { + Bangle.setLCDTimeout(0); + Bangle.setLCDPower(true); + } else { + Bangle.setLCDTimeout(10); + } + } +} + function setupInputWatchers(init) { Bangle.setUI('updown', v => { if (v) { @@ -100,6 +112,7 @@ function showSettingsMenu() { draw(); + setupDisplay(); setupInputWatchers(); }, function (msg) { switch (msg) { @@ -459,12 +472,7 @@ function draw() { g.flip(); } -// make sure LCD on Bangle.js 1 stays on -if (isBangle1) { - Bangle.setLCDTimeout(0); - Bangle.setLCDPower(true); -} - +setupDisplay(); setupInputWatchers(true); setupMatch(); draw(); diff --git a/apps/score/score.settings.js b/apps/score/score.settings.js index 982652b94..88e367821 100644 --- a/apps/score/score.settings.js +++ b/apps/score/score.settings.js @@ -7,6 +7,9 @@ if (settings.mirrorScoreButtons == null) { settings.mirrorScoreButtons = false; } + if (settings.keepDisplayOn == null) { + settings.keepDisplayOn = true; + } } if (settings.winSets == null) { settings.winSets = 2; @@ -91,10 +94,12 @@ return function() { changed = true; let mirrorScoreButtons = settings.mirrorScoreButtons; + let keepDisplayOn = settings.keepDisplayOn; settings = fillSettingsWithDefaults(presets[presetNames[i]]); settings.mirrorScoreButtons = mirrorScoreButtons; + settings.keepDisplayOn = keepDisplayOn; save(settings); ret(true); }; @@ -119,6 +124,11 @@ format: m => offon[~~m], onchange: m => setAndSave('mirrorScoreButtons', m, true), }; + m['Keep display on'] = { + value: settings.keepDisplayOn, + format: m => offon[~~m], + onchange: m => setAndSave('keepDisplayOn', m, true), + } } m['Sets to win'] = { value: settings.winSets, From e8d8de648ba820c7be585e7f1b19a902317d3f76 Mon Sep 17 00:00:00 2001 From: Gordon Williams Date: Mon, 11 Oct 2021 14:00:40 +0100 Subject: [PATCH 075/392] small tweak for Bangle2 --- apps/score/score.app.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/score/score.app.js b/apps/score/score.app.js index 3a9b71505..5a0f9c1e1 100644 --- a/apps/score/score.app.js +++ b/apps/score/score.app.js @@ -54,7 +54,7 @@ function setupInputWatchers(init) { } }); if (init) { - setWatch(() => handleInput(2), isBangle1 != null ? BTN2 : BTN, { repeat: true }); + setWatch(() => handleInput(2), isBangle1 ? BTN2 : BTN, { repeat: true }); Bangle.on('touch', (b, e) => { if (isBangle1) { if (b === 1) { From 54d98db6c84a6ab1d984472025faba6a30b9c9c4 Mon Sep 17 00:00:00 2001 From: Gordon Williams Date: Mon, 11 Oct 2021 14:29:58 +0100 Subject: [PATCH 076/392] Bangle.js2 tweaks --- apps.json | 6 +++--- apps/gpsrec/ChangeLog | 1 + apps/gpsrec/app.js | 35 ++++++++++++++++++++--------------- apps/widbt/ChangeLog | 1 + apps/widbt/widget.js | 4 ++-- apps/widid/ChangeLog | 1 + apps/widid/widget.js | 3 +-- 7 files changed, 29 insertions(+), 22 deletions(-) diff --git a/apps.json b/apps.json index 611edb53a..1e2612fce 100644 --- a/apps.json +++ b/apps.json @@ -511,7 +511,7 @@ { "id": "gpsrec", "name": "GPS Recorder", "icon": "app.png", - "version":"0.23", + "version":"0.24", "interface": "interface.html", "description": "Application that allows you to record a GPS track. Can run in background", "tags": "tool,outdoors,gps,widget", @@ -687,7 +687,7 @@ { "id": "widbt", "name": "Bluetooth Widget", "icon": "widget.png", - "version":"0.05", + "version":"0.06", "description": "Show the current Bluetooth connection status in the top right of the clock", "tags": "widget,bluetooth,b2", "type":"widget", @@ -1316,7 +1316,7 @@ { "id": "widid", "name": "Bluetooth ID Widget", "icon": "widget.png", - "version":"0.02", + "version":"0.03", "description": "Display the last two tuple of your Bangle.js MAC address in the widget section. This is useful for figuring out which Bangle.js to connect to if you have more than one Bangle.js!", "tags": "widget,address,mac", "type":"widget", diff --git a/apps/gpsrec/ChangeLog b/apps/gpsrec/ChangeLog index 8d13df000..c91003914 100644 --- a/apps/gpsrec/ChangeLog +++ b/apps/gpsrec/ChangeLog @@ -25,3 +25,4 @@ 0.21: Fix issue where a period of 1s recorded every 2s, 5s every 6s, and so on 0.22: Ensure Bangle.setGPSPower uses 'gpsrec' as a tag 0.23: Fix issue where tracks wouldn't record when running from OpenStMap if a period hadn't been set up first +0.24: Better support for Bangle.js 2, avoid widget area for Graphs, smooth graphs more diff --git a/apps/gpsrec/app.js b/apps/gpsrec/app.js index 29594289d..164124257 100644 --- a/apps/gpsrec/app.js +++ b/apps/gpsrec/app.js @@ -102,7 +102,8 @@ function getTrackInfo(fn) { var lfactor = Math.cos(minLat*Math.PI/180); var ylen = (maxLat-minLat); var xlen = (maxLong-minLong)* lfactor; - var scale = xlen>ylen ? 200/xlen : 200/ylen; + var screenSize = g.getHeight()-48; // 24 for widgets, plus a border + var scale = xlen>ylen ? screenSize/xlen : screenSize/ylen; return { fn : fn, filename : filename, @@ -110,6 +111,7 @@ function getTrackInfo(fn) { records : nl, minLat : minLat, maxLat : maxLat, minLong : minLong, maxLong : maxLong, + lat : (minLat+maxLat)/2, lon : (minLong+maxLong)/2, lfactor : lfactor, scale : scale, duration : Math.round(duration/1000) @@ -180,16 +182,18 @@ function plotTrack(info) { getMapXY = osm.latLonToXY.bind(osm); } else { getMapXY = function(lat, lon) { "ram" - var ix = 30 + Math.round((long - info.minLong)*info.lfactor*info.scale); - var iy = 210 - Math.round((lat - info.minLat)*info.scale); - return {x:ix, y:iy}; + return {x:cx + Math.round((long - info.lon)*info.lfactor*info.scale), + y:cy + Math.round((info.lat - lat)*info.scale)}; } } E.showMenu(); // remove menu + E.showMessage("Drawing...","GPS Track "+info.fn); + g.flip(); // on buffered screens, draw a not saying we're busy + g.clear(1); var s = require("Storage"); var cx = g.getWidth()/2; - var cy = g.getHeight()/2; + var cy = 24 + (g.getHeight()-24)/2; g.setColor(1,0.5,0.5); g.setFont("Vector",16); g.drawString("Track"+info.fn.toString()+" - Loading",10,220); @@ -203,8 +207,8 @@ function plotTrack(info) { g.drawString("N",2,40); g.setColor(1,1,1); } else { - osm.lat = (info.minLat+info.maxLat)/2; - osm.lon = (info.minLong+info.maxLong)/2; + osm.lat = info.lat; + osm.lon = info.lon; osm.draw(); g.setColor(0, 0, 0); } @@ -251,7 +255,8 @@ function plotTrack(info) { g.drawString("Back",230,200); setWatch(function() { viewTrack(info.fn, info); - }, BTN3); + }, global.BTN3||BTN1); + Bangle.drawWidgets(); g.flip(); } @@ -260,8 +265,8 @@ function plotGraph(info, style) { E.showMenu(); // remove menu E.showMessage("Calculating...","GPS Track "+info.fn); var filename = getFN(info.fn); - var infn = new Float32Array(200); - var infc = new Uint16Array(200); + var infn = new Float32Array(80); + var infc = new Uint16Array(80); var title; var lt = 0; // last time var tn = 0; // count for each time period @@ -278,7 +283,7 @@ function plotGraph(info, style) { title = "Altitude (m)"; while(l!==undefined) { ++nl;c=l.split(","); - i = Math.round(200*(c[0]/1000 - strt)/dur); + i = Math.round(80*(c[0]/1000 - strt)/dur); infn[i]+=+c[3]; infc[i]++; l = f.readLine(f); @@ -289,7 +294,7 @@ function plotGraph(info, style) { var t,dx,dy,d,lt = c[0]/1000; while(l!==undefined) { ++nl;c=l.split(","); - i = Math.round(200*(c[0]/1000 - strt)/dur); + i = Math.round(80*(c[0]/1000 - strt)/dur); t = c[0]/1000; p = Bangle.project({lat:c[1],lon:c[2]}); dx = p.x-lp.x; @@ -320,9 +325,9 @@ function plotGraph(info, style) { // draw g.clear(1).setFont("6x8",1); var r = require("graph").drawLine(g, infn, { - x:4,y:0, + x:4,y:24, width: g.getWidth()-24, - height: g.getHeight()-8, + height: g.getHeight()-(24+8), axes : true, gridy : grid, gridx : 50, @@ -334,7 +339,7 @@ function plotGraph(info, style) { g.drawString("Back",230,200); setWatch(function() { viewTrack(info.fn, info); - }, BTN3); + }, global.BTN3||BTN1); g.flip(); } diff --git a/apps/widbt/ChangeLog b/apps/widbt/ChangeLog index e639f4044..4509487ac 100644 --- a/apps/widbt/ChangeLog +++ b/apps/widbt/ChangeLog @@ -2,3 +2,4 @@ 0.03: Ensure redrawing works with variable size widget system 0.04: Fix automatic update of Bluetooth connection status 0.05: Make Bluetooth widget thinner, and when on a bright theme use light grey for disabled color +0.06: Tweaking colors for dark/light themes and low bpp screens diff --git a/apps/widbt/widget.js b/apps/widbt/widget.js index 89a3cbdb8..a25d2c21c 100644 --- a/apps/widbt/widget.js +++ b/apps/widbt/widget.js @@ -2,9 +2,9 @@ function draw() { g.reset(); if (NRF.getSecurityStatus().connected) - g.setColor("#07f"); + g.setColor((g.getBPP()>8) ? "#07f" : (g.theme.dark ? "#0ff" : "#00f")); else - g.setColor(g.theme.bg ? "#AAA" : "#555"); + g.setColor(g.theme.dark ? "#666" : "#999"); g.drawImage(atob("CxQBBgDgFgJgR4jZMawfAcA4D4NYybEYIwTAsBwDAA=="),2+this.x,2+this.y); } function changed() { diff --git a/apps/widid/ChangeLog b/apps/widid/ChangeLog index 4152a8406..56f114d5f 100644 --- a/apps/widid/ChangeLog +++ b/apps/widid/ChangeLog @@ -1,2 +1,3 @@ 0.01: New Widget! 0.02: Tweaks for variable size widget system +0.03: Tweaking colors for dark/light themes diff --git a/apps/widid/widget.js b/apps/widid/widget.js index d4f4d6386..1c7a721bc 100644 --- a/apps/widid/widget.js +++ b/apps/widid/widget.js @@ -1,8 +1,7 @@ -/* jshint esversion: 6 */ (() => { function draw() { var id = NRF.getAddress().substr().substr(12).split(":"); - g.reset().setColor(0, 0.49, 1).setFont("6x8", 1); + g.reset().setColor(g.theme.dark ? "#0ff" : "#00f").setFont("6x8", 1); g.drawString(id[0], this.x+2, this.y+4, true); g.drawString(id[1], this.x+2, this.y+14, true); } From b2d389d56ea81855f36a2c44b6e69fe6bec4fcac Mon Sep 17 00:00:00 2001 From: hughbarney Date: Mon, 11 Oct 2021 14:31:10 +0100 Subject: [PATCH 077/392] Widbatpc: added option to fillbar with level color, see README for screenshots --- apps.json | 2 +- apps/widbatpc/ChangeLog | 1 + apps/widbatpc/README.md | 10 +++++++++- apps/widbatpc/screenshot.jpg | Bin 15828 -> 0 bytes apps/widbatpc/settings.js | 6 ++++++ apps/widbatpc/widbatpc.full.jpg | Bin 0 -> 3299 bytes apps/widbatpc/widbatpc.part.jpg | Bin 0 -> 2623 bytes apps/widbatpc/widget.js | 7 ++++++- 8 files changed, 23 insertions(+), 3 deletions(-) delete mode 100644 apps/widbatpc/screenshot.jpg create mode 100644 apps/widbatpc/widbatpc.full.jpg create mode 100644 apps/widbatpc/widbatpc.part.jpg diff --git a/apps.json b/apps.json index 876b243ae..7cc5e67f7 100644 --- a/apps.json +++ b/apps.json @@ -653,7 +653,7 @@ "name": "Battery Level Widget (with percentage)", "shortName": "Battery Widget", "icon": "widget.png", - "version":"0.12", + "version":"0.13", "description": "Show the current battery level and charging status in the top right of the clock, with charge percentage", "tags": "widget,battery,b2", "type":"widget", diff --git a/apps/widbatpc/ChangeLog b/apps/widbatpc/ChangeLog index 64482db71..09e4fabf4 100644 --- a/apps/widbatpc/ChangeLog +++ b/apps/widbatpc/ChangeLog @@ -9,3 +9,4 @@ 0.10: Add 'hide if charge greater than' 0.11: Don't overwrite existing settings on app update 0.12: Fixed for Bangle 2 +0.13: Fillbar setting added, see README diff --git a/apps/widbatpc/README.md b/apps/widbatpc/README.md index 6e8fd10cc..c75154f72 100644 --- a/apps/widbatpc/README.md +++ b/apps/widbatpc/README.md @@ -4,5 +4,13 @@ Show the current battery level and charging status in the top right of the clock Works with Bangle 1 and Bangle 2 -![](screenshot.jpg) +When the fillbar setting is on the level colour will fill the entire +bar. This makes for an easier to read dsiplay when the charge is +below 50%. + +![](widbatpc.full.jpg) + +When the fillbar setting is off the level colour will follow the battry percentage + +![](widbatpc.part.jpg) diff --git a/apps/widbatpc/screenshot.jpg b/apps/widbatpc/screenshot.jpg deleted file mode 100644 index 48f9893ecf124d426541f5fa7f455a938d2fa919..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15828 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': { value: s.hideifmorethan||100, min: 10, diff --git a/apps/widbatpc/widbatpc.full.jpg b/apps/widbatpc/widbatpc.full.jpg new file mode 100644 index 0000000000000000000000000000000000000000..3df2184fe6ed9be0be2f694b973248dc4dd52db7 GIT binary patch literal 3299 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℘8zZgqbgH#U5d#VcX-f_+3i|nRrYs3)1ABD+)FjabVt5SHxbQ`d^PtHO_Hezc@i#ZjqqtJQYQAe-sc4wjybW+;G2lWuVV5kScZm!+4#?ibfxv zFjErTgX8s(;0@Lsmbo{ZpMnAzOHy34i$_1s|zP!gjEx5IN_x#kb z=a%QNn06el?R)LG`y*V-AD_G}ooC5aaT9!Urb!MmQ*57>$-G2Cf`T6cHuBC4{dQooJ!^5s3{*^dm>UTZFq1gZc literal 0 HcmV?d00001 diff --git a/apps/widbatpc/widget.js b/apps/widbatpc/widget.js index 223db5f70..caecf8ae4 100644 --- a/apps/widbatpc/widget.js +++ b/apps/widbatpc/widget.js @@ -80,7 +80,12 @@ var s = 39; var x = this.x, y = this.y; const l = E.getBattery(); - const xl = x+4+l*(s-12)/100 + let xl = x+4+l*(s-12)/100; + + // show bar full in the level color, as you cant see the color if the bar is too small + if (setting('fillbar')) + xl = x+4+100*(s-12)/100; + c = levelColor(l); if (Bangle.isCharging() && setting('charger')) { From 87017ce81764c2f69636b87d349a458066442a3c Mon Sep 17 00:00:00 2001 From: Gordon Williams Date: Mon, 11 Oct 2021 15:37:43 +0100 Subject: [PATCH 078/392] More Bangle.js 2 tweaks --- apps.json | 4 +-- apps/openstmap/app.js | 1 + apps/speedo/ChangeLog | 1 + apps/speedo/speedo.js | 69 ++++++++++++++++++++++++++++++------------- 4 files changed, 53 insertions(+), 22 deletions(-) diff --git a/apps.json b/apps.json index 1e2612fce..c8e614625 100644 --- a/apps.json +++ b/apps.json @@ -500,9 +500,9 @@ { "id": "speedo", "name": "Speedo", "icon": "speedo.png", - "version":"0.04", + "version":"0.05", "description": "Show the current speed according to the GPS", - "tags": "tool,outdoors,gps", + "tags": "tool,outdoors,gps,b2", "storage": [ {"name":"speedo.app.js","url":"speedo.js"}, {"name":"speedo.img","url":"speedo-icon.js","evaluate":true} diff --git a/apps/openstmap/app.js b/apps/openstmap/app.js index 99f6d0c73..c33acd8ad 100644 --- a/apps/openstmap/app.js +++ b/apps/openstmap/app.js @@ -8,6 +8,7 @@ function redraw() { m.draw(); drawMarker(); if (WIDGETS["gpsrec"] && WIDGETS["gpsrec"].plotTrack) { + g.flip(); // force immediate draw on double-buffered screens - track will update later g.setColor(0.75,0.2,0); WIDGETS["gpsrec"].plotTrack(m); } diff --git a/apps/speedo/ChangeLog b/apps/speedo/ChangeLog index 35cef4520..91df52211 100644 --- a/apps/speedo/ChangeLog +++ b/apps/speedo/ChangeLog @@ -3,3 +3,4 @@ 0.03: Use offscreen buffer (not doublebuffer) Use 'locale' to get internationalised speed 0.04: Start GPS after loading app, just in case widgets affect it (#449) +0.05: Use Layout lib for Bangle.js 2 compatibility diff --git a/apps/speedo/speedo.js b/apps/speedo/speedo.js index 174702d71..1fcb16020 100644 --- a/apps/speedo/speedo.js +++ b/apps/speedo/speedo.js @@ -1,33 +1,62 @@ -var buf = Graphics.createArrayBuffer(240,120,1,{msb:true}); -var lastFix = {fix:0,satellites:0}; +var Layout = require("Layout"); +var layout; + +var lastFix = {fix:-1,satellites:0}; + +function speedoImage() { + return require("heatshrink").decompress(atob("kkdxH+ABteAAwWOECImZDQ2CAQglUD4us2fX68ymQDB1omFESWtDgIACEYYACrolPBwddmWIEZWsmVWJYgiLwXX2YcB1gdDq+BAodWGIWsEhQiDRAWBmQdEAAhGBroFC1ojMC4etERIlDAggkHNIgAWSYYjFVwNWGwgAP5KkBEYoFC1ihBagwAL5W72vKJAxpExCiDABnQ4W12vD6AHBEYxnT4YhB3ghCSIhqDe4SIP3giBM4LfFEYpiMDoQhC3fDCA7+DfBwiCAARmFAAmtEYlYagMywISHEQhEId4UyEYleqwABEZBHERQwABroZBq5rR6BGLNZKzMAAPKRZKzJr2tfaAAKxD7CfgRsD1g1GAAwME2YGDwQjFNgOzwMyCwuCwIAEBg0yHoKODEYmCcYNWCwutAAuzBgg4BCwJGEEgj7JV5r7BIwgjEWrDVCEQYkCWgYAWNYIjF/z8awQfD")); +} + function onGPS(fix) { + if (lastFix.fix != fix.fix) { + // if fix is different, change the layout + if (fix.fix) { + layout = new Layout( { + type:"v", c: [ + {type:"txt", font:"6x8:2", label:"Speed" }, + {type:"h", c: [ + {type:"img", src:speedoImage, pad:4 }, + {type:"txt", font:"35%", label:"--", fillx:true, id:"speed" }, + ]}, + {type:"txt", font:"6x8", label:"--", id:"units" }, + {type:"h", c: [ + {type:"txt", font:"10%", label:fix.satellites, pad:2, id:"sat" }, + {type:"txt", font:"6x8", pad:3, label:"Satellites" } + ]}, + ]},[],{lazy:true}); + } else { + layout = new Layout( { + type:"v", c: [ + {type:"txt", font:"6x8:2", label:"Speed" }, + {type:"img", src:speedoImage, pad:4 }, + {type:"txt", font:"6x8", label:"Waiting for GPS" }, + {type:"h", c: [ + {type:"txt", font:"10%", label:fix.satellites, pad:2, id:"sat" }, + {type:"txt", font:"6x8", pad:3, label:"Satellites" } + ]}, + ]},[],{lazy:true}); + } + g.clearRect(0,24,g.getWidth(),g.getHeight()); + layout.render(); + } lastFix = fix; - buf.clear(); - buf.setFontAlign(0,0); - buf.setFont("6x8"); - buf.drawString(fix.satellites+" satellites",120,6); + if (fix.fix) { + print(fix.fix); var speed = require("locale").speed(fix.speed); var m = speed.match(/([0-9,\.]+)(.*)/); // regex splits numbers from units var txt = (fix.speed<20) ? fix.speed.toFixed(1) : Math.round(fix.speed); - var value = m[1], units = m[2]; - var s = 80; - buf.setFontVector(s); - buf.drawString(value,120,10+s/2); - buf.setFont("6x8",2); - buf.drawString(units,120,s+26); - } else { - buf.setFont("6x8",2); - buf.drawString("Waiting for GPS",120,56); + layout.speed.label = m[1]; + layout.units.label = m[2]; } - g.reset(); - g.drawImage({width:buf.getWidth(),height:buf.getHeight(),bpp:1,buffer:buf.buffer},0,70); - g.flip(); + layout.sat.label = fix.satellites; + layout.render(); } g.clear(); -onGPS(lastFix); +onGPS({fix:0,satellites:0}); +onGPS({fix:1,satellites:3,speed:200}); // testing Bangle.loadWidgets(); Bangle.drawWidgets(); Bangle.on('GPS', onGPS); -Bangle.setGPSPower(1); +Bangle.setGPSPower(1, "app"); From 68cc9fbd40d0f80ad0309caa5f8133aada5c6ed4 Mon Sep 17 00:00:00 2001 From: Gordon Williams Date: Mon, 11 Oct 2021 15:39:44 +0100 Subject: [PATCH 079/392] oops - remove debugging --- apps/speedo/speedo.js | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/apps/speedo/speedo.js b/apps/speedo/speedo.js index 1fcb16020..2e729c114 100644 --- a/apps/speedo/speedo.js +++ b/apps/speedo/speedo.js @@ -41,8 +41,7 @@ function onGPS(fix) { } lastFix = fix; - if (fix.fix) { - print(fix.fix); + if (fix.fix && isFinite(fix.speed)) { var speed = require("locale").speed(fix.speed); var m = speed.match(/([0-9,\.]+)(.*)/); // regex splits numbers from units var txt = (fix.speed<20) ? fix.speed.toFixed(1) : Math.round(fix.speed); @@ -54,7 +53,7 @@ function onGPS(fix) { } g.clear(); onGPS({fix:0,satellites:0}); -onGPS({fix:1,satellites:3,speed:200}); // testing +// onGPS({fix:1,satellites:3,speed:200}); // testing Bangle.loadWidgets(); Bangle.drawWidgets(); From 300ed35bcac618b96a7baca7dd994e3cc117958f Mon Sep 17 00:00:00 2001 From: Gordon Williams Date: Tue, 12 Oct 2021 17:08:45 +0100 Subject: [PATCH 080/392] remove bangle.js banner --- index.html | 4 ---- 1 file changed, 4 deletions(-) diff --git a/index.html b/index.html index e1c195f7d..a5ae7bff0 100644 --- a/index.html +++ b/index.html @@ -40,10 +40,6 @@ -
- -  Bangle.js 2 is now on KickStarter!  Check it out here -
From c795b5e3c577fa37bb322ac4735a5df584968442 Mon Sep 17 00:00:00 2001 From: Gordon Williams Date: Thu, 14 Oct 2021 16:22:49 +0100 Subject: [PATCH 081/392] Add menusmall for small menus on Bangle.js 2 Updated about with new images --- apps.json | 13 ++++- apps/about/ChangeLog | 1 + apps/about/app.js | 2 +- apps/menusmall/ChangeLog | 1 + apps/menusmall/app.png | Bin 0 -> 619 bytes apps/menusmall/boot.js | 121 +++++++++++++++++++++++++++++++++++++++ 6 files changed, 136 insertions(+), 2 deletions(-) create mode 100644 apps/menusmall/ChangeLog create mode 100644 apps/menusmall/app.png create mode 100644 apps/menusmall/boot.js diff --git a/apps.json b/apps.json index c8e614625..c0923e50d 100644 --- a/apps.json +++ b/apps.json @@ -67,7 +67,7 @@ { "id": "about", "name": "About", "icon": "app.png", - "version":"0.08", + "version":"0.09", "description": "Bangle.js About page - showing software version, stats, and a collaborative mural from the Bangle.js KickStarter backers", "tags": "tool,system,b2", "allow_emulator":true, @@ -3572,5 +3572,16 @@ "data": [ {"name":"score.json"} ] +}, +{ "id": "menusmall", + "name": "Small Menus", + "icon": "app.png", + "version":"0.01", + "description": "Replace Bangle.js 2's menus with a version that contains smaller text", + "tags": "b2,bno1", + "type": "boot", + "storage": [ + {"name":"menusmall.boot.js","url":"boot.js"} + ] } ] diff --git a/apps/about/ChangeLog b/apps/about/ChangeLog index 62e8d0126..ccc80148c 100644 --- a/apps/about/ChangeLog +++ b/apps/about/ChangeLog @@ -6,3 +6,4 @@ 0.06: Actual pixels as of 12 Jun 2020 0.07: Pressing a button now exits immediately (fix #618) 0.08: Make about (mostly) work on non-240px screens +0.09: Actual Bangle.js 1 pixels as of 13 Oct 2021 diff --git a/apps/about/app.js b/apps/about/app.js index 43b45010b..28a292376 100644 --- a/apps/about/app.js +++ b/apps/about/app.js @@ -32,7 +32,7 @@ g.setFontAlign(0,-1); g.flip(); // Pixel chooser image -g.drawImage(require("heatshrink").decompress(atob("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")),0,y+8); +g.drawImage(require("heatshrink").decompress(atob("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")),0,y+8); g.drawString(NRF.getAddress(),g.getWidth()/2,g.getHeight()-8,true); g.flip(); diff --git a/apps/menusmall/ChangeLog b/apps/menusmall/ChangeLog new file mode 100644 index 000000000..5560f00bc --- /dev/null +++ b/apps/menusmall/ChangeLog @@ -0,0 +1 @@ +0.01: New App! diff --git a/apps/menusmall/app.png b/apps/menusmall/app.png new file mode 100644 index 0000000000000000000000000000000000000000..094ee447cd355a0a2fa4ba20b3708100d782a5de GIT binary patch literal 619 zcmV-x0+juUP)DL6JZd>pLf3wLK`SStkO#f5epGwg#H87L%>idD0m8ZY3QLK=9p8D0goOf zH@yf#+DIcF5`+@EX^|9di|Da}5;X}yySsV4ibyse6|=j~@3{NE!_33Z?92d!5JCtc zgb)%ygxi61E`J1|<WA%3s8cd0u&(V0t`|Ej=fw2`JW?%jMWKF zGFCDn`@Ppob=UaV2T%YCKmphadv+gCf9mRc(DwmRrT_(?0KVP_Tpz%9&H_vU3P1rU z00p1`6o3Ly0PX|04;X$HNaynMe|f*~{S(&TSD@g`UFZoRmbERjIMFrWZRi4?&0hT% zrnB0XS@c8^EML5W%K6CI8MIN*OZA7I+6O$jbWO~4n$h`gb85`sUw32SRg^ur50Hzo z89QXupdm71@E^4w_M)i1`RvI)K-3ydDa0)R-$uCJmWD|E8NBBjA!FM-RAlcC0DFjQ z4pil?v1uOoq7zhK?3WeUdoaY6`+9MAbL2i?Qn79(9zjFKCGQ{W<@!Be&H`FHye@t^ zulgLRYK?Bjx5JRw*|yY`hPJKNMidv&7&*>=uUw?btf?=eL=jNAz zZ1`cMwUUV&07?LaYRQ!Ha<3G)x!zfduQ^NcH4s9E;TMUolhx*FzTW@<002ovPDHLk FV1lfj3d#Tg literal 0 HcmV?d00001 diff --git a/apps/menusmall/boot.js b/apps/menusmall/boot.js new file mode 100644 index 000000000..968f8866c --- /dev/null +++ b/apps/menusmall/boot.js @@ -0,0 +1,121 @@ +;//not entirely sure why we need this - related to how bootupdate adds these to .boot0 +E.showMenu = function(items) { + g.clear(1).flip(); // clear screen if no menu supplied + Bangle.drawWidgets(); + if (!items) { + Bangle.setUI(); + return; + } + var w = g.getWidth(); + var h = g.getHeight(); + var menuItems = Object.keys(items); + var options = items[""]; + if (options) menuItems.splice(menuItems.indexOf(""),1); + if (!(options instanceof Object)) options = {}; + options.fontHeight=14; + options.x=0; + options.x2=w-1; + options.y=24; + options.y2=h-12; + if (options.selected === undefined) + options.selected = 0; + var x = 0|options.x; + var x2 = options.x2||(g.getWidth()-1); + var y = 0|options.y; + var y2 = options.y2||(g.getHeight()-1); + if (options.title) + y += 15; + var loc = require("locale"); + var l = { + lastIdx : 0, + draw : function(rowmin,rowmax) { + var rows = 0|Math.min((y2-y) / options.fontHeight,menuItems.length); + var idx = E.clip(options.selected-(rows>>1),0,menuItems.length-rows); + if (idx!=l.lastIdx) rowmin=undefined; // redraw all if we scrolled + l.lastIdx = idx; + var iy = y; + g.reset().setFontAlign(0,-1,0); + g.setFontCustom(atob("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"), 32, atob("AwIGCAgICAMFBQYIAwYDBwcFBgYHBgYGBgYDAwYHBgcHBgYGBgYGBgYEBgYGBgYGBgYGBgYGBggGBgYEBwQGBwQGBgYGBgYHBgYGBgYGBgYGBgYGBgYGBgYGBgQCBAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAHCAYGBgAGBgYGAAYGBQYABgMGBgQABgYHBgAGBgYGBgYGBgYGBgYGBgYEBAYGBgYGBgYGAAYGBgYGBgYHBgYGBgYGBgYGBgYGBgYGBwcGBgYGBgYABgYGBgYGBg=="), 15); + + if (rowmin===undefined && options.title) + g.drawString(options.title,(x+x2)/2,y-14).drawLine(x,y-2,x2,y-2). + setColor(g.theme.fg).setBgColor(g.theme.bg); + iy += 12; + g.setColor((idx>0)?g.theme.fg:g.theme.bg).fillPoly([72,iy,104,iy,88,iy-12]); + if (rowmin!==undefined) { + if (idxrowmax) { + rows = 1+rowmax-rowmin; + } + } + var less = idx>0; + while (rows--) { + var name = menuItems[idx]; + var item = items[name]; + var hl = (idx==options.selected && !l.selectEdit); + g.setColor(hl ? g.theme.bgH : g.theme.bg); + g.fillRect(x,iy,x2,iy+options.fontHeight-1); + g.setColor(hl ? g.theme.fgH : g.theme.fg); + g.setFontAlign(-1,-1); + g.drawString(loc.translate(name),x+1,iy+1); + if ("object" == typeof item) { + var xo = x2; + var v = item.value; + if (item.format) v=item.format(v); + v = loc.translate(""+v); + if (l.selectEdit && idx==options.selected) { + xo -= 24 + 1; + g.setColor(g.theme.bgH).fillRect(xo-(g.stringWidth(v)+4),iy,x2,iy+options.fontHeight-1); + g.setColor(g.theme.fgH).drawImage("\x0c\x05\x81\x00 \x07\x00\xF9\xF0\x0E\x00@",xo,iy+(options.fontHeight-10)/2,{scale:2}); + } + g.setFontAlign(1,-1); + g.drawString(v,xo-2,iy+1); + } + g.setColor(g.theme.fg); + iy += options.fontHeight; + idx++; + } + g.setFontAlign(-1,-1); + g.setColor((idxitem.max) item.value = item.max; + if (item.onchange) item.onchange(item.value); + l.draw(options.selected,options.selected); + } else { + var a=options.selected; + options.selected = (dir+options.selected)%menuItems.length; + if (options.selected<0) options.selected += menuItems.length; + l.draw(Math.min(a,options.selected), Math.max(a,options.selected)); + } + } + }; + l.draw(); + Bangle.setUI("updown",dir => { + if (dir) l.move(dir); + else l.select(); + }); + return l; +}; From 541dbb4a9b4fc95b4ae63f0db98067c14069c1e6 Mon Sep 17 00:00:00 2001 From: Gordon Williams Date: Thu, 14 Oct 2021 16:34:32 +0100 Subject: [PATCH 082/392] fix lint error --- apps/menusmall/boot.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/menusmall/boot.js b/apps/menusmall/boot.js index 968f8866c..59e47b178 100644 --- a/apps/menusmall/boot.js +++ b/apps/menusmall/boot.js @@ -1,4 +1,4 @@ -;//not entirely sure why we need this - related to how bootupdate adds these to .boot0 +"";//not entirely sure why we need this - related to how bootupdate adds these to .boot0 E.showMenu = function(items) { g.clear(1).flip(); // clear screen if no menu supplied Bangle.drawWidgets(); From be34e2b00d7536535b1fb768b6d94a2d413ea3a3 Mon Sep 17 00:00:00 2001 From: Gordon Williams Date: Thu, 14 Oct 2021 17:14:10 +0100 Subject: [PATCH 083/392] new 'health' app for 2v11, improved bangle2 launcher --- apps.json | 19 +++++++++++-- apps/health/ChangeLog | 1 + apps/health/README.md | 38 +++++++++++++++++++++++++ apps/health/app-icon.js | 1 + apps/health/app.js | 60 +++++++++++++++++++++++++++++++++++++++ apps/health/app.png | Bin 0 -> 1104 bytes apps/health/boot.js | 38 +++++++++++++++++++++++++ apps/health/lib.js | 61 ++++++++++++++++++++++++++++++++++++++++ apps/launchb2/ChangeLog | 1 + apps/launchb2/app.js | 8 +++++- 10 files changed, 224 insertions(+), 3 deletions(-) create mode 100644 apps/health/ChangeLog create mode 100644 apps/health/README.md create mode 100644 apps/health/app-icon.js create mode 100644 apps/health/app.js create mode 100644 apps/health/app.png create mode 100644 apps/health/boot.js create mode 100644 apps/health/lib.js diff --git a/apps.json b/apps.json index bebace661..439b7e1b2 100644 --- a/apps.json +++ b/apps.json @@ -13,6 +13,21 @@ ], "sortorder" : -10 }, + { "id": "health", + "name": "Health Tracking", + "tags": "tool,system,b2", + "icon": "app.png", + "version":"0.01", + "description": "Logs health data and provides an app to view it (BETA - requires firmware 2v11)", + "readme": "README.md", + "storage": [ + {"name":"health.app.js","url":"app.js"}, + {"name":"health.img","url":"app-icon.js","evaluate":true}, + {"name":"health.boot.js","url":"boot.js"}, + {"name":"health","url":"lib.js"} + ], + "sortorder" : -10 + }, { "id": "moonphase", "name": "Moonphase", "icon": "app.png", @@ -55,7 +70,7 @@ "name": "Launcher (Bangle.js 2)", "shortName":"Launcher", "icon": "app.png", - "version":"0.02", + "version":"0.03", "description": "This is needed by Bangle.js 2.0 to display a menu allowing you to choose your own applications. It will not work on Bangle.js 1.0.", "tags": "tool,system,launcher,b2,bno1", "type":"launch", @@ -3578,7 +3593,7 @@ "icon": "app.png", "version":"0.01", "description": "Replace Bangle.js 2's menus with a version that contains smaller text", - "tags": "b2,bno1", + "tags": "b2,bno1,system", "type": "boot", "storage": [ {"name":"menusmall.boot.js","url":"boot.js"} diff --git a/apps/health/ChangeLog b/apps/health/ChangeLog new file mode 100644 index 000000000..5560f00bc --- /dev/null +++ b/apps/health/ChangeLog @@ -0,0 +1 @@ +0.01: New App! diff --git a/apps/health/README.md b/apps/health/README.md new file mode 100644 index 000000000..0ba0d8228 --- /dev/null +++ b/apps/health/README.md @@ -0,0 +1,38 @@ +# Health Tracking + +Logs health data to a file every 10 minutes, and provides an app to view it + +**BETA - requires firmware 2v11** + +## Usage + +Once installed, health data is logged automatically. + +To view data, run the `Health` app from your watch. + +## Features + +Stores: + +* Heart rate (TODO) +* Step count +* Movement + +## Technical Info + +Once installed, the `health.boot.js` hooks onto the `Bangle.health` event and +writes data to a binary file (one per month). + +A library (that can be used with `require("health").readXYZ` can then be used +to grab historical health info. + +## TODO + +* **Extend file format to include combined data for each day (to make graphs faster)** +* `interface` page for desktop to allow data to be viewed and exported in common formats +* More features in app: + * Step counting goal (ensure pedometers use this) + * Calendar view showing steps per day + * Yearly view + * Heart rate 'zone' graph + * .. other diff --git a/apps/health/app-icon.js b/apps/health/app-icon.js new file mode 100644 index 000000000..d522d9a9a --- /dev/null +++ b/apps/health/app-icon.js @@ -0,0 +1 @@ +require("heatshrink").decompress(atob("mEw4UA///8H5AYM7/5L/ACsBqtQAgMFqtABYcVqtVAgIDBqgLDAwITBDYNVrQiEAANQEQNVtWAFIYfCE4Xq0AuEAAdX1W0BZFe1XUHQgADvWrJogAE9WtBYl66ouD2oLEtQGBFwQQBBYgeBFwYjFA4QuCBYgfCFwYLCL4IICFwacCPwetEwYLCR4QJBFwbFCU4QhBFwbMDNAYuCHQQwFFwowFFwowFFwwwEFwzNGFwjxFFwowEFw7aFBQwwDFwwwEFwwwEFw4wDBRAwBFxAwCFxAwCFxIA/AB4A=")) diff --git a/apps/health/app.js b/apps/health/app.js new file mode 100644 index 000000000..cb8651f4c --- /dev/null +++ b/apps/health/app.js @@ -0,0 +1,60 @@ +function menuMain() { + E.showMenu({ + "":{title:"Health Tracking"}, + "< Back":()=>load(), + "Step Counting":()=>menuStepCount(), + "Movement":()=>menuMovement() + }); +} + +function menuStepCount() { + E.showMenu({ + "":{title:"Step Counting"}, + "per hour":()=>stepsPerHour() + }); +} + +function menuMovement() { + E.showMenu({ + "":{title:"Movement"}, + "per hour":()=>movementPerHour() + }); +} + +function stepsPerHour() { + E.showMessage("Loading..."); + var data = new Uint16Array(24); + require("health").readDay(new Date(), h=>data[h.hr]+=h.steps); + g.clear(1); + Bangle.drawWidgets(); + g.reset(); + require("graph").drawBar(g, data, { + y:24, + miny: 0, + axes : true, + gridx : 6, + gridy : 500 + }); + Bangle.setUI("updown", ()=>menuStepCount()); +} + +function movementPerHour() { + E.showMessage("Loading..."); + var data = new Uint16Array(24); + require("health").readDay(new Date(), h=>data[h.hr]+=h.movement); + g.clear(1); + Bangle.drawWidgets(); + g.reset(); + require("graph").drawLine(g, data, { + y:24, + miny: 0, + axes : true, + gridx : 6, + ylabel : null + }); + Bangle.setUI("updown", ()=>menuStepCount()); +} + +Bangle.loadWidgets(); +Bangle.drawWidgets(); +menuMain(); diff --git a/apps/health/app.png b/apps/health/app.png new file mode 100644 index 0000000000000000000000000000000000000000..04f1fee5ebd50c744102fb878364858506b59c45 GIT binary patch literal 1104 zcmV-W1h4yvP)#2db4d?e4wiEO{}^ znxDEUsRm+)+1QLLsuUckw)3U> zPr)796h!-RdDRu;Ze-1Ft{!>r_{rl1-COPpvlo9=x@2%-qGHcC0uPt<^*fEg!?7cS zeE!y}C^Jy@1Y)P#MBmi`T))!b4sK8;HiIUao_Ouyzkq?<{`) z^B0!SDlJr9X*-_`4^v79%3CP7GPQ8~oPKy1a|3I4Gh#v(?EW=f-CQ%Oe6BJ)370{+ z0gj{=A9_jo*oX<)O^lvgY@6Yu%jeSJ;h)lhBm;k>0_1k^*RSQ{Sxk(+z8F&bXPT?`*nK6m(FF=w@N6zwb>N;(5u)3Zpr z-uiXjxMGV8G;wAu>FK29I#*G&y&N|wvfVbp!__h-!j^*do-W>6BPTWjPqaPcJ(AVH zB*A_RtC~2i_s_IMrMYT7->;*h=^?MoY2|ODo$e8RiHoYHPkRzcs%7UnCAdHIl=nZ$ zhZuw&-Gccz)l{I`;Cr#45~-!Df|yLkv{unW(*O7KNNovjk^00I}0!qD^Ws(Kfgi_(I?B=})pU)nou- zr-h;oGPK{>>oeO`8AZ>8y!UJ2so4O;4vVl}784m$;@Ob%Uabr30th)Di=ITGp7kY) zc&;9J8rZ>*w?Xif#!N)fl92Omy$Kp>fzV?;o~G}=huRdeG~~V02t&g?9CAKXyNQTp zA?NKz>o?^PhMW%sFJxX2tqeKqno+x1w}{YV4H--XD?{EJ&8pip0}yh$uskK?rO@N` zX4Y(~0SGy(1uM!XqL)L?Yt62A-V{5nh#g|z>y-=5Q { + // ensure we write health info for *last* block + var d = new Date(Date.now() - 590000); + + const DB_RECORD_LEN = 4; + const DB_RECORDS_PER_HR = 6; + const DB_RECORDS_PER_DAY = DB_RECORDS_PER_HR*24; + const DB_RECORDS_PER_MONTH = DB_RECORDS_PER_DAY*31; + const DB_HEADER_LEN = 8; + const DB_FILE_LEN = DB_HEADER_LEN + DB_RECORDS_PER_MONTH*DB_RECORD_LEN; + + function getRecordFN(d) { + return "health-"+d.getFullYear()+"-"+d.getMonth()+".raw"; + } + function getRecordIdx(d) { + return (DB_RECORDS_PER_DAY*(d.getDate()-1)) + + (DB_RECORDS_PER_HR*d.getHours()) + + (0|(d.getMinutes()*DB_RECORDS_PER_HR/60)); + } + + var rec = getRecordIdx(d); + var fn = getRecordFN(d); + var f = require("Storage").read(fn); + if (f) { + var dt = f.substr(DB_HEADER_LEN+(rec*DB_RECORD_LEN), DB_RECORD_LEN); + if (dt!="\xFF\xFF\xFF\xFF") { + print("HEALTH ERR: Already written!"); + return; + } + } else { + require("Storage").write(fn, "HEALTH1\0", 0, DB_FILE_LEN); // header + } + var recordData = String.fromCharCode( + health.steps>>8,health.steps&255, // 16 bit steps + health.bpm, // 8 bit bpm + Math.min(health.movement / 8, 255)); // movement + require("Storage").write(fn, recordData, DB_HEADER_LEN+(rec*DB_RECORD_LEN), DB_FILE_LEN); +}); diff --git a/apps/health/lib.js b/apps/health/lib.js new file mode 100644 index 000000000..791c4ce22 --- /dev/null +++ b/apps/health/lib.js @@ -0,0 +1,61 @@ +const DB_RECORD_LEN = 4; +const DB_RECORDS_PER_HR = 6; +const DB_RECORDS_PER_DAY = DB_RECORDS_PER_HR*24; +const DB_RECORDS_PER_MONTH = DB_RECORDS_PER_DAY*31; +const DB_HEADER_LEN = 8; +const DB_FILE_LEN = DB_HEADER_LEN + DB_RECORDS_PER_MONTH*DB_RECORD_LEN; + +function getRecordFN(d) { + return "health-"+d.getFullYear()+"-"+d.getMonth()+".raw"; +} +function getRecordIdx(d) { + return (DB_RECORDS_PER_DAY*(d.getDate()-1)) + + (DB_RECORDS_PER_HR*d.getHours()) + + (0|(d.getMinutes()*DB_RECORDS_PER_HR/60)); +} + +// Read all records from the given month +exports.readAllRecords = function(d, cb) { + var rec = getRecordIdx(d); + var fn = getRecordFN(d); + var f = require("Storage").read(fn); + var idx = DB_HEADER_LEN; + for (var day=0;day<31;day++) { + for (var hr=0;hr<24;hr++) { + for (var m=0;m{ if (app.icon) app.icon = s.read(app.icon); // should just be a link to a memory area }); +if (g.wrapString) { // FIXME: check not needed after 2v11 + g.setFont(font); + apps.forEach(app=>app.name = g.wrapString(app.name, g.getWidth()-64).join("\n")); +} function drawApp(i) { var y = 24+i*APPH-menuScroll; var app = apps[i]; if (!app || y<-APPH || y>=g.getHeight()) return; - g.setFont("6x8",2).setFontAlign(-1,0).drawString(app.name,64,y+32); + g.setFont(font).setFontAlign(-1,0).drawString(app.name,64,y+32); if (app.icon) try {g.drawImage(app.icon,8,y+8);} catch(e){} } From 3fb33811d0bf445fc2fb617c93e926363e6c61ad Mon Sep 17 00:00:00 2001 From: Gordon Williams Date: Thu, 14 Oct 2021 17:15:20 +0100 Subject: [PATCH 084/392] add back for health app --- apps/health/app.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/apps/health/app.js b/apps/health/app.js index cb8651f4c..f2df52972 100644 --- a/apps/health/app.js +++ b/apps/health/app.js @@ -10,6 +10,7 @@ function menuMain() { function menuStepCount() { E.showMenu({ "":{title:"Step Counting"}, + "< Back":()=>menuMain(), "per hour":()=>stepsPerHour() }); } @@ -17,6 +18,7 @@ function menuStepCount() { function menuMovement() { E.showMenu({ "":{title:"Movement"}, + "< Back":()=>menuMain(), "per hour":()=>movementPerHour() }); } From 8d808fa72cbde1909da0f00df3afa6c79f6500f2 Mon Sep 17 00:00:00 2001 From: hughbarney Date: Thu, 14 Oct 2021 18:55:13 +0100 Subject: [PATCH 085/392] Chronowid README updates, screenshots, Pastel: leave space at bottom for Chronowid --- apps.json | 6 +++--- apps/chronowid/README.md | 8 ++++++-- apps/pastel/ChangeLog | 1 + apps/pastel/pastel.app.js | 8 ++++---- apps/pastel/pastel.settings.js | 4 ++-- 5 files changed, 16 insertions(+), 11 deletions(-) diff --git a/apps.json b/apps.json index 0e73b5d9c..e49ab3b85 100644 --- a/apps.json +++ b/apps.json @@ -1421,7 +1421,7 @@ "icon": "chrono.png", "version":"0.01", "description": "Single click BTN1 to add 5 minutes. Single click BTN2 to add 30 seconds. Single click BTN3 to add 5 seconds. Tap to pause or play to timer. Double click BTN1 to reset. When timer finishes the watch vibrates.", - "tags": "Tools", + "tags": "tool", "storage": [ {"name":"chrono.app.js","url":"chrono.js"}, {"name":"chrono.img","url":"chrono-icon.js","evaluate":true} @@ -1562,7 +1562,7 @@ "icon": "app.png", "version":"0.03", "description": "Chronometer (timer) which runs as widget.", - "tags": "tools,widget", + "tags": "tool,widget,b2", "readme": "README.md", "storage": [ {"name":"chronowid.wid.js","url":"widget.js"}, @@ -3502,7 +3502,7 @@ "name": "Pastel Clock", "shortName": "Pastel", "icon": "pastel.png", - "version":"0.03", + "version":"0.04", "description": "A Configurable clock with custom fonts and background", "tags": "clock,b2", "type":"clock", diff --git a/apps/chronowid/README.md b/apps/chronowid/README.md index f422dd956..ec1d5dd46 100644 --- a/apps/chronowid/README.md +++ b/apps/chronowid/README.md @@ -5,11 +5,15 @@ The advantage is, that you can still see your normal watchface and other widgets The widget is always active, but only shown when the timer is on. Hours, minutes, seconds and timer status can be set with an app. -Depending on when you start the timer, it may alert up to 0,999 seconds early. This is because it checks only for full seconds. When there is less than one seconds left, it buzzes. This cannot be avoided without checking more than every second, which I would like to avoid. +When there is less than one seconds left on the timer it buzzes. + +The widget has been tested on Bangle 1 and Bangle 2 ## Screenshots -TBD +![](chrono_with_wave.jpg) +![](chrono_with_pastel.jpg) + ## Features diff --git a/apps/pastel/ChangeLog b/apps/pastel/ChangeLog index a0f660237..e0e967166 100644 --- a/apps/pastel/ChangeLog +++ b/apps/pastel/ChangeLog @@ -1,3 +1,4 @@ 0.01: First release 0.02: Display 12 hour clock as 12:xx not 00:xx when just into PM 0.03: Make it work with Gadgetbridge, Notifications fullscreen on a Bangle 2 +0.04: Leave space at the bottom for Chrono widget, set back option at first option diff --git a/apps/pastel/pastel.app.js b/apps/pastel/pastel.app.js index b97c02fc7..98f8af7f9 100644 --- a/apps/pastel/pastel.app.js +++ b/apps/pastel/pastel.app.js @@ -87,19 +87,19 @@ function draw() { // avoid flicker on a bangle 1 by comparing with previous minute if (mm_prev != mm) { mm_prev = mm; - g.clearRect(0, 30, w, h); + g.clearRect(0, 30, w, h - 24); } } else { // on a b2 safe to just clear anyway as there is no flicker - g.clearRect(0, 30, w, h); + g.clearRect(0, 30, w, h - 24); } // draw a grid like graph paper if (settings.grid && process.env.HWVERSION !=1) { g.setColor("#0f0"); for (var gx=20; gx <= w; gx += 20) - g.drawLine(gx, 30, gx, h); - for (var gy=30; gy <= h; gy += 20) + g.drawLine(gx, 30, gx, h - 24); + for (var gy=30; gy <= h - 24; gy += 20) g.drawLine(0, gy, w, gy); } diff --git a/apps/pastel/pastel.settings.js b/apps/pastel/pastel.settings.js index db7206dbb..2e4afadc8 100644 --- a/apps/pastel/pastel.settings.js +++ b/apps/pastel/pastel.settings.js @@ -26,6 +26,7 @@ E.showMenu({ '': { 'title': 'Pastel Clock' }, + '< Back': back, 'Font': { value: 0 | font_options.indexOf(s.font), min: 0, max: 4, @@ -50,7 +51,6 @@ s.date = !s.date save() }, - }, - '< Back': back, + } }) }) From 9c84d3f42020415200b0468fbbf0c79b5eb82c15 Mon Sep 17 00:00:00 2001 From: Etienne Deux Date: Fri, 15 Oct 2021 11:51:18 +0200 Subject: [PATCH 086/392] Adding locales to vclock-simple.js --- apps/svclock/vclock-simple.js | 41 +++++++++++++++-------------------- 1 file changed, 17 insertions(+), 24 deletions(-) diff --git a/apps/svclock/vclock-simple.js b/apps/svclock/vclock-simple.js index f3ab911bc..62aad0dc3 100644 --- a/apps/svclock/vclock-simple.js +++ b/apps/svclock/vclock-simple.js @@ -1,4 +1,6 @@ /* jshint esversion: 6 */ +const locale = require("locale"); + const timeFontSize = 65; const dateFontSize = 20; const gmtFontSize = 10; @@ -18,50 +20,41 @@ function drawSimpleClock() { Bangle.drawWidgets(); // get date - var d = new Date(); - var da = d.toString().split(" "); + //var d = new Date(); + var d = new Date(Date.parse('2011-04-11T14:5:30Z')); g.reset(); // default draw styles // drawSting centered g.setFontAlign(0, 0); - // draw time - var time = da[4].substr(0, 5).split(":"); - var hours = time[0], - minutes = time[1]; - var meridian = ""; + // drawTime + var hours; if (is12Hour) { - hours = parseInt(hours,10); - meridian = "AM"; - if (hours == 0) { - hours = 12; - meridian = "AM"; - } else if (hours >= 12) { - meridian = "PM"; - if (hours>12) hours -= 12; - } - hours = (" "+hours).substr(-2); + hours = ("0" + d.getHours()%12).slice(-2); + } else { + hours = ("0" + d.getHours()).slice(-2); } + var minutes = ("0" + d.getMinutes()).slice(-2); g.setFont(font, timeFontSize); g.drawString(`${hours}:${minutes}`, xyCenter, yposTime, true); - g.setFont(font, gmtFontSize); - g.drawString(meridian, xyCenter + 102, yposTime + 10, true); + + if (is12Hour) { + g.setFont(font, gmtFontSize); + g.drawString(locale.meridian(d), xyCenter + 102, yposTime + 10, true); + } // draw Day, name of month, Date - var date = [da[0], da[1], da[2]].join(" "); g.setFont(font, dateFontSize); - - g.drawString(date, xyCenter, yposDate, true); + g.drawString([locale.dow(d,1), locale.month(d,1), d.getDate()].join(" "), xyCenter, yposDate, true); // draw year g.setFont(font, dateFontSize); g.drawString(d.getFullYear(), xyCenter, yposYear, true); // draw gmt - var gmt = da[5]; g.setFont(font, gmtFontSize); - g.drawString(gmt, xyCenter, yposGMT, true); + g.drawString(d.toString().match(/GMT[+-]\d+/), xyCenter, yposGMT, true); } // handle switch display on by pressing BTN1 From ebb020ca9f643bfe32f95593a7c825e4778b1fc7 Mon Sep 17 00:00:00 2001 From: Filipe Fradique Date: Fri, 15 Oct 2021 23:57:29 +0100 Subject: [PATCH 087/392] Created Nifty Clock A --- apps.json | 13 +++++ apps/ffcniftya/ChangeLog | 1 + apps/ffcniftya/app-icon.js | 1 + apps/ffcniftya/app.js | 95 +++++++++++++++++++++++++++++++++++++ apps/ffcniftya/app.png | Bin 0 -> 2188 bytes 5 files changed, 110 insertions(+) create mode 100644 apps/ffcniftya/ChangeLog create mode 100644 apps/ffcniftya/app-icon.js create mode 100644 apps/ffcniftya/app.js create mode 100644 apps/ffcniftya/app.png diff --git a/apps.json b/apps.json index 1e2612fce..0a4be55e2 100644 --- a/apps.json +++ b/apps.json @@ -3572,5 +3572,18 @@ "data": [ {"name":"score.json"} ] +}, +{ "id": "ffcniftya", + "name": "Nifty-A Clock", + "icon": "app.png", + "version":"0.01", + "description": "A nifty clock with time and date", + "tags":"clock,b2", + "type":"clock", + "allow_emulator":true, + "storage": [ + {"name":"ffcniftya.app.js","url":"app.js"}, + {"name":"ffcniftya.img","url":"app-icon.js","evaluate":true} + ] } ] diff --git a/apps/ffcniftya/ChangeLog b/apps/ffcniftya/ChangeLog new file mode 100644 index 000000000..18bc264a3 --- /dev/null +++ b/apps/ffcniftya/ChangeLog @@ -0,0 +1 @@ +0.01: New Clock Nifty A diff --git a/apps/ffcniftya/app-icon.js b/apps/ffcniftya/app-icon.js new file mode 100644 index 000000000..f0a2393b1 --- /dev/null +++ b/apps/ffcniftya/app-icon.js @@ -0,0 +1 @@ +require("heatshrink").decompress(atob("mEwwkEIf4A5gX/+AGEn//mIWLgP/C4gGCAAMgC5UvC4sDC4YICkIhBgMQiEBE4Uxn4XDj//iEAn/yA4ICBgUikEikYXBBAIXEn/xJYURAYMygERkQHBiYLBKYIXF+AVDC4czgUSmIXBCQgED+ZeBR4YXBLYICDC5CPGC4IAIC40zmaPDC4MSLQQXK+ayCR4QXCiRoEC44ECh4bCC4MTiTDBC6ZHOC5B3NLYcvC4kBgL5BAAUikT+BfIIrB/8ykf/eYQXBkUTI4cBW4YQCgQGDmAXDkJfEC46GBAoJKCR4geCAAMRAAZRDAoIODO4UBPRIAJR5QXWgKNCTApNDC5Mv/6/DAwR3GAAyHCC4anJIo3/+bvEa4Uia4oXHkEvC4cvIgUf+YXKHYIvEAgcPC5QSGC5UBSwYXJLYQXFkUhgABBC5Ef/4mBl4XEmETmIXKgaXBmYCBC4cTkMxiQXJS4IACL4p3MgESCwJHFR5oxCiB3FkERC5cSToQXFmUyiAZFR48Bn7zCAQMjkfykQkBN4n/XgKPBAAQgCUQIfBUwYXHFgIGCdI4XDmYADmIIEkAWJAH4A4A==")) \ No newline at end of file diff --git a/apps/ffcniftya/app.js b/apps/ffcniftya/app.js new file mode 100644 index 000000000..0b8865bec --- /dev/null +++ b/apps/ffcniftya/app.js @@ -0,0 +1,95 @@ +const locale = require("locale"); +const is12Hour = (require("Storage").readJSON("setting.json", 1) || {})["12hour"]; + +/* Clock *********************************************/ +const scale = g.getWidth() / 176; + +const widget = 24; + +const viewport = { + width: g.getWidth(), + height: g.getHeight(), +} + +const center = { + x: viewport.width / 2, + y: Math.round(((viewport.height - widget) / 2) + widget), +} + +function d02(value) { + return ('0' + value).substr(-2); +} + +function draw() { + g.reset(); + g.clearRect(0, widget, viewport.width, viewport.height); + const now = new Date(); + + const hour = d02(now.getHours() - (is12Hour && now.getHours() > 12 ? 12 : 0)); + const minutes = d02(now.getMinutes()); + const day = d02(now.getDay()); + const month = d02(now.getMonth() + 1); + const year = now.getFullYear(); + + const month2 = locale.month(now, 3); + const day2 = locale.dow(now, 3); + + g.setFontAlign(1, 0).setFont("Vector", 90 * scale); + g.drawString(hour, center.x + 32 * scale, center.y - 31 * scale); + g.drawString(minutes, center.x + 32 * scale, center.y + 46 * scale); + + g.fillRect(center.x + 30 * scale, center.y - 72 * scale, center.x + 32 * scale, center.y + 74 * scale); + + g.setFontAlign(-1, 0).setFont("Vector", 16 * scale); + g.drawString(year, center.x + 40 * scale, center.y - 62 * scale); + g.drawString(month, center.x + 40 * scale, center.y - 44 * scale); + g.drawString(day, center.x + 40 * scale, center.y - 26 * scale); + g.drawString(month2, center.x + 40 * scale, center.y + 48 * scale); + g.drawString(day2, center.x + 40 * scale, center.y + 66 * scale); +} + + +/* Minute Ticker *************************************/ + +let tickTimer; + +function clearTickTimer() { + if (tickTimer) { + clearTimeout(tickTimer); + tickTimer = undefined; + } +} + +function queueNextTick() { + clearTickTimer(); + tickTimer = setTimeout(tick, 60000 - (Date.now() % 60000)); + // tickTimer = setTimeout(tick, 3000); +} + +function tick() { + draw(); + queueNextTick(); +} + +/* Init **********************************************/ + +// Clear the screen once, at startup +g.clear(); +// Start ticking +tick(); + +// Stop updates when LCD is off, restart when on +Bangle.on('lcdPower', (on) => { + if (on) { + tick(); // Start ticking + } else { + clearTickTimer(); // stop ticking + } +}); + +// Load widgets +Bangle.loadWidgets(); +Bangle.drawWidgets(); + +// Show launcher when middle button pressed +Bangle.setUI("clock"); \ No newline at end of file diff --git a/apps/ffcniftya/app.png b/apps/ffcniftya/app.png new file mode 100644 index 0000000000000000000000000000000000000000..1cd8a49b7ba951670fb8c007055a64f6d29dfc98 GIT binary patch literal 2188 zcmV;72y^#|P)?hiUTNH2?4Z%C_80Yk+zhAr8q)Ct(B5m*P-K< z-4S(wt>O&pbbYMTu{_)o+B!O2s61R07z*;}3M7)4K*;;-#KXpzS5fKyvEwiQeD}M* z@7!O`ch5QBcfkw1z;l9R8_r-bNF)-3aDILsLg;*acXxLHfKIDhP%kWhF6az;eM7xW zE>kEJqZ6YH2E!2(!?1%N931{}cve0ul}o2)rkc(-@p!!DRFl3v{ipjs!T-Vl4d~z7 zV)dHUW8-7c9^Ni|dl{s7vOG`Jo-hyp;Nb%Zp+qKOGMRSy-`)JqOqR$b5}8D$RiR6z zN=d_MmgK6Bt2QQXM7EEQPf}7603bLdcvIpgGMSv3mda!@Jv=?uu3P&!W>exOG~B?@ zKzu@c)A=SRf?iqs3L?+SXXE1In2!)Z1YG&@3i6*hcgB*h(x?u6Z~)of-rh(5a8z_e zR9sSAeY~0z$SEi&`1JUv#U;hJ`fec(1pwgX?F9g+`BP2lzEZtj|9<)VPNuU;RE3PR zw6q)7Zy;N#RKB+5wOzTp$QW6nR9NzdhlgipXOSI11oYqO_hI{Jwc48FH8HDWW~4KN zLxU6J6LIlzj|E93(xN>@wI^zki%cdv5k#YzGNRRKZ(P5@<#L0Ag8={!A3p5t>^yts ztdl?hK*jzFI!@oYW9Qy|dp8Rx#ziP|x>+dTlEI>A$P7etQ!Rfe*iwlRt0RRLA2J!ejfn+kjAL7yUNPs&K!EzLp zx+V3{;X`h2Zg1tkRrPTdj^nnRXB0#wQ`^Pu(c#fTflw$Au6cP)T|*s&kV>YCj))vZ zjgOD(_4?QivD{#8Pj^pbROGS=A^}oXR+d_=Hhc2l%%4@5R#S9Tw3Dc?m0>Iv3#Z}X z5#jUm^R^tyQ%fN&9)EP4E(OxZ15qe?gB}22_b~_|AtB>qgsAsf63kw7Sp6vrBXQ(M5d5qV`FhT9vKz6Dtwh)j%kJhg93Nw?uGywj0ONe zWOSqf8fY|{=!i(8(U37R36Rbyv*(< z1R=cEe$8rd%YCT!bZu^4EX(ABjH7c|FI`^Z)=l|Jj+Dnd$52n=DL@ii~n~b+zS~mW;2TZ;CJl0%$ZE?MTKj z5+F6VG~fUCeXCm;+cP}eJs>ds#A5N-*qCj2Uw>ciiP}@Or_d#b!a z>xX65Szb|Yghum{aaa!kP+VL*H8W+k#7>?%$qD3GF`qVNiwF)0{`UH}mZLkVsSi~i za$h3!)~_>P`uqEv0}&o|9a5>?V7qW}aY2T= zhx^q1DYIXz)jDriOfO$~DU;5OPl$&Qj@=v6YPChhMYsEIpKm&E<~;SrC=xAJs4Xom zVXMNBO(Ky_*PmYDzQTE|Kp;5$;o%E^yKt`QT+N?r2!g;!80xFccCZW-2ykGP5P)~6>U_)I)Yg=pI?Y@e#iru-pU0q!}#2o^m;AbA`ybVIF zx4~er-Gp>d2O(^3ZMGy^t+LS2Q1lH0$8k5B8)|1Q`Ok8eiQC0IKJSyGpQsiVi$jf0 zQ}>s;iSdb_jU5~uR45dvuv9OYdW6Y|C%V;VJX}Y9965O4;L6aIn;(H6!q0yrpF}31 za>Y?pL16)o<4J;~#NQ-3;@C+!TK1-IEB0z?L9!r-6QtAY#2w<%k4=z`OVGE zA*V{ELNPdwpE_--w&oY+g~>v6bOeV4H=b+6-AsdsJH(bExLmHMrzf&I#2qoKWA60d ziHMA-I8gD~@z1DKDuqJf@p%Jx2Oh_4h})o0DC7z``ua4lnOE!83%UiVTq==Cb7j%g6wS>+dMrzgSbJ0WI_4<^6i=134-wQ z^78fbePSkUi+o#H7WsTWzxQ^pEk`bw=e?QdC|^s2DP=P=GXnzyMqos(rxhq<3I?$0 z>1nfjXlN)pGCDgudr$Em27>_s!~oXT)+Q2(WV5p86!Zcw@c#t>z<&U{^`%9!77N+{ O0000 Date: Sat, 16 Oct 2021 14:49:13 +0100 Subject: [PATCH 088/392] Toucher: support for b2, Pastel: added 2 new custom fonts --- apps.json | 6 +- apps/pastel/ChangeLog | 1 + apps/pastel/README.md | 5 +- apps/pastel/pastel.app.js | 14 ++++ apps/pastel/pastel.settings.js | 4 +- apps/toucher/ChangeLog | 3 +- apps/toucher/README.md | 22 +++++ apps/toucher/app.js | 145 +++++++++++++++++++++++---------- apps/toucher/screenshot1.jpg | Bin 0 -> 21329 bytes 9 files changed, 152 insertions(+), 48 deletions(-) create mode 100644 apps/toucher/README.md create mode 100644 apps/toucher/screenshot1.jpg diff --git a/apps.json b/apps.json index c7abcf9f0..8e0dd604d 100644 --- a/apps.json +++ b/apps.json @@ -1478,9 +1478,9 @@ "name": "Touch Launcher", "shortName":"Toucher", "icon": "app.png", - "version":"0.06", + "version":"0.07", "description": "Touch enable left to right launcher.", - "tags": "tool,system,launcher", + "tags": "tool,system,launcher,b2", "type":"launch", "data": [ {"name":"toucher.json"} @@ -3517,7 +3517,7 @@ "name": "Pastel Clock", "shortName": "Pastel", "icon": "pastel.png", - "version":"0.04", + "version":"0.05", "description": "A Configurable clock with custom fonts and background", "tags": "clock,b2", "type":"clock", diff --git a/apps/pastel/ChangeLog b/apps/pastel/ChangeLog index e0e967166..1277f0d9d 100644 --- a/apps/pastel/ChangeLog +++ b/apps/pastel/ChangeLog @@ -2,3 +2,4 @@ 0.02: Display 12 hour clock as 12:xx not 00:xx when just into PM 0.03: Make it work with Gadgetbridge, Notifications fullscreen on a Bangle 2 0.04: Leave space at the bottom for Chrono widget, set back option at first option +0.05: Added 2 new fonts diff --git a/apps/pastel/README.md b/apps/pastel/README.md index 9e8c133ec..324c3915a 100644 --- a/apps/pastel/README.md +++ b/apps/pastel/README.md @@ -1,7 +1,7 @@ # Pastel Clock - a configurable clock with custom fonts and background * Designed specifically for Bangle 1 and Bangle 2 -* A choice of 5 different custom fonts +* A choice of 7 different custom fonts * Supports the Light and Dark themes * Has a settings menu, change font, enable/disable the grid and the date display @@ -15,3 +15,6 @@ I came up with the name Pastel due to the shade of the grid background. ![](screenshot_b1_light.jpg) ![](screenshot_b2_dark.jpg) +![](screenshot_monoton.jpg) +![](screenshot_elite.jpg) + diff --git a/apps/pastel/pastel.app.js b/apps/pastel/pastel.app.js index 98f8af7f9..1fe3e4a58 100644 --- a/apps/pastel/pastel.app.js +++ b/apps/pastel/pastel.app.js @@ -47,6 +47,16 @@ var scale = 1; // size multiplier for this font g.setFontCustom(font, 46, widths, 58+(scale<<8)+(1<<16)); }; +Graphics.prototype.setFontMonoton = function(scale) { + // Actual height 44 (43 - 0) + g.setFontCustom(atob("AAAAAAAAAAAAAAAAAAAABmwAAAAAAzYAAAAAAZsAAAAAAM2AAAAAAGbAAAAAADNgAAAAABmwAAAAAAzYAAAAAAZsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAD+AAAAAAf8AAAAAD/ggAAAAf8HwAAAD/g/4AAAf8H/AAAD/g/4OAAf8H/B/AD/g/4P+Af8H/B/wAfg/4P+AAMH/B/wAAA/4H+AAAD/A/4AAAB4H/AAAAAA/4AAAAAH/AAAAAAP4AAAAAAHAAAAAAAAAAAAAAAAAAAAAAAAAAA/gAAAAAH//gAAAAf//8AAAA/AAPgAAA8f/x8AAB4//+PAAB5+APxwABzwfwecAAzj//jnAA7n+P85gA7ngAPO4AbnH/xzsAdnP/+c3AN3PAHndgGzOAA5m4DbuAAO7MD9mAADN2Bs3AAB2bA2bAAAbNgbNgAANmwNmwAAGzYGzYAADZsDdmAADN2B+7AABuzAbMwABmbgNneAD3NgHZ3+/3MwBuc//nO4A7nB8HGYAM58AfOcAHeP/+OcABzx/8ecAAc+AA+cAAHH//8cAAB4//48AAAPg+B8AAAD+AP4AAAAP//wAAAAA/+AAAAAAAAAAAAAAAAAAABsAAAAAAA2AAAAAAAbAAAAAAANgAAAAAAGwAAAAAADf////8ABv////+AA3/////AAbAAAAAAAN/////wAG/////4ADYAAAAAABv////+AA3/////AAb/////gANgAAAAAAG/////4ADf////8AAAAAAAAAAAAAAAAAAAAAAAAAAGAAAAAAADcAAAA2wBs2AADbYA2bAADtsAbZgADm2AftwAHjbAN24AHNtgGzYAPO2wDZsAPebYBs2AOeNsA2bAec22AbNge87bANmwc55tgG7c8542wD9355zbYA2Z5zztsAbODzjm2ANz/nnjbADc/nnhtgBnCPHA2wA74fPAbYAOf+OANsADj8eAG2AA8A+ADbAAP/8AAAAAB/4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAABgG6AAAAuwDdsAAG3YBs2AADZuA27AABu3A/ZgAA7dgbtwAAduwN2w2zG3YGzYbZjZsDZsNsxs2Bs2G2Y2bA2bDbMbNgbNhtmNmwNmw2zGzYG7MbdnbsD939m/d2A2Z/7PM3AbuBtwO7AOz73eeZgDc/9n+dwB3H2Y8cwAZ4HnA84AGf/5/84ADz/OP44AAeALwB4AAH/+//4AAA/+H/wAAADwAfAAAAAAAAAAAAAAAAAAAAAAAZsAAAAAB82AAAAAD+bAAAAAHzNgAAAAPjmwAAAAfHzYAAAB+P5sAAAD8fM2AAAHw+ObAAAPj8fNgAAfH4/mwAA+Ph8zYAAcfH4ZsAAA+Px82AAB8fD+bAAD4+HzNgABh8PhmwAAH4/AzYAAPx+AZsAAPD4AM2AAGHwP+bfgAfgH/NvwA/AABmwAA8AAAzYAAYAA/5t+AAAAf82/AAAAAGbAAAAAADNgAAAAAAAAAAAAAAAAAAAAAAAGAAE///ADAAGf//gBwADP//wCcABmAAADmAAz//8C7gAZ//+DMwAMwAAA3YAGf//hZsADP//xu3ABn//4zdgAzDNsNuwAZhu2GzYAMw2bDZsAGYbNhs2ADMNmw2bABmGzYbNgAzDZsdmwAZhs2M3YAMw3d+zcAGYZm+ZsADMOzgd2ABmDM883AAzB3P87AAZgZx47gAMwOcB5gAGYDn/5gADMA4/zwAAAAPADwAAAAD8fgAAAAAf/gAAAAAB+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAB///4AAAD////AAAHwAADwAAHH//8eAAHP///ngAHfgAB8wAHeH/8PcADcf//x3ADsf//+ZgBu8AADu4B2c//8zMA3d///M2AbNwAB2bgduxs2bswP2Z2/O3YGzYzbDZsDZsbths2Bs2Nmw2bA2bGzYbNgbNjZsNmwNmxs2GzYH7c2bHbsDtmbtzdmA2bM3fs3AbMHZnO7AM3BuYOZgHZAzP+dgBmAMx+cwA7gHeAcwAMgB3584AHAAc/84ABgAHHx4AAAAB4D4AAAAAf/wAAAAAD/gAAAAAAAAAAAAAAAAAAZsAAAAAAM2AAAAAAGbAAAAAADNgAAAAABmwAAAAAAzYAAAAAAZsAAAAAAM2AAAAPAGbAAAB/gDNgAAP+ABmwAD/wYAzYAf+D8AZsD/wf8AM2f8D/gAGT/gf8HgAf8D/g/wB/g/8H/AA8H/g/4MAA/8H/B+AH/g/4P+AH4H/B/wADA/4P+AAAH/B/wAAA/4P+AAAAfB/wAAAAAP+AAAAAB/wAAAAAD+AAAAAABwAAAAAAAAAAAAAAAAAAAAAAAAAGAAwAAAA/8H/gAAB//v/8AAB4B/APgADz+PP54ABn/x//OABng8eDzAB3HHOcdwA3P9z/nYA7P/d/5mAbOBmYO7ANmebvzNwP3fs392YGzc3ZmbsDZsZsxs2Bs2M2Y2bA2bGbMbNgbNjNmNmwNmxmzGzYGzYzZjZsDZsZsxs2Bs2M2Y2bA2bGbMbNgbNzNmNmwP2Zm7s3YDbv7M+7MBszt3OZuA3MGZwd2ANn/uf8zAGY+zn47gDvAc4A7gA78/Pj5gAOf/z/zwADj8cPjwAA+A/gHgAAH/9//gAAA/4P/AAAAAAAAAAAAAAAAAAAAAAAAAAAAB+AAAAAAD/4AAAAAHw/AAAAAHADwADAAHP8cABgAHf/nAA4AHeB5gDuAHcfOYAzADc/7uBdwBs8ezBmYBu4DdgbsA2Z924s3AbN+bM3bgfsxt2duwNm4zbG3YGzYZtjZsDZsM2xs2Bs2GbY2bA2bDNsbNgbNhv2NmwP242zO3YHbszbm7sBs3AAHZuA2Z///M2Abuf//O7AGzh/8ObgDc8AA+dgB3P//+dwAdx//8cwAGeAAA8wADn///44AA8///54AAPgAAB4AAB+AAPwAAAP///gAAAA//+AAAAAAAAAAAAAAAAAAAAAAAAAAAADbBmwAAABtgzYAAAA2wZsAAAAbYM2AAAANsGbAAAAG2DNgAAADbBmwAAABtgzYAAAA2wZsAAAAAAAAAAAAAAAAAAA="), 46, atob("DRYpFR0eHiImHygmDQ=="), 49+(scale<<8)+(1<<16)); +} + +Graphics.prototype.setFontSpecialElite = function(scale) { + // Actual height 40 (39 - 0) + g.setFontCustom(atob("AAAAAAAAAAAAAAAAAAAAAYAAAAAAAfwAAAAAAP/AAAAAAH/4AAAAAB/+AAAAAAf/gAAAAAH/4AAAAAB/+AAAAAAf/gAAAAAH/4AAAAAAv8AAAAAAN6AAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4AAAAAAAfAAAAAAAPwAAAAAAP8AAAAAAH+AAAAAAH+AAAAAAD+AAAAAAD/AAAAAAD/AAAAAAB/AAAAAAB/AAAAAAB/AAAAAAB/gAAAAAB/gAAAAAB/gAAAAAA/gAAAAAB/wAAAAAA/4AAAAAA/wAAAAAA/4AAAAAA/4AAAAAAf8AAAAAAP8AAAAAAD8AAAAAAA8AAAAAAAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//wAAAAP///gAAAH/9/+AAAD/gAf4AAB/AAB+AAA/AAAHwAAPAAAA+AADgAAAPgAAwAAAD4AAcAAAAfAAHAAAAHwABwAAAB8AA4AAAAfAAOAAAAHwABwAAAB8AAcAAAA/AAHgAAAPgAB+AAAH4AAPgAAD8AAD+AAD+AAA/4Af/AAAB////AAAAP///wAAAAP//gAAAAAP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAOAAAAHAADgAAAD4AB4AAAA+AAeAAAAPgAHgAAAD4AB4AAAAeAAeAAAAHgAHgAAAB4AB4AAAAcAAeAAAAPAAH4AAP/wAB/////+AAf/////gAH/////4AB///+/+AAAAQAAPgAAAAAAB4AAAAAAAeAAAAAAAHgAAAAAAD4AAAAAAA+AAAAAAAPgAAAAAADwAAAAAAA+AAAAAAAPgAAAAAAB4AAAAAAAAAAAAAAAAAAAAAAAcAAAB+AAfwAAA/wAf/AAA/8Af/wAAf/AP/8AAGPwP//AADh8D48AAA4OB8OAAAOAAfDgAAHAAPg4AABwADwPAAAcAB8DwAAHAAeAeAABwAHAHgAAcADwB8AAHAB4APgAB4A+AB4AAPAfAAeAAD4fgADgAAf/4AA4AAD/8AAeAAAf+AAfAAAB8AAPwAAAAAAD4AAAAAAA8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/gAAAAAAf8AAB/wAH/wAAf8AB/8AAH+AAffgAB4AcDx4AAcAPAAfAAHAPwAHwABwHwAA8AAcB+AAPAAHA/gADwABw/4AA8AAcf+AAPAAHP/gAHwABz74AB8AAf8fAA/AAH8DwAPgAD/A8AHwAA/gHwP8AAPwA//+AADwAH//AAAAAA//gAAAAAD/wAAAAAAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPgAAAAAAP8AAAAAAD/AAAAAAD/wAAAAAD/8AAAAAB/PAAAAAA/jwAAAAAfg8AAAAAPwPAAAAAH4DwAAAAD4A8HAAAD8APBwAAB+ADw8AAA+AA8PAAA/AAPDgAAPgADw8AAHwAB8/AAD+B///wAA/////8AAP/////AAB+f///wAAAAAHx8AAAAAB8PAAAAAAPDwAAAAADw8AAAAAA4PAAAAAAODwAAAAADgcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwAAAAAAB/gAAH//wf8AAB//+H/gAAf//h/4AAHJ/wf/AABwD4D/4AAeA+AAeAAHgPAAHgAB4DwAB4AAeA4AAeAAHgOAAHgAA4DgAB4AAOA8AAeAADgPAAHgAB4D4ADwAAeAeAB4AAHAHwAeAABgAfAPgAAYAD8fgAAAAA//wAAAAAH/4AAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB8AAAAAA//wAAAAB///AAAAB////AAAB/7//wAAA/AfB+AAAfAPAPwAAPgHgB+AAHwBwAPgAB4A8AB8AAeAPAAfAAPADwAHwADgA8AB8AA8APAAfAAPADwAHwADwA8AB8AA8AHgA+AAP8B4APgAD/wfAH4AA/8D4D8AAH/A///AAB/wH//gAAH8A//wAAA8AH/4AAAAAA/4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAPgAAAAAB/4AAAAAA/8AAAAAAP+AAAAAAD+AAAAAAAeAAAAAAAHAAAAAAADwAAAAAAB8AAAAAAAfAAAAAAAHwAAA/8AD+AAB//AA/gAB//wAP4AB//gAB+AB//AAAfwB//AAAH8A/wAAAA/A/wAAAAHw/wAAAAB8/wAAAAAffwAAAAAP/wAAAAAD/4AAAAAA/4AAAAAAP8AAAAAAD4AAAAAAAYAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAAAP/wAAAH8H/+AAAH/z//wAAD////+AAB///h/gAA/B/gH4AAPAP4A/AAHwB8AHwAB4APAB8AAeADgAfAAHgA4ADwABwAOAA8AAcADgAPAAHAA4ADwAB4AeAA8AAfAHwAPAADwB8AHgAA+A/gD4AAPgP4B+AAB+P/h/gAAP////wAAB/8f/4AAAP8D/8AAAAAAf8AAAAAAAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAA/4APAAAA//gH4AAAP/8D/gAAP4Pg/8AADwB8P/AAB4AfD/4AAeAD4d+AAHAA+AfwADwAHgH8AA4AA8A/AAOAAPAPgADgADwD4AA8AA4B+AAPAAeAfAAB4AHgHgAAeADwD4AAHwA8A8AAA+AfA/AAAHp/h/gAAA3//+gAAAB//+gAAAAd//gAAAACf/wAAAAAH/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAAAABwB/AAAAB/A/8AAAA/wf/gAAAP+H/4AAAH/h/+AAAB/8f/gAAAP+H/4AAAD/h/+AAAAfwf/gAAAH8C/wAAAAAA3oAAAAAABwAAAAAAAAAAAAAAAAAAAA=="), 46, atob("ERwfHB0cHxsdHB4dEQ=="), 50+(scale<<8)+(1<<16)); +} + const SETTINGS_FILE = "pastel.json"; let settings = undefined; @@ -113,6 +123,10 @@ function draw() { g.setFontCabinSketch(); else if (settings.font == "Orbitron") g.setFontOrbitron(); + else if (settings.font == "Monoton") + g.setFontMonoton(); + else if (settings.font == "Elite") + g.setFontSpecialElite(); else g.setFontLato(); diff --git a/apps/pastel/pastel.settings.js b/apps/pastel/pastel.settings.js index 2e4afadc8..a8aadd58f 100644 --- a/apps/pastel/pastel.settings.js +++ b/apps/pastel/pastel.settings.js @@ -22,14 +22,14 @@ storage.write(SETTINGS_FILE, settings) } - var font_options = ["Lato","Architect","GochiHand","CabinSketch","Orbitron"]; + var font_options = ["Lato","Architect","GochiHand","CabinSketch","Orbitron","Monoton","Elite"]; E.showMenu({ '': { 'title': 'Pastel Clock' }, '< Back': back, 'Font': { value: 0 | font_options.indexOf(s.font), - min: 0, max: 4, + min: 0, max: 6, format: v => font_options[v], onchange: v => { s.font = font_options[v]; diff --git a/apps/toucher/ChangeLog b/apps/toucher/ChangeLog index 494110d55..7b5c53de7 100644 --- a/apps/toucher/ChangeLog +++ b/apps/toucher/ChangeLog @@ -3,4 +3,5 @@ 0.03: Close launcher when lcd turn off 0.04: Complete rewrite to add animation and loop ( issue #210 ) 0.05: Improve perf -0.06: Complete rewrite in 80x80, better perf, add settings \ No newline at end of file +0.06: Complete rewrite in 80x80, better perf, add settings +0.07: Added suppport for Bangle 2, added README file diff --git a/apps/toucher/README.md b/apps/toucher/README.md new file mode 100644 index 000000000..a327a654c --- /dev/null +++ b/apps/toucher/README.md @@ -0,0 +1,22 @@ +# Toucher - A touch based launcher, swipe left, switch right, tap to launch + +* Designed specifically for Bangle 1 and Bangle 2 + +## Installation +- Use the App loader to install toucher +- Then delete the existing launcher +- When you restart the new launcher will be loaded +- To return to the default launcher, delete toucher and install the default launcher. + +## Bangle 1 +In the settings menu 'Low Res' refers to setting the Bangle 1 screen into 80x80 mode. +This significantly improves the animation performance. + +## Bangle 2 +The Hires/Lowres settings is ignored. +Touch the top third of the screen to launch the selected app. +Press button 1 to launch the selected app. + +## Screenshots + +![](screenshot1.jpg) diff --git a/apps/toucher/app.js b/apps/toucher/app.js index 455a29c5d..b6c37f0d0 100644 --- a/apps/toucher/app.js +++ b/apps/toucher/app.js @@ -7,8 +7,11 @@ let settings = Storage.readJSON(filename,1) || { debug: false }; -if(!settings.highres) Bangle.setLCDMode("80x80"); -else Bangle.setLCDMode(); +// this means that setFont('6x8',1) is actually setFont('6x8',3) +if (process.env.HWVERSION == 1) { + if(!settings.highres) Bangle.setLCDMode("80x80"); + else Bangle.setLCDMode(); +} g.clear(); g.flip(); @@ -23,7 +26,7 @@ const ORIGINAL_ICON_SIZE = 48; const STATE = { settings_open: false, index: 0, - target: 240, + target: g.getWidth(), offset: 0 }; @@ -63,7 +66,7 @@ const APPS = getApps(); function noIcon(x, y, scale){ if(scale < 0.2) return; - g.setColor(scale, scale, scale); + g.setColor(g.theme.fg); g.setFontAlign(0,0); g.setFont('6x8',settings.highres ? 6:3); g.drawString('x_x', x+1.5, y); @@ -81,23 +84,24 @@ function render(){ g.clear(); const visibleApps = APPS.filter(app => app.x >= STATE.offset-HALF && app.x <= STATE.offset+WIDTH-HALF ); + let cycle = 0; + let lastCycle = visibleApps.length; + visibleApps.forEach(app => { - - const x = app.x+HALF-STATE.offset; - const y = HALF - (HALF*0.3); + cycle++; + const x = app.x + HALF - STATE.offset; + const y = HALF; let dist = HALF - x; if(dist < 0) dist *= -1; - const scale = 1 - (dist / HALF); if(!scale) return; if(app.special){ - const font = settings.highres ? '6x8' : '4x6'; - const fontSize = settings.highres ? 2 : 1; - g.setFont(font, fontSize); - g.setColor(scale,scale,scale); + const fontSize = (process.env.HWVERSION == 2) ? 4 : (settings.highres ? 6 : 2); + g.setFont('6x8', fontSize); + g.setColor(g.theme.fg); g.setFontAlign(0,0); g.drawString(app.name, HALF, HALF); return; @@ -111,26 +115,69 @@ function render(){ if(icon){ icons[app.name] = icon; try { - const rescale = settings.highres ? scale*ORIGINAL_ICON_SIZE : (scale*(ORIGINAL_ICON_SIZE/2)); - const imageScale = settings.highres ? scale*2 : scale; + let rescale; + let imageScale; + + if (process.env.HWVERSION == 1) { + // on a bangle 1 !highres means 80x80 + rescale = settings.highres ? scale*ORIGINAL_ICON_SIZE : (scale*(ORIGINAL_ICON_SIZE/2)); + imageScale = settings.highres ? scale*2 : scale; + } else { + // !highres mode is meaningless on a bangle 2 at present + rescale = 1.25*scale*ORIGINAL_ICON_SIZE; + imageScale = 2.5*scale; + } + g.drawImage(icon, x-rescale, y-rescale, { scale: imageScale }); - } catch(e){ + } catch(e) { noIcon(x, y, scale); } - }else{ + } else { noIcon(x, y, scale); } //draw text - g.setColor(scale,scale,scale); - if(scale > 0.1){ - const font = settings.highres ? '6x8': '4x6'; - const fontSize = settings.highres ? 2 : 1; - g.setFont(font, fontSize); - g.setFontAlign(0,0); - g.drawString(app.name, HALF, HEIGHT/4*3); - } + g.setColor(g.theme.fg); + if (cycle == 2 && scale > 0.1) { + const fontSize = (process.env.HWVERSION == 2) ? 2 : 1; + if (process.env.HWVERSION == 1) { + fontSize = (settings.highres) ? 3 : 1; + } + + if (app.name.length <= 12) { + g.setFont("6x8", fontSize); + g.setFontAlign(0,1); + g.drawString(app.name, HALF, HEIGHT); + } else { + // some app names are too long for one line + var name = app.name; + var first = name.substring(0, name.indexOf(" ")); + var last = name.substring(name.indexOf(" ") + 1, name.length); + + // all this to handle long names like + // Simple 7 Segment Clock + if (last.length > 12 && process.env.HWVERSION == 1) { + g.setFont((settings.highres ? "6x8" : "4x6"),(settings.highres ? 2 : 1) ); + } else { + g.setFont("6x8", fontSize); + } + + g.setFontAlign(0,-1); + g.drawString(first, HALF, 0); + + if (last.length > 12 && process.env.HWVERSION == 1) { + g.setFont((settings.highres ? "6x8" : "4x6"),(settings.highres ? 2 : 1) ); + } else { + g.setFont("6x8", fontSize); + } + + g.setFontAlign(0,1); + g.drawString(last, HALF, HEIGHT); + } + } + + /* if(settings.highres){ const type = app.type ? app.type : 'App'; const version = app.version ? app.version : '0.00'; @@ -138,18 +185,21 @@ function render(){ g.setFontAlign(0,1); g.setFont('6x8', 1.5); g.setColor(scale,scale,scale); - g.drawString(info, HALF, 215, { scale: scale }); + g.drawString(info, HALF, HEIGHT/8*7, { scale: scale }); } + */ }); const duration = Math.floor(Date.now()-start); if(settings.debug){ g.setFontAlign(0,1); - g.setColor(0, 1, 0); - const fontSize = settings.highres ? 2 : 1; - g.setFont('4x6',fontSize); - g.drawString('Render: '+duration+'ms', HALF, HEIGHT); + g.setColor(g.theme.fgH); + const fontSize = (process.env.HWVERSION == 2) ? 2 : (settings.highres ? 2 : 1); + g.setFont(((process.env.HWVERSION == 2) ? '6x8' : (settings.highres ? '6x8' :'4x6')), fontSize); + // steal the bottom line, and print the duration + g.clearRect(0, HEIGHT - (process.env.HWVERSION == 1 && !settings.highres ? 8 : 24), WIDTH, HEIGHT); + g.drawString('Render: '+duration+' ms', HALF, HEIGHT); } g.flip(); if(STATE.offset == STATE.target) return; @@ -202,7 +252,7 @@ function run(){ E.showMessage("App Source\nNot found"); setTimeout(render, 2000); } else { - Bangle.setLCDMode(); + if (process.env.HWVERSION == 1) Bangle.setLCDMode(); g.clear(); g.flip(); E.showMessage("Loading..."); @@ -211,10 +261,11 @@ function run(){ } -// Screen event -Bangle.on('touch', function(button){ - if(STATE.settings_open) return; - switch(button){ +if (process.env.HWVERSION == 1) { + // Screen event + Bangle.on('touch', function(button){ + if(STATE.settings_open) return; + switch(button){ case 1: prev(); break; @@ -224,8 +275,17 @@ Bangle.on('touch', function(button){ case 3: run(); break; - } -}); + } + }); +} + +if (process.env.HWVERSION == 2) { + // tap at top 1/3 of screen to launch app + Bangle.on('touch', function(button, xy) { + if (xy.y < HEIGHT / 3) + run(); + }); +} Bangle.on('swipe', dir => { if(STATE.settings_open) return; @@ -238,9 +298,12 @@ Bangle.on('lcdPower', on => { if(!on) return load(); }); +if (process.env.HWVERSION == 1) { + setWatch(prev, BTN1, { repeat: true }); + setWatch(next, BTN3, { repeat: true }); + setWatch(run, BTN2, { repeat:true }); +} else { + setWatch(run, BTN1, { repeat:true }); +} -setWatch(prev, BTN1, { repeat: true }); -setWatch(next, BTN3, { repeat: true }); -setWatch(run, BTN2, { repeat:true }); - -jumpTo(1); \ No newline at end of file +jumpTo(1); diff --git a/apps/toucher/screenshot1.jpg b/apps/toucher/screenshot1.jpg new file mode 100644 index 0000000000000000000000000000000000000000..698121cbe9790999983c97c5d1503c749c65f28e GIT binary patch literal 21329 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

Wm?3!Mt<_!7vupX1HX?3>?LHW#^ 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 OaCrVtk_Ynp^8WyThLmdn literal 0 HcmV?d00001 From ae8895f5dbce68270d4e8fd49a1d6f6435130b6e Mon Sep 17 00:00:00 2001 From: hughbarney Date: Sat, 16 Oct 2021 14:58:04 +0100 Subject: [PATCH 089/392] added screenshot files --- apps/chronowid/chrono_with_pastel.jpg | Bin 0 -> 29883 bytes apps/chronowid/chrono_with_wave.jpg | Bin 0 -> 61355 bytes apps/pastel/screenshot_elite.jpg | Bin 0 -> 9486 bytes apps/pastel/screenshot_monoton.jpg | Bin 0 -> 11281 bytes 4 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 apps/chronowid/chrono_with_pastel.jpg create mode 100644 apps/chronowid/chrono_with_wave.jpg create mode 100644 apps/pastel/screenshot_elite.jpg create mode 100644 apps/pastel/screenshot_monoton.jpg diff --git a/apps/chronowid/chrono_with_pastel.jpg b/apps/chronowid/chrono_with_pastel.jpg new file mode 100644 index 0000000000000000000000000000000000000000..2f5993e79cd54fc590a5ef534adfb09eb26d996b GIT binary patch literal 29883 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�*5)8`ksFQ}K!J!fzWzs*sQ<-DfniE=dGhj|j8`wO99X(_%? ztT43es(Yw~Yu*k>C$y`eThx(E&&Cj^D7%_HGz$+~R z>~BKHoC9stuS-~Xw(9Lv)L@X7lT*!F=J2{ab8{c}JXh)BOH_OqRMndVx7!r96qR(v zY3+&a7uUI^8P{Ieb&pcpnUwTZhf$&FG&N!n^O#*SJrh0m|C8DUfEVbU7uEzOmwDQ2R2@Y?;&&z(7R@Et8R#bK&#!+hQdjizJEq)Pr>~1>m|?B)GLek3|IAt7O0(j96WQQOmwsW7vH-W zmP?I3ZW5XCjbKvmj%b7MQoTP_uJzf8jpjNkt2&9LTLl2DJI~^3A>27Oks#`$-7^|j zR4HXVL8@KMp=_!qRBAGBK>lpFb1Ze;n7VoK#1CUSCcqN3R76=P`i*ik2iu_0bf1$%NH85f}n;ZqEEeTu6 z&qd`Yq+d)+pYv+m?w*|`3=-arj=p2lSJ$~N3x&$kgq_7E60!?5Y(S+&rTRgg$6dnGv63 z^#v*+&ze}knK;iuU1`e-Ii6z%f&pdTJMPp%J8CEga(R12Igp5iC_p{TF(V+yLREdn z!_&5N+;mdUs+r27?pqh{>Ym6fp)x6vt|_vxnM_`md@~w{R{QLP_ zuiUFgDCBQF$<#!L@bih&<_Eua>SG#DpVnUBsNXtDTWW$$L3^}L7!>o=v?~Of2mZEr zJ%6?NI0u#Ke*S`t@kZLS2qG9F*H}^Y15oG;*wD1<3B-P|As^hR;ojZ|3*eYbK1e84 zS^c=i&hx=W!fqkP4;BvI{mhf4bE+JJ)_IS)w2=L^rgrZ4Bh4NUyH8*qCL+?;u#X13p;(_J|k9=-BDoAedLYPSZr!Z+f!V*mCtv7n45ml%Dr7e9&_8600a@%fF^OO@Y`-LggCD=K zJftto$44@Re$cIFrdFX;huT8py25*w;QcA!hI?07>fa6@O__HQNKPO7c@EjX`?q&S z=$LM~=WFU(JqPy1{tp0|#GKv3?_}`Yr5TqQ%bKY~9-NW2=?1p!hLRC5eRP|4p`qhz z%44oMr99WwS#_jm`XydfB>v_Pz_leSb6p6WJuVHQvG!f~m?|99C}tbit>mkq;jE%h zfNz!Ji45Dow?HL($!Qz%wQoKLITcQUSL4xLILG92h?MTJB15QqMZTkU;fgstp+tDR zGC0-e(NWlK%#pai2c$4p?4_5ABZWW)M?Xz`U^+U$sN#O}RradW4MxW&+A5Q`rQh#z zUax4oHZ**>Qd)Z|qC$Hcz+2w(NN*h<&`;%vJawNaP{>GCH4KTp4Bk6`nh0fHhp4vr zY8`A_9XnNBo2z*TE~gOME2tXWti{{75s#yJpIu#LTqT%mmXB4jRpvphQePV?QgwPD z)=yWT+0Rqq<)D6oW)l1+;K)uqiw}7SQ-u^p1Xx|ShI@(XOVC~7A(oIr4u$jzC1?NbG*}(Y7J-zD9f;y0mggV&cC9J=&bpNyc*cX zcNs@bt5~Q*b|aQ(jjDyhXG=1*6-yry?l)5_N%S*>WoWDRDV8R2Je6Ql^04mHJ^(Fi b9~BJ{2M;nzaQP1a3-x8SY=!=3!k`ObG9 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 RNxorkG7uK~AHshd{{z#+XtV$T literal 0 HcmV?d00001 diff --git a/apps/pastel/screenshot_elite.jpg b/apps/pastel/screenshot_elite.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b881830ed9c15b927ac46fda6b7ad4b0eb3c300c GIT binary patch literal 9486 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 xeFAyxBs-Y|mReSOecL1idHXHzv=cbKkvx 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 Date: Sat, 16 Oct 2021 15:03:22 +0100 Subject: [PATCH 090/392] Updated for toucher README file --- apps.json | 1 + 1 file changed, 1 insertion(+) diff --git a/apps.json b/apps.json index 8e0dd604d..f9d1102d6 100644 --- a/apps.json +++ b/apps.json @@ -1482,6 +1482,7 @@ "description": "Touch enable left to right launcher.", "tags": "tool,system,launcher,b2", "type":"launch", + "readme": "README.md", "data": [ {"name":"toucher.json"} ], From 249b3f9de23ac7455086e02c52099fda83bd8446 Mon Sep 17 00:00:00 2001 From: hughbarney Date: Sat, 16 Oct 2021 15:21:53 +0100 Subject: [PATCH 091/392] corrected typo --- apps/toucher/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/toucher/README.md b/apps/toucher/README.md index a327a654c..27cb32eeb 100644 --- a/apps/toucher/README.md +++ b/apps/toucher/README.md @@ -1,4 +1,4 @@ -# Toucher - A touch based launcher, swipe left, switch right, tap to launch +# Toucher - A touch based launcher, swipe left, swipe right, tap to launch * Designed specifically for Bangle 1 and Bangle 2 From cbfd73e122cd604c014a144e3d53f86a538757f6 Mon Sep 17 00:00:00 2001 From: hughbarney Date: Sat, 16 Oct 2021 22:33:46 +0100 Subject: [PATCH 092/392] Matrix clock support for Bangle 2 --- apps.json | 4 ++-- apps/matrixclock/ChangeLog | 3 ++- apps/matrixclock/matrixclock.js | 35 ++++++++++++++++----------------- 3 files changed, 21 insertions(+), 21 deletions(-) diff --git a/apps.json b/apps.json index f9d1102d6..4c557e847 100644 --- a/apps.json +++ b/apps.json @@ -337,9 +337,9 @@ { "id": "matrixclock", "name": "Matrix Clock", "icon": "matrixclock.png", - "version":"0.01", + "version":"0.02", "description": "inspired by The Matrix, a clock of the same style", - "tags": "clock", + "tags": "clock,b2", "type":"clock", "allow_emulator":true, "readme": "README.md", diff --git a/apps/matrixclock/ChangeLog b/apps/matrixclock/ChangeLog index d53df991b..7cc9144b1 100644 --- a/apps/matrixclock/ChangeLog +++ b/apps/matrixclock/ChangeLog @@ -1 +1,2 @@ -0.01: Initial Release +0.01: Initial Release +0.02: Support for Bangle 2 diff --git a/apps/matrixclock/matrixclock.js b/apps/matrixclock/matrixclock.js index 0bf33fd68..ab18c13b8 100644 --- a/apps/matrixclock/matrixclock.js +++ b/apps/matrixclock/matrixclock.js @@ -12,6 +12,8 @@ const Locale = require('locale'); const SHARD_COLOR =[0,1.0,0]; const SHARD_FONT_SIZE = 12; const SHARD_Y_START = 30; +const w = g.getWidth(); + /** * The text shard object is responsible for creating the * shards of text that move down the screen. As the @@ -111,7 +113,7 @@ var dateStr = ""; var last_draw_time = null; const TIME_X_COORD = 20; -const TIME_Y_COORD = 100; +const TIME_Y_COORD = g.getHeight() / 2; const DATE_X_COORD = 170; const DATE_Y_COORD = 30; const RESET_PROBABILITY = 0.5; @@ -141,29 +143,26 @@ function draw_clock(){ } var now = new Date(); // draw time. Have to draw time on every loop - g.setFont("Vector",45); - g.setFontAlign(-1,-1,0); + + g.setFont("Vector", g.getWidth() / 5); + g.setFontAlign(0,-1); if(last_draw_time == null || now.getMinutes() != last_draw_time.getMinutes()){ - g.setColor(0,0,0); - g.drawString(timeStr, TIME_X_COORD, TIME_Y_COORD); + g.setColor(g.theme.fg); + g.drawString(timeStr, w/2, TIME_Y_COORD); timeStr = format_time(now); } - g.setColor(SHARD_COLOR[0], - SHARD_COLOR[1], - SHARD_COLOR[2]); - g.drawString(timeStr, TIME_X_COORD, TIME_Y_COORD); + g.setColor(SHARD_COLOR[0], SHARD_COLOR[1], SHARD_COLOR[2]); + g.drawString(timeStr, w/2, TIME_Y_COORD); // // draw date when it changes g.setFont("Vector",15); - g.setFontAlign(-1,-1,0); + g.setFontAlign(0,-1,0); if(last_draw_time == null || now.getDate() != last_draw_time.getDate()){ - g.setColor(0,0,0); - g.drawString(dateStr, DATE_X_COORD, DATE_Y_COORD); + g.setColor(g.theme.fg); + g.drawString(dateStr, w/2, DATE_Y_COORD); dateStr = format_date(now); - g.setColor(SHARD_COLOR[0], - SHARD_COLOR[1], - SHARD_COLOR[2]); - g.drawString(dateStr, DATE_X_COORD, DATE_Y_COORD); + g.setColor(SHARD_COLOR[0], SHARD_COLOR[1], SHARD_COLOR[2]); + g.drawString(dateStr, w/2, DATE_Y_COORD); } last_draw_time = now; } @@ -232,10 +231,10 @@ function startTimers(){ Bangle.on('lcdPower', (on) => { if (on) { - console.log("lcdPower: on"); + //console.log("lcdPower: on"); startTimers(); } else { - console.log("lcdPower: off"); + //console.log("lcdPower: off"); clearTimers(); } }); From 3f26b8b88e1b75323e9df4ba58468e81ea2000a2 Mon Sep 17 00:00:00 2001 From: Gordon Williams Date: Mon, 18 Oct 2021 11:32:46 +0100 Subject: [PATCH 093/392] Layout module now allows 'soft' buttons to be cycled through and selected using up/down on Bangle.js 1 --- apps/accellog/app.js | 4 +- apps/barclock/clock-bar.js | 2 +- apps/gpsinfo/gps-info.js | 8 +-- apps/speedo/speedo.js | 4 +- apps/weather/app.js | 2 +- modules/Layout.js | 69 +++++++++++++++------ tests/Layout/bin/runtest.sh | 6 +- tests/Layout/tests/accellog.js | 4 +- tests/Layout/tests/buttons_1_bangle1.bmp | Bin 0 -> 28874 bytes tests/Layout/tests/buttons_1_bangle1.js | 9 +++ tests/Layout/tests/buttons_1_bangle2.bmp | Bin 0 -> 15562 bytes tests/Layout/tests/buttons_1_bangle2.js | 6 ++ tests/Layout/tests/buttons_3_bangle1.bmp | Bin 0 -> 28874 bytes tests/Layout/tests/buttons_3_bangle1.js | 11 ++++ tests/Layout/tests/buttons_3_bangle2.bmp | Bin 0 -> 15562 bytes tests/Layout/tests/buttons_3_bangle2.js | 8 +++ tests/Layout/tests/buttons_osd_bangle1.bmp | Bin 0 -> 28874 bytes tests/Layout/tests/buttons_osd_bangle1.js | 17 +++++ tests/Layout/tests/buttons_osd_bangle2.bmp | Bin 0 -> 15562 bytes tests/Layout/tests/buttons_osd_bangle2.js | 10 +++ tests/Layout/tests/padding.bmp | Bin 15562 -> 15562 bytes tests/Layout/tests/padding_with_fill.bmp | Bin 15562 -> 15562 bytes 22 files changed, 126 insertions(+), 34 deletions(-) create mode 100644 tests/Layout/tests/buttons_1_bangle1.bmp create mode 100644 tests/Layout/tests/buttons_1_bangle1.js create mode 100644 tests/Layout/tests/buttons_1_bangle2.bmp create mode 100644 tests/Layout/tests/buttons_1_bangle2.js create mode 100644 tests/Layout/tests/buttons_3_bangle1.bmp create mode 100644 tests/Layout/tests/buttons_3_bangle1.js create mode 100644 tests/Layout/tests/buttons_3_bangle2.bmp create mode 100644 tests/Layout/tests/buttons_3_bangle2.js create mode 100644 tests/Layout/tests/buttons_osd_bangle1.bmp create mode 100644 tests/Layout/tests/buttons_osd_bangle1.js create mode 100644 tests/Layout/tests/buttons_osd_bangle2.bmp create mode 100644 tests/Layout/tests/buttons_osd_bangle2.js diff --git a/apps/accellog/app.js b/apps/accellog/app.js index fdb4d52be..c54c5002b 100644 --- a/apps/accellog/app.js +++ b/apps/accellog/app.js @@ -99,12 +99,12 @@ function startRecord(force) { {type:"txt", id:"time", font:"6x8:2", label:" - ", pad:5, bgCol:g.theme.bg}, {type:"txt", font:"6x8:2", label:"RECORDING", bgCol:"#f00", pad:5, fillx:1}, ] - },[ // Buttons... + },{btns:[ // Buttons... {label:"STOP", cb:()=>{ Bangle.removeListener('accel', accelHandler); showMenu(); }} - ]); + ]}); layout.render(); // now start writing diff --git a/apps/barclock/clock-bar.js b/apps/barclock/clock-bar.js index c2b4bde12..2c6d66e45 100644 --- a/apps/barclock/clock-bar.js +++ b/apps/barclock/clock-bar.js @@ -40,7 +40,7 @@ const layout = new Layout({ {height: 40}, {id: "date", type: "txt", font: "10%", valign: 1}, ], -}, false, {lazy: true}); +}, {lazy: true}); // adjustments based on screen size and whether we display am/pm let thickness; // bar thickness, same as time font "pixel block" size if (is12Hour) { diff --git a/apps/gpsinfo/gps-info.js b/apps/gpsinfo/gps-info.js index 047c1bc17..df888651a 100644 --- a/apps/gpsinfo/gps-info.js +++ b/apps/gpsinfo/gps-info.js @@ -68,7 +68,7 @@ function onGPS(fix) { {type:"txt", font:"6x8", label:"", fillx:true, id:"time" }, {type:"txt", font:"6x8", label:"", fillx:true, id:"sat" }, {type:"txt", font:"6x8", label:"", fillx:true, id:"maidenhead" }, - ]},[],{lazy:true}); + ]},{lazy:true}); } else { layout = new Layout( { type:"v", c: [ @@ -80,9 +80,9 @@ function onGPS(fix) { {type:"txt", font:"6x8", pad:3, label:"Satellites" } ]}, {type:"txt", font:"6x8", label:"", id:"progress" } - ]},[],{lazy:true}); + ]},{lazy:true}); } - g.clearRect(0,24,g.getWidth(),g.getHeight()); + g.clearRect(0,24,g.getWidth(),g.getHeight()); layout.render(); } lastFix = fix; @@ -103,7 +103,7 @@ function onGPS(fix) { nofix = (nofix+1) % 4; layout.progress.label = ".".repeat(nofix) + " ".repeat(4-nofix); } - layout.render(); + layout.render(); } Bangle.loadWidgets(); diff --git a/apps/speedo/speedo.js b/apps/speedo/speedo.js index 2e729c114..1d87859a8 100644 --- a/apps/speedo/speedo.js +++ b/apps/speedo/speedo.js @@ -23,7 +23,7 @@ function onGPS(fix) { {type:"txt", font:"10%", label:fix.satellites, pad:2, id:"sat" }, {type:"txt", font:"6x8", pad:3, label:"Satellites" } ]}, - ]},[],{lazy:true}); + ]},{lazy:true}); } else { layout = new Layout( { type:"v", c: [ @@ -34,7 +34,7 @@ function onGPS(fix) { {type:"txt", font:"10%", label:fix.satellites, pad:2, id:"sat" }, {type:"txt", font:"6x8", pad:3, label:"Satellites" } ]}, - ]},[],{lazy:true}); + ]},{lazy:true}); } g.clearRect(0,24,g.getWidth(),g.getHeight()); layout.render(); diff --git a/apps/weather/app.js b/apps/weather/app.js index 6dba14143..6a0852f81 100644 --- a/apps/weather/app.js +++ b/apps/weather/app.js @@ -35,7 +35,7 @@ var layout = new Layout({type:"v", bgCol: g.theme.bg, c: [ {type: "txt", font: "6x8", pad: 4, id: "updateTime", label: "15 minutes ago"}, ]}, {filly: 1}, -]}, null, {lazy: true}); +]}, {lazy: true}); function formatDuration(millis) { let pluralize = (n, w) => n + " " + w + (n == 1 ? "" : "s"); diff --git a/modules/Layout.js b/modules/Layout.js index 09e2a3d8c..94abd42fd 100644 --- a/modules/Layout.js +++ b/modules/Layout.js @@ -4,7 +4,7 @@ Usage: ``` var Layout = require("Layout"); -var layout = new Layout( layoutObject, btns, options ) +var layout = new Layout( layoutObject, options ) layout.render(optionalObject); ``` @@ -47,15 +47,13 @@ layoutObject has: * A `filly` int to choose if the object should fill available space in y. 0=no, 1=yes, 2=2x more space * `width` and `height` fields to optionally specify minimum size -btns is an array of objects containing: - -* `label` - the text on the button -* `cb` - a callback function -* `cbl` - a callback function for long presses - options is an object containing: * `lazy` - a boolean specifying whether to enable automatic lazy rendering +* `btns` - array of objects containing: + * `label` - the text on the button + * `cb` - a callback function + * `cbl` - a callback function for long presses If automatic lazy rendering is enabled, calls to `layout.render()` will attempt to automatically determine what objects have changed or moved, clear their previous locations, and re-render just those objects. @@ -78,9 +76,8 @@ Other functions: */ -function Layout(layout, buttons, options) { +function Layout(layout, options) { this._l = this.l = layout; - this.b = buttons; // Do we have >1 physical buttons? this.physBtns = (process.env.HWVERSION==2) ? 1 : 3; this.yOffset = Object.keys(global.WIDGETS).length ? 24 : 0; @@ -88,7 +85,43 @@ function Layout(layout, buttons, options) { options = options || {}; this.lazy = options.lazy || false; - if (buttons) { + var btnList; + if (process.env.HWVERSION!=2) { + // no touchscreen, find any buttons in 'layout' + btnList = []; + function btnRecurser(l) { + if (l.type=="btn") btnList.push(l); + if (l.c) l.c.forEach(btnRecurser); + } + btnRecurser(layout); + if (btnList.length) { // there are buttons in 'layout' + // disable physical buttons - use them for back/next/select + this.physBtns = 0; + this.buttons = btnList; + this.selectedButton = -1; + Bangle.setUI("updown", dir=>{ + var s = this.selectedButton, l=this.buttons.length; + if (dir===undefined && this.buttons[s]) + return this.buttons[s].cb(); + if (this.buttons[s]) { + delete this.buttons[s].selected; + this.render(this.buttons[s]); + } + s += dir; + if (s<0) s+=lh; + if (s>=l) s-=l; + if (this.buttons[s]) { + this.buttons[s].selected = 1; + this.render(this.buttons[s]); + } + this.selectedButton = s; + }); + } + } + + if (options.btns) { + var buttons = options.btns; + this.b = buttons; if (this.physBtns >= buttons.length) { // Handler for button watch events function pressHandler(btn,e) { @@ -114,12 +147,14 @@ function Layout(layout, buttons, options) { {type:"v", pad:1, filly:1, c: buttons.map(b=>(b.type="txt",b.font="6x8",b.height=btnHeight,b.r=1,b))} ]}; } else { - let btnHeight = Math.floor((g.getHeight()-this.yOffset) / buttons.length); - this._l.width = g.getWidth()-20; // button width + // add 'soft' buttons + this._l.width = g.getWidth()-32; // button width this._l = {type:"h", c: [ this._l, - {type:"v", c: buttons.map(b=>(b.type="btn",b.h=btnHeight,b.w=32,b.r=1,b))} + {type:"v", c: buttons.map(b=>(b.type="btn",b.filly=1,b.width=32,b.r=1,b))} ]}; + // if we're selecting with physical buttons, add these to the list + if (btnList) btnList.push.apply(btnList, this._l.c[1].c); } } if (process.env.HWVERSION==2) { @@ -233,7 +268,7 @@ Layout.prototype.render = function (l) { x,y+h-5, x,y+4 ]; - g.setColor(g.theme.bgH).fillPoly(poly).setColor(l.selected ? g.theme.fgH : g.theme.fg).drawPoly(poly).setFont("4x6",2).setFontAlign(0,0,l.r).drawString(l.label,l.x+l.w/2,l.y+l.h/2); + g.setColor(l.selected?g.theme.bgH:g.theme.bg2).fillPoly(poly).setColor(l.selected ? g.theme.fgH : g.theme.fg2).drawPoly(poly).setFont("6x8",2).setFontAlign(0,0,l.r).drawString(l.label,l.x+l.w/2,l.y+l.h/2); }, "img":function(l){ g.drawImage(l.src(), l.x + (0|l.pad), l.y + (0|l.pad)); }, "custom":function(l){ @@ -347,8 +382,8 @@ Layout.prototype.update = function() { l._w = g.stringWidth(l.label); } }, "btn": function(l) { - l._h = 24; - l._w = 14 + l.label.length*8; + l._h = 32; + l._w = 20 + l.label.length*12; }, "img": function(l) { var src = l.src(); // get width and height out of image if (src[0]) { @@ -407,5 +442,3 @@ Layout.prototype.clear = function(l) { if (l.bgCol!==undefined) g.setBgColor(l.bgCol); g.clearRect(l.x,l.y,l.x+l.w-1,l.y+l.h-1); }; - -exports = Layout; diff --git a/tests/Layout/bin/runtest.sh b/tests/Layout/bin/runtest.sh index 5ce2ab21f..c85b3fe6c 100755 --- a/tests/Layout/bin/runtest.sh +++ b/tests/Layout/bin/runtest.sh @@ -1,7 +1,7 @@ #!/bin/bash # Requires Linux x64 (for ./espruino) # Also imagemagick for display - + cd `dirname $0`/.. if [ "$#" -ne 1 ]; then echo "USAGE:" @@ -19,7 +19,7 @@ SRCBMP=$SRCDIR/`basename $SRCJS .js`.bmp echo "TEST $SRCJS ($SRCBMP)" cat ../../modules/Layout.js > $TESTJS -echo 'Bangle = {};BTN1=0;process.env = process.env;process.env.HWVERSION=2;' >> $TESTJS +echo 'Bangle = { setUI : function(){} };BTN1=0;process.env = process.env;process.env.HWVERSION=2;' >> $TESTJS echo 'g = Graphics.createArrayBuffer(176,176,4);' >> $TESTJS cat $SRCJS >> $TESTJS || exit 1 echo 'layout.render()' >> $TESTJS @@ -39,5 +39,3 @@ else echo Files are the same exit 0 fi - - diff --git a/tests/Layout/tests/accellog.js b/tests/Layout/tests/accellog.js index 4ae865f4f..63b2ab410 100644 --- a/tests/Layout/tests/accellog.js +++ b/tests/Layout/tests/accellog.js @@ -6,8 +6,8 @@ var layout = new Layout({ type: "v", c: [ {type:"txt", id:"time", font:"6x8:2", label:" - ", pad:5}, {type:"txt", font:"6x8:2", label:"RECORDING", bgCol:"#f00", pad:5, fillx:1}, ] -},[ // Buttons... +}{btns:[ // Buttons... {label:"STOP", cb:()=>{}} -]); +]}); layout.samples.label = "123"; layout.time.label = "123s"; diff --git a/tests/Layout/tests/buttons_1_bangle1.bmp b/tests/Layout/tests/buttons_1_bangle1.bmp new file mode 100644 index 0000000000000000000000000000000000000000..8da6d1e8a10ce5e36176da7a3d23242f576f46af GIT binary patch literal 28874 zcmeI(!D+)V6adg)=&|5cGD0Xl6}m$Y8K7fi1dq@WGD7JD9YaSS0;-gxK7<@>kzi<^ zLV|20|Nozaor|B}zCYs7Ud!)O`KI!Dh{t+v{j%O}x4YeLwdrH^9-D~I82b2%D93#a z5kIjRVm}P~($@$OAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oRVi(4}ePu01Ms*S_Mk>)l!0obxo7e=@4e%k1YAv-fj%oYLjU zxu#t@^ILn|)6A~C#n;dp;>K}lYN4g%`u1Q$YgylPh*UG~>LNA8ZAkTRc~dPmr6`@6A>b2{8|Ztr>? zVX3%{kCXHC9TOlxfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk S1PBlyK!5-N0t5)$ufQ*2@=YoL literal 0 HcmV?d00001 diff --git a/tests/Layout/tests/buttons_1_bangle1.js b/tests/Layout/tests/buttons_1_bangle1.js new file mode 100644 index 000000000..fb6fb29fa --- /dev/null +++ b/tests/Layout/tests/buttons_1_bangle1.js @@ -0,0 +1,9 @@ +var BTN2 = 1, BTN3=2; +process.env = process.env;process.env.HWVERSION=1; +g = Graphics.createArrayBuffer(240,240,4); + +var layout = new Layout({ type: "v", c: [ + {type:"txt", font:"6x8", label:"A test"}, +]},{btns:[ // Buttons... + {label:"STOP", cb:()=>{}}, +]}); diff --git a/tests/Layout/tests/buttons_1_bangle2.bmp b/tests/Layout/tests/buttons_1_bangle2.bmp new file mode 100644 index 0000000000000000000000000000000000000000..2e4d1a2567b5a549702915a933b08c90709f984a GIT binary patch literal 15562 zcmeIzv1!9V7{&1yNEx_QJU|K)QU$U@3Js$XG(yUh8X;tYjB(`^hRb)7qrw>72j+tW z{%34X^7;AcC&_+#{d&|gUhMV3o*(wO(|y}_d_IojIM4H8m~?p4Aib+h`jl*YQjxwj z6rD;r*_?p@0tg_000IagfB*srAbmjRqJ*0I>s)p8T*rY%Fx#yKht^;)BYNcvLt#bC|dVKTJur){x&DFOrrC;9M z%GT^@(o(zU?Yv^ExlQ&v^>f$HZ*kjXFE{Rf^Y-0qckR8X+-u);`@Xopix`Kz+(Ne> w_hmvUw2iV|Db^rhX literal 0 HcmV?d00001 diff --git a/tests/Layout/tests/buttons_1_bangle2.js b/tests/Layout/tests/buttons_1_bangle2.js new file mode 100644 index 000000000..74b6c96af --- /dev/null +++ b/tests/Layout/tests/buttons_1_bangle2.js @@ -0,0 +1,6 @@ + +var layout = new Layout({ type: "v", c: [ + {type:"txt", font:"6x8", label:"A test"}, +]},{btns:[ // Buttons... + {label:"STOP", cb:()=>{}}, +]}); diff --git a/tests/Layout/tests/buttons_3_bangle1.bmp b/tests/Layout/tests/buttons_3_bangle1.bmp new file mode 100644 index 0000000000000000000000000000000000000000..4edc88d08e59157613ebf50cc7cde4e9f1b7f154 GIT binary patch literal 28874 zcmeI(&1u6h6ae5?=&|5cGD0Xl6}m$Y8K7figpAM;GD7JD9YaSS0;-&(J_U?Lj0*k~ z5)}XF>3tSX4$seT-yd;qujTWpyi<8S#N)7S`?B5d_s8RLvpdA*J$4bF(I4U~qI^F@ zAMq2rK2CjqDt(Or0RjXF5FkK+009C72oNAZfWU-6m(s)$%j`~Fx6Hs3qpmG(&Ur$_ zZUO`d5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV6Rg=-Sj#L~2tzQ47im#$o#Er|P84@ii4^IzPw3_RCDHR)Ld@kOq zid!+&zssA3WOJ&S`4DyXy1Je*ra5-ze5V pnp&~Dq|qvHY7}@~Vehg;3_^ea0RjXF5FkK+009C72oPv2@Cz$nTPpwn literal 0 HcmV?d00001 diff --git a/tests/Layout/tests/buttons_3_bangle1.js b/tests/Layout/tests/buttons_3_bangle1.js new file mode 100644 index 000000000..c8346f449 --- /dev/null +++ b/tests/Layout/tests/buttons_3_bangle1.js @@ -0,0 +1,11 @@ +var BTN2 = 1, BTN3=2; +process.env = process.env;process.env.HWVERSION=1; +g = Graphics.createArrayBuffer(240,240,4); + +var layout = new Layout({ type: "v", c: [ + {type:"txt", font:"6x8", label:"A test"}, +]},{btns:[ // Buttons... + {label:"A", cb:()=>{}}, + {label:"STOP", cb:()=>{}}, + {label:"B", cb:()=>{}}, +]}); diff --git a/tests/Layout/tests/buttons_3_bangle2.bmp b/tests/Layout/tests/buttons_3_bangle2.bmp new file mode 100644 index 0000000000000000000000000000000000000000..4b9fa5b42b5e628d1a19a3cc5d1fd73f7bf59d28 GIT binary patch literal 15562 zcmeI1K~BRk5Jd-xB~q@^1F)zNDW}2yhC?@PXIhV zKnL&*yADoWcfzvP)@Pd*6FE)JYV(8Z$_&MVT*Vb67UdeS0EsZ`$<8J1TnE=7A4Tp5 z_rq^LG=1AdXDH9VMqJFbp@enwbuN$#ZcX2KixyH>_Ja{O4M5#|olE|89bAXO1Af0l zLWqe*$dU$3b%~KglxkSkfT38BtkRldww&+Rv|nmt#I@3aNy>sOU0~69L1Iyg01K4_ zNQ7BvRB+n4B$DgkI^@H}{osC>^8>Ev!)f*T*N7We^alAlm&|cnIy6S>c`Ghy9QNwt zZ9pq?gAf+;gAo_qi_*s3pvTo8boGCd+tNb?d{o@GJuaQ7rxz5f(1Ez<#Mq`iZ^;U7 z6PI_0Lr-G4fD1)FYa$7Em^h}R#vSCvOyh5mczKIDq_58=L7I(~&sL=z#;TVtF4UWF zQz5m^N-1B1@fPDaH`Rou%hn#O9C5k12S&P`Hom^9h_@B|GK`eFL}U92Qkrz zFq8l43ydV9)YDQ6hGIcdomC~H_l3CHP1~x(<{Me*z$9fs=JO~#D@ZI#A!4?g0EsZO zO^QxBmt=AsT!(zXxF2rV57V++c^zQI#dX{8P+NOmH{*tf@#qlse66@QrSI5l+WJ~? z)5NLmhmq`DQo?m`9mX*cKL4#B#D$C7wOpdgG9!s7l_*x7p;!=Bt^Odby2G2>A3S-) A-T(jq literal 0 HcmV?d00001 diff --git a/tests/Layout/tests/buttons_3_bangle2.js b/tests/Layout/tests/buttons_3_bangle2.js new file mode 100644 index 000000000..bf70fcb38 --- /dev/null +++ b/tests/Layout/tests/buttons_3_bangle2.js @@ -0,0 +1,8 @@ + +var layout = new Layout({ type: "v", c: [ + {type:"txt", font:"6x8", label:"A test"}, +]},{btns:[ // Buttons... + {label:"A", cb:()=>{}}, + {label:"STOP", cb:()=>{}}, + {label:"B", cb:()=>{}}, +]}); diff --git a/tests/Layout/tests/buttons_osd_bangle1.bmp b/tests/Layout/tests/buttons_osd_bangle1.bmp new file mode 100644 index 0000000000000000000000000000000000000000..72307538590627e10d4ef5495ae491ec376d4116 GIT binary patch literal 28874 zcmeHP(QOlF3tj2M+>U^BGF|z6$t8tvIIv=NPjI27xY8+>)&c|sRBdgA_8pqjdbv|9s zC(K~-=Y>VQQ0s{bo?EZ-9(MsbWLm}VZGQ2QjxBxidS1l4t)jX0D(|MiLDt&$!BCX0 zt02W#L+5v_o*bI$%qcUrUv(aoUK zd!VsrE)U$$&@KWxZ#Wd)HbO@a0hkIk_RJv-=0#*z7g1nKJ+2>_Y0#R*LeLkRqFaJb z(AXyZ2t$L`ECQl0Hbu7tpP;c#`Uwk_w`LL0j$d&rEV?E5GkN3nQ|5(A$e~yWlxx2M zuE}CoDdD+;1GfxU(WAvy=N zxxAqoYfz0t(%7bpE^yXeYS7KlAAP zNGC5B&J(&3?#7#{#H|?{4v35A{9QkruauVsC=;{kN_p{a4lnbjhRy1&^RCjFohVjG z9AMKWyz2GK#+PYppMR^oJIk%!=lHa_y8c7n`u(IArR7)`PwQPm>#^{-iZ@AuKN(&xPnC?kN#5|d zPP(lnB^6JK_11a0@FJ%jm)H3gg?J$XG0rWaH|xA5_=H%u9i zQJwoWlpv_i5|#RWROfyTB?#HONG7`kVW&^Rlx49KQWTa@B}s_F_dCTmxl2BAu<9(9 zs>@Mz?vhU&tU8OO>T*<_yW|rGFV#7Gz2Eq-UR>R+Bi6f$7rvCB9|xXX??PVtr5DV? z?9YSnV-#z6-_`v3)jWHCSMhG!$?Wy)nU&WoG5EOjeQ>Kq=XcX$sHO8eR8AI5b!Md* zI-oiam6HWiompvy4yevU73ozWNEPJ_75aXSr+~1JVHX1B*DiF8A-oq{|o4F Bg#7>j literal 0 HcmV?d00001 diff --git a/tests/Layout/tests/buttons_osd_bangle1.js b/tests/Layout/tests/buttons_osd_bangle1.js new file mode 100644 index 000000000..108cb62b0 --- /dev/null +++ b/tests/Layout/tests/buttons_osd_bangle1.js @@ -0,0 +1,17 @@ +var BTN2 = 1, BTN3=2; +process.env = process.env;process.env.HWVERSION=1; +g = Graphics.createArrayBuffer(240,240,4); + +/* When displaying OSD buttons on Bangle.js 1 we should turn +the side buttons into 'soft' buttons and then use the physical +buttons for up/down selection */ + +var layout = new Layout({ type: "v", c: [ + {type:"txt", font:"6x8", label:"A test"}, + {type:"btn", label:"Button 1"}, + {type:"btn", label:"Button 2"} +]},{btns:[ // Buttons... + {label:"A", cb:()=>{}}, + {label:"STOP", cb:()=>{}}, + {label:"B", cb:()=>{}}, +]}); diff --git a/tests/Layout/tests/buttons_osd_bangle2.bmp b/tests/Layout/tests/buttons_osd_bangle2.bmp new file mode 100644 index 0000000000000000000000000000000000000000..397c9e8717da077fd2fe17f01b98755b5e8d1ccb GIT binary patch literal 15562 zcmeI2OO6yV3_yd#5~;5;2VgNmtdO_^i#g03VUEC(QyYL=$kDni(pPye}Umu=c!o#=l6vFp# zdI>*6fa8~N3gLHnI)%5>=?&yjpL6yZ#RSeFXC3o{>tus6L9XIDl8JH+*nwP_%gKw& zwOe&qb;x(o>W9@2+kQBlj|b|E!S~-uT*&pn36ITpaRYb3z15c<(J=MF{V<7}HsIKN z7nl2Y)nU~k_P~1H;X=3@jVnvqFx`?NxhUPR%)y{ckj&^3F?*dqU*cc#nZ%t{2UAiL zq;!H!dPg!*ng9hO2TEb`vbW0`rNm7E)U-uVoC@rvIHzx6qD{$P^fI^d)K2n|IW7p# zsnxA26aWQv6{iLTKtZi;RiOYVsH-?NC;$p-b*l;mKtWx_sX+l?)VR&SAx(Th8W`{> z@@PYnYyfc;CZkTkhzA1-#RDEi&rU9R#=ICoBWt3b$h?T6NsQKLFlyt^t~44wx$z>3 z20&{x7`5?dR~n6;eW@}i8UU|t)W-ipF1*oix%u_k=YlUA_5U$Ons9j?u#>3E zNSVoamRTPJmC;$rTYq(~=4XQ8Zb2~2XUQtHRTxZlcjuza2cM5 z%j?TMmpYGoHd^CB6iq+qvTc*=x$!N)wO`DRqjEx$R>~wwvS9O_#Dy*Feh<05pH=de z6EOMyORgkTnY;6?@MQU}xp*(5+q&)xIUPB@=2;pkK0kQwnCIV=jpnIBT5FLcU7uIN z;U@0?XlxC@n#5I$%Y+W@kxvf(tHk+8KPYg%CIPp$moIa{f_#p9rup{;h1)Ye(5(k7 z;GGQQJ<~oekzjztA?0D*SYF7K{_0ncsjD1x)R(!MrV4^Ga}Sps6{mvX$w4<)94qs^ zab1;M`jwO2TQ(#YWzVm+W>6+b&9kze-wZ3JUCWcWv+7_@0wo*$Jp@12 zn8UrR`bsy9uJ0^v+B>8BLCA~Cl~{FHb&x%Q^MBh9?!?{WT3(_~*^pe6PLwe>C={}}, + {label:"STOP", cb:()=>{}}, + {label:"B", cb:()=>{}}, +]}); diff --git a/tests/Layout/tests/padding.bmp b/tests/Layout/tests/padding.bmp index b2d192750fc3d6e454e2216e58e42dc4b5c3d000..84ae4dc1bcdebea1b531156b07448700812f843a 100644 GIT binary patch literal 15562 zcmeI2F>BjE6vwYnXi7u+Rq_Ekgwm+gtw3wX zY~4gR+aS39-#b~BW1Vg3J%yOuvn`zt>*v4!_xw&i`{kQoFAT?PYil(ib`?jFwNX5d2pY!`jwxbm`*JO2^6Y9nCKhP?0yP(hQZDNyE^dwsu>vk%+2jB) zk~a+>`s=N^aF$FUqvLw$Y;PZ!Tjc||w?e45;zH~ay63q0vU7d^>ik`QzV8_;xrXD} zS*JL0XRY7fE%#@$fVuL>J>P_SFR1d`<(W-^%TokbNK|xJDAPoN+d8vpaG??9oMk(` znAyZ!j8)srCg!?)Se$;KU5UFivvuJ9XqK_MNOI?g<&Wa#`Fnvn=9%B5T$+1OBymSw zryWNeNx8oHP0XF?h1gmzS~4!i$}_*oxHC5^TkD-vuLIeZ`Awwvy#B(vLF4!4`FrkG z1h9mGi>ln_v{FKACDfoE^rKz%bm8)XPM$Lm9OeQSTr4KD_zKyLA$yy>&3Xc2Z9u7SD&zk1ai5F0Ub!r| zzYkuy#z1i3Vl*F~5A=DXG^Wk$q2a?|+=fn7y?4WPW-H{`?7dfeJ?=t2Sk4Lkd{E>z z#|>tXA1Zo>;2MyX=^cp6b}nrmUY%UBfIA+P4{5sx)QbzL{?`wQ_re7BO1NIZ zkSpP0<*+?~6>;f&UkLp5A-O+rojpB$XnrQ1%$B6yHGAdlz;zxD=|fRq@bt&+$e6!F zaBqrYZwM~^A!Mt#dpCpVJt~Sp#w{8s&s^ov&)>jB=^3K#>{hG4_3lzWPY@w+osZk- z1O0Nt|4gO-b6mRjA>EP>^e0;048g^(D}>k8i{G)FW@Rq0`g$>FZrtc!PMSWz)p;o9 b!yJlM;5s|*xewAh5Y7({1P6ixTkXJq)aC)t delta 755 zcmX?Ad8%^5B-Y6fv@Nk>1vak9uUI2Dzh-3;pRB;fI{BlF#N> z5(8-lOMYNL0sP34^HHRL9FSI+PBe`S3?QvwH~p6rWd^DwmJM_U$fE!MK?Dea7$B>l zHW8MDXakynO($MSkOm;et`n~$USsh}LhZxpPmp6!B`4zuQBVZpj0TY8d{9Ut17N7a gf)zt6O4Q>_G=x$dRNj4argowr*0c;tJ~hToMDtinz373bs&k`bE?q&G8f?v`81%KiU80|NsP|7Z9=d84ArtE9h;Q+-nlC Jxz@;+3jnVndfNa1 From f41b3c5a885d5af9c559e39773e4ab24d9d4a60e Mon Sep 17 00:00:00 2001 From: Gordon Williams Date: Mon, 18 Oct 2021 12:01:40 +0100 Subject: [PATCH 094/392] Update bootloader to include polyfills for g.wrapString, g.imageMetrics, g.stringMetrics - and modify Layout lib to use those functions --- apps.json | 2 +- apps/boot/ChangeLog | 1 + apps/boot/bootupdate.js | 35 ++++++++++++++++++++++++++++++++ modules/Layout.js | 41 +++++++------------------------------- tests/Layout/bin/espruino | Bin 4459888 -> 4462968 bytes 5 files changed, 44 insertions(+), 35 deletions(-) diff --git a/apps.json b/apps.json index f7bec7695..d16213364 100644 --- a/apps.json +++ b/apps.json @@ -4,7 +4,7 @@ "tags": "tool,system,b2", "type":"bootloader", "icon": "bootloader.png", - "version":"0.30", + "version":"0.31", "description": "This is needed by Bangle.js to automatically load the clock, menu, widgets and settings", "storage": [ {"name":".boot0","url":"boot0.js"}, diff --git a/apps/boot/ChangeLog b/apps/boot/ChangeLog index 7f2220572..6cdf1b0e5 100644 --- a/apps/boot/ChangeLog +++ b/apps/boot/ChangeLog @@ -30,3 +30,4 @@ 0.29: Update boot0 to avoid code block (faster execution) Fix issues where 'Uncaught Error: Function not found' could happen with multiple .boot.js 0.30: Remove 'Get GPS time' at boot. Latest firmwares keep time through reboots, so this is not needed now +0.31: Add polyfills for g.wrapString, g.imageMetrics, g.stringMetrics diff --git a/apps/boot/bootupdate.js b/apps/boot/bootupdate.js index 199bff6e3..7210ae731 100644 --- a/apps/boot/bootupdate.js +++ b/apps/boot/bootupdate.js @@ -131,6 +131,41 @@ else if (mode=="updown") { throw new Error("Unknown UI mode"); };\n`; } +if (!g.imageMetrics) { // added in 2v11 - this is a limited functionality polyfill + boot += `Graphics.prototype.imageMetrics=function(src) { + if (src[0]) return {width:src[0],height:src[1]}; + else if ('object'==typeof src) return { + width:("width" in src) ? src.width : src.getWidth(), + height:("height" in src) ? src.height : src.getHeight()}; + var im = E.toString(src); + return {width:im.charCodeAt(0), height:im.charCodeAt(1)}; +};\n`; +} +if (!g.stringMetrics) { // added in 2v11 - this is a limited functionality polyfill + boot += `Graphics.prototype.stringMetrics=function(txt) { + return {width:this.stringWidth(txt), height:this.getFontHeight()}; +};\n`; +} +if (!g.wrapString) { // added in 2v11 - this is a limited functionality polyfill + boot += `Graphics.prototype.wrapString=function(str, maxWidth) { + var lines = []; + for (var unwrappedLine of str.split("\n")) { + var words = unwrappedLine.split(" "); + var line = words.shift(); + for (var word of words) { + if (g.stringWidth(line + " " + word) > maxWidth) { + lines.push(line); + line = word; + } else { + line += " " + word; + } + } + lines.push(line); + } + return lines; +};\n`; +} + // Append *.boot.js files require('Storage').list(/\.boot\.js/).forEach(bootFile=>{ // we add a semicolon so if the file is wrapped in (function(){ ... }() diff --git a/modules/Layout.js b/modules/Layout.js index 94abd42fd..99ce9b042 100644 --- a/modules/Layout.js +++ b/modules/Layout.js @@ -190,24 +190,6 @@ Layout.prototype.remove = function (l) { } }; -function wrappedLines(str, maxWidth) { - var lines = []; - for (var unwrappedLine of str.split("\n")) { - var words = unwrappedLine.split(" "); - var line = words.shift(); - for (var word of words) { - if (g.stringWidth(line + " " + word) > maxWidth) { - lines.push(line); - line = word; - } else { - line += " " + word; - } - } - lines.push(line); - } - return lines; -} - function prepareLazyRender(l, rectsToClear, drawList, rects, parentBg) { var bgCol = l.bgCol == null ? parentBg : g.toColor(l.bgCol); if (bgCol != parentBg || l.type == "txt" || l.type == "btn" || l.type == "img" || l.type == "custom") { @@ -246,8 +228,9 @@ Layout.prototype.render = function (l) { "txt":function(l){ if (l.wrap) { g.setFont(l.font,l.fsz).setFontAlign(0,-1); - var lines = wrappedLines(l.label, l.w); + var lines = g.wrapString(l.label, l.w); var y = l.y+((l.h-g.getFontHeight()*lines.length)>>1); + // TODO: on 2v11 we can just render in a single drawString call lines.forEach((line, i) => g.drawString(line, l.x+(l.w>>1), y+g.getFontHeight()*i)); } else { g.setFont(l.font,l.fsz).setFontAlign(0,0,l.r).drawString(l.label, l.x+(l.w>>1), l.y+(l.h>>1)); @@ -377,26 +360,16 @@ Layout.prototype.update = function() { if (l.wrap) { l._h = l._w = 0; } else { - g.setFont(l.font,l.fsz); - l._h = g.getFontHeight(); - l._w = g.stringWidth(l.label); + var m = g.setFont(l.font,l.fsz).stringMetrics(l.label); + l._w = m.width; l._h = m.height; } }, "btn": function(l) { l._h = 32; l._w = 20 + l.label.length*12; }, "img": function(l) { - var src = l.src(); // get width and height out of image - if (src[0]) { - l._w = src[0]; - l._h = src[1]; - } else if ('object'==typeof src) { - l._w = ("width" in src) ? src.width : src.getWidth(); - l._h = ("height" in src) ? src.height : src.getHeight(); - } else { - var im = E.toString(src); - l._w = im.charCodeAt(0); - l._h = im.charCodeAt(1); - } + var m = g.imageMetrics(l.src()); // get width and height out of image + l._w = m.width; + l._h = m.height; }, "": function(l) { // size should already be set up in width/height l._w = 0; diff --git a/tests/Layout/bin/espruino b/tests/Layout/bin/espruino index 3a423c1859b9174b119f34b78b93491cc509553b..8f9c1d8787b532197c3f1b583a0ce354de973d6a 100755 GIT binary patch literal 4462968 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%0AnnRwYg+N-Legdio8(^VrL{3j2FgDsTg*Q6t3 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

?SvrdMcX6Q|O+66!YV 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
NL1 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%0D<*RT|}Hj4EYJWUyI} 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

!N{Ud;vx5uEIW($yc5vYu398}k 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

- + + From 6d72c4480dedb029b92bbac3dddf4e31d385765c Mon Sep 17 00:00:00 2001 From: qucchia Date: Wed, 27 Oct 2021 18:54:06 +0200 Subject: [PATCH 279/392] Add Q Alarm app --- apps.json | 19 +++ apps/qalarm/ChangeLog | 1 + apps/qalarm/app-icon.js | 1 + apps/qalarm/app.js | 278 +++++++++++++++++++++++++++++++++++++ apps/qalarm/app.png | Bin 0 -> 1531 bytes apps/qalarm/boot.js | 1 + apps/qalarm/qalarm.js | 157 +++++++++++++++++++++ apps/qalarm/qalarmcheck.js | 42 ++++++ apps/qalarm/widget.js | 22 +++ 9 files changed, 521 insertions(+) create mode 100644 apps/qalarm/ChangeLog create mode 100644 apps/qalarm/app-icon.js create mode 100644 apps/qalarm/app.js create mode 100644 apps/qalarm/app.png create mode 100644 apps/qalarm/boot.js create mode 100644 apps/qalarm/qalarm.js create mode 100644 apps/qalarm/qalarmcheck.js create mode 100644 apps/qalarm/widget.js diff --git a/apps.json b/apps.json index d1ebe5249..72de1a4ad 100644 --- a/apps.json +++ b/apps.json @@ -4166,5 +4166,24 @@ "storage": [ {"name":"swiperclocklaunch.boot.js","url":"boot.js"} ] + }, + { + "id": "qalarm", + "name": "Q Alarm and Timer", + "shortName": "Q Alarm", + "icon": "app.png", + "version": "0.01", + "description": "Alarm and timer app with days of week and 'hard' option.", + "tags": "tool,alarm,widget", + "supports": ["BANGLEJS", "BANGLEJS2"], + "storage": [ + { "name": "qalarm.app.js", "url": "app.js" }, + { "name": "qalarm.boot.js", "url": "boot.js" }, + { "name": "qalarm.js", "url": "qalarm.js" }, + { "name": "qalarmcheck.js", "url": "qalarmcheck.js" }, + { "name": "qalarm.img", "url": "app-icon.js", "evaluate": true }, + { "name": "qalarm.wid.js", "url": "widget.js" } + ], + "data": [{ "name": "qalarm.json" }] } ] diff --git a/apps/qalarm/ChangeLog b/apps/qalarm/ChangeLog new file mode 100644 index 000000000..4022f485c --- /dev/null +++ b/apps/qalarm/ChangeLog @@ -0,0 +1 @@ +0.01: First version! diff --git a/apps/qalarm/app-icon.js b/apps/qalarm/app-icon.js new file mode 100644 index 000000000..1a014b796 --- /dev/null +++ b/apps/qalarm/app-icon.js @@ -0,0 +1 @@ +require("heatshrink").decompress(atob("/wA/AH4A/AH4AF0WiF1wwtF73GB53MAAgkY4wABFqIxPEhQuXGB4vUFxYwMEpBpGBwouNGAwfFF5I1KF6ZQHGAwNLFx4wHF/4v/F/4v/AoYGDF6gaFF5AwHL7QuMBJQvWEpwvxBQ4uRGBAkJT4wuWGBIuIRjKRNF8wwXFy4wWFzIwU53NFzPN5wuR5/PGK4tBDYSNQ5wVCCwIzBAAQoIAAQWGSJ5HFDYYAQIYTCRKRIeBAAYmDAAZsJMCQAbeCAybFiQ0XFTQAIzgAGFcYvz0QAGF84wGF1AwFF1QA/AH4A/ADQ=")) diff --git a/apps/qalarm/app.js b/apps/qalarm/app.js new file mode 100644 index 000000000..4d27739cf --- /dev/null +++ b/apps/qalarm/app.js @@ -0,0 +1,278 @@ +Bangle.loadWidgets(); +Bangle.drawWidgets(); + +let alarms = require("Storage").readJSON("qalarm.json", 1) || []; +/* +Alarm format: +{ + on : true, + t : 23400000, // Time of day since midnight in ms + msg : "Eat chocolate", // (optional) Must be set manually from the IDE + last : 0, // Last day of the month we alarmed on - so we don't alarm twice in one day! + rp : true, // Repeat + as : false, // Auto snooze + hard: true, // Whether the alarm will be like HardAlarm or not + timer : 300, // (optional) If set, this is a timer and it's the time in seconds + daysOfWeek: [true,true,true,true,true,true,true] // What days of the week the alarm is on. First item is Sunday, 2nd is Monday, etc. +} +*/ + +function formatTime(t) { + mins = 0 | (t / 60000) % 60; + hrs = 0 | (t / 3600000); + return hrs + ":" + ("0" + mins).substr(-2); +} + +function formatTimer(t) { + mins = 0 | (t / 60) % 60; + hrs = 0 | (t / 3600); + return hrs + ":" + ("0" + mins).substr(-2); +} + +function getCurrentTime() { + let time = new Date(); + return ( + time.getHours() * 3600000 + + time.getMinutes() * 60000 + + time.getSeconds() * 1000 + ); +} + +function showMainMenu() { + const menu = { + "": { title: "Alarms" }, + "New Alarm": () => showEditAlarmMenu(-1), + "New Timer": () => showEditTimerMenu(-1), + }; + alarms.forEach((alarm, idx) => { + let txt = + (alarm.timer ? "TIMER " : "ALARM ") + + (alarm.on ? "on " : "off ") + + (alarm.timer ? formatTimer(alarm.timer) : formatTime(alarm.t)); + menu[txt] = function () { + if (alarm.timer) showEditTimerMenu(idx); + else showEditAlarmMenu(idx); + }; + }); + menu["< Back"] = () => { + load(); + }; + + if (WIDGETS["qalarm"]) WIDGETS["qalarm"].reload(); + return E.showMenu(menu); +} + +function showEditAlarmMenu(alarmIndex, alarm) { + const newAlarm = alarmIndex < 0; + + if (!alarm) { + if (newAlarm) { + alarm = { + t: 43200000, + on: true, + rp: true, + as: false, + hard: false, + daysOfWeek: new Array(7).fill(true), + }; + } else { + alarm = Object.assign({}, alarms[alarmIndex]); // Copy object in case we don't save it + } + } + + let hrs = 0 | (alarm.t / 3600000); + let mins = 0 | (alarm.t / 60000) % 60; + let secs = 0 | (alarm.t / 1000) % 60; + + const menu = { + "": { title: alarm.msg ? alarm.msg : "Alarms" }, + Hours: { + value: hrs, + onchange: function (v) { + if (v < 0) v = 23; + if (v > 23) v = 0; + hrs = v; + this.value = v; + }, // no arrow fn -> preserve 'this' + }, + Minutes: { + value: mins, + onchange: function (v) { + if (v < 0) v = 59; + if (v > 59) v = 0; + mins = v; + this.value = v; + }, // no arrow fn -> preserve 'this' + }, + Seconds: { + value: secs, + onchange: function (v) { + if (v < 0) v = 59; + if (v > 59) v = 0; + secs = v; + this.value = v; + }, // no arrow fn -> preserve 'this' + }, + Enabled: { + value: alarm.on, + format: (v) => (v ? "On" : "Off"), + onchange: (v) => (alarm.on = v), + }, + Repeat: { + value: alarm.rp, + format: (v) => (v ? "Yes" : "No"), + onchange: (v) => (alarm.rp = v), + }, + "Auto snooze": { + value: alarm.as, + format: (v) => (v ? "Yes" : "No"), + onchange: (v) => (alarm.as = v), + }, + Hard: { + value: alarm.hard, + format: (v) => (v ? "Yes" : "No"), + onchange: (v) => (alarm.hard = v), + }, + "Days of week": () => showDaysMenu(alarmIndex, getAlarm()), + }; + + function getAlarm() { + alarm.t = hrs * 3600000 + mins * 60000 + secs * 1000; + + alarm.last = 0; + // If alarm is for tomorrow not today (eg, in the past), set day + if (alarm.t < getCurrentTime()) alarm.last = new Date().getDate(); + + return alarm; + } + + menu["> Save"] = function () { + if (newAlarm) alarms.push(getAlarm()); + else alarms[alarmIndex] = getAlarm(); + require("Storage").write("qalarm.json", JSON.stringify(alarms)); + eval(require("Storage").read("qalarmcheck.js")); + showMainMenu(); + }; + + if (!newAlarm) { + menu["> Delete"] = function () { + alarms.splice(alarmIndex, 1); + require("Storage").write("qalarm.json", JSON.stringify(alarms)); + eval(require("Storage").read("qalarmcheck.js")); + showMainMenu(); + }; + } + menu["< Back"] = showMainMenu; + return E.showMenu(menu); +} + +function showDaysMenu(alarmIndex, alarm) { + const menu = { + "": { title: alarm.msg ? alarm.msg : "Alarms" }, + "< Back": () => showEditAlarmMenu(alarmIndex, alarm), + }; + + [ + "Sunday", + "Monday", + "Tuesday", + "Wednesday", + "Thursday", + "Friday", + "Saturday", + ].forEach((dayOfWeek, i) => { + menu[dayOfWeek] = { + value: alarm.daysOfWeek[i], + format: (v) => (v ? "Yes" : "No"), + onchange: (v) => (alarm.daysOfWeek[i] = v), + }; + }); + + return E.showMenu(menu); +} + +function showEditTimerMenu(timerIndex) { + var newAlarm = timerIndex < 0; + + let alarm; + if (newAlarm) { + alarm = { + timer: 300, + on: true, + rp: false, + as: false, + hard: false, + }; + } else { + alarm = alarms[timerIndex]; + } + + let hrs = 0 | (alarm.timer / 3600); + let mins = 0 | (alarm.timer / 60) % 60; + let secs = (0 | alarm.timer) % 60; + + const menu = { + "": { title: "Timer" }, + Hours: { + value: hrs, + onchange: function (v) { + if (v < 0) v = 23; + if (v > 23) v = 0; + hrs = v; + this.value = v; + }, // no arrow fn -> preserve 'this' + }, + Minutes: { + value: mins, + onchange: function (v) { + if (v < 0) v = 59; + if (v > 59) v = 0; + mins = v; + this.value = v; + }, // no arrow fn -> preserve 'this' + }, + Seconds: { + value: secs, + onchange: function (v) { + if (v < 0) v = 59; + if (v > 59) v = 0; + secs = v; + this.value = v; + }, // no arrow fn -> preserve 'this' + }, + Enabled: { + value: alarm.on, + format: (v) => (v ? "On" : "Off"), + onchange: (v) => (alarm.on = v), + }, + Hard: { + value: alarm.hard, + format: (v) => (v ? "On" : "Off"), + onchange: (v) => (alarm.hard = v), + }, + }; + function getTimer() { + alarm.timer = hrs * 3600 + mins * 60 + secs; + alarm.t = (getCurrentTime() + alarm.timer * 1000) % 86400000; + return alarm; + } + menu["> Save"] = function () { + if (newAlarm) alarms.push(getTimer()); + else alarms[timerIndex] = getTimer(); + require("Storage").write("qalarm.json", JSON.stringify(alarms)); + eval(require("Storage").read("qalarmcheck.js")); + showMainMenu(); + }; + if (!newAlarm) { + menu["> Delete"] = function () { + alarms.splice(timerIndex, 1); + require("Storage").write("qalarm.json", JSON.stringify(alarms)); + eval(require("Storage").read("qalarmcheck.js")); + showMainMenu(); + }; + } + menu["< Back"] = showMainMenu; + return E.showMenu(menu); +} + +showMainMenu(); diff --git a/apps/qalarm/app.png b/apps/qalarm/app.png new file mode 100644 index 0000000000000000000000000000000000000000..14edf415069c0df4b92316a58719ad356affa395 GIT binary patch literal 1531 zcmVYq`X4DteAXTyb(wC0gV-yH-YTe z9r4F1jgQS2-fWq+5-C*qSHNTeP!AlFr5wu>OcT`&j4n!kSF8cp3|dz)A+!!*v$n=2 z71eHFw5Eyne3zFwj&K~P=OXh;7vQkSn{D;UO%@R4ux|1@dp_%`BcG>PkCDH!z0yt0 zBg$d#ViqX)*_$mY6bH}1OwV|K!1-yE@i;8@iQNOcuzK=&H0sWHb0F8VUaqGC@`C_~ z$I*ko0AZ>pJsxm=#FOs~*uQkM%zI;N%JyjKOvmK;D@kSmW06;gfmE>nF@0NP>%Y|{n+k(KIxO% z>>^k?v0Tx7h%ot+iwFJeRPKEVHo#DR zL|bcSVHmrC+MA+QIXZEiMp>9UREcp#1!(KA(HPkSz{CMjs~rE3i_DeBZ(Qilu-^jo z&~pjm<_S7}OOid`pLsZlj)9>Mo~7HqPafKmDQ6lfrvxA|VmFC~BtvII*BR*i6EY{k zx*8f^m&r&N(g3wnA(jM4VxHU$%r56vb_KL8-iTSdgW>aqVfTZ?dX-iOWY0nF667v} za|5glXa<}dI9>i=MjVV9FcM%Uz^sMHD5x3j5;hB-sM$U^3rI{+f} z5WN#3bx<=B%sPl9+*OhYh}pYh+6`)hTJGG+fPDpWSHZdh+5f<5FU7(tN3nbXR*APHKJN}X*n5s|1Nig;_LHaIE>+HIJeMzkHI9XJPi3OI#u zg!9=G!H2cb3+NBqS0)^%#6y`O=%P4D&7{qOk{{g3Sz02%OoB#j-002ovPDHLkV1h(U(Ov)m literal 0 HcmV?d00001 diff --git a/apps/qalarm/boot.js b/apps/qalarm/boot.js new file mode 100644 index 000000000..6713ad9e1 --- /dev/null +++ b/apps/qalarm/boot.js @@ -0,0 +1 @@ +eval(require("Storage").read("qalarmcheck.js")); diff --git a/apps/qalarm/qalarm.js b/apps/qalarm/qalarm.js new file mode 100644 index 000000000..38571987e --- /dev/null +++ b/apps/qalarm/qalarm.js @@ -0,0 +1,157 @@ +// This file shows the alarm + +print("Starting alarm"); + +function formatTime(t) { + let hrs = Math.floor(t / 3600000); + let mins = Math.round((t / 60000) % 60); + return hrs + ":" + ("0" + mins).substr(-2); +} + +function getCurrentTime() { + let time = new Date(); + return ( + time.getHours() * 3600000 + + time.getMinutes() * 60000 + + time.getSeconds() * 1000 + ); +} + +function getRandomInt(max) { + return Math.floor(Math.random() * Math.floor(max)); +} + +function getRandomFromRange( + lowerRangeMin, + lowerRangeMax, + higherRangeMin, + higherRangeMax +) { + let lowerRange = lowerRangeMax - lowerRangeMin; + let higherRange = higherRangeMax - higherRangeMin; + let fullRange = lowerRange + higherRange; + let randomNum = getRandomInt(fullRange); + if (randomNum <= lowerRangeMax - lowerRangeMin) { + return randomNum + lowerRangeMin; + } else { + return randomNum + (higherRangeMin - lowerRangeMax); + } +} + +function showNumberPicker(currentGuess, randomNum) { + if (currentGuess == randomNum) { + E.showMessage("" + currentGuess + "\n PRESS ENTER", "Get to " + randomNum); + } else { + E.showMessage("" + currentGuess, "Get to " + randomNum); + } +} + +function showPrompt(msg, buzzCount, alarm) { + E.showPrompt(msg, { + title: alarm.timer ? "TIMER!" : "ALARM!", + buttons: { Sleep: true, Ok: false }, // default is sleep so it'll come back in 10 mins + }).then(function (sleep) { + buzzCount = 0; + if (sleep) { + if (alarm.ohr === undefined) alarm.ohr = alarm.t; + alarm.t += 10 / 60; // 10 minutes + require("Storage").write("qalarm.json", JSON.stringify(alarms)); + load(); + } else { + alarm.last = new Date().getDate(); + if (alarm.ohr !== undefined) { + alarm.t = alarm.ohr; + delete alarm.ohr; + } + if (!alarm.rp) alarm.on = false; + require("Storage").write("qalarm.json", JSON.stringify(alarms)); + load(); + } + }); +} + +function showAlarm(alarm) { + if ((require("Storage").readJSON("setting.json", 1) || {}).quiet > 1) return; // total silence + let msg = formatTime(alarm.t); + let buzzCount = 20; + if (alarm.msg) msg += "\n" + alarm.msg + "!"; + + if (alarm.hard) { + let okClicked = false; + let currentGuess = 10; + let randomNum = getRandomFromRange(0, 7, 13, 20); + showNumberPicker(currentGuess, randomNum); + setWatch( + (o) => { + if (!okClicked && currentGuess < 20) { + currentGuess = currentGuess + 1; + showNumberPicker(currentGuess, randomNum); + } + }, + BTN1, + { repeat: true, edge: "rising" } + ); + + setWatch( + (o) => { + if (currentGuess == randomNum) { + okClicked = true; + showPrompt(msg, buzzCount, alarm); + } + }, + BTN2, + { repeat: true, edge: "rising" } + ); + + setWatch( + (o) => { + if (!okClicked && currentGuess > 0) { + currentGuess = currentGuess - 1; + showNumberPicker(currentGuess, randomNum); + } + }, + BTN3, + { repeat: true, edge: "rising" } + ); + } else { + showPrompt(msg, buzzCount, alarm); + } + + function buzz() { + Bangle.buzz(500).then(() => { + setTimeout(() => { + Bangle.buzz(500).then(function () { + setTimeout(() => { + Bangle.buzz(2000).then(function () { + if (buzzCount--) setTimeout(buzz, 2000); + else if (alarm.as) { + // auto-snooze + buzzCount = 20; + setTimeout(buzz, 600000); // 10 minutes + } + }); + }, 100); + }); + }, 100); + }); + } + buzz(); +} + +let time = new Date(); +let t = getCurrentTime(); +let alarms = require("Storage").readJSON("qalarm.json", 1) || []; + +let active = alarms.filter( + (alarm) => + alarm.on && + alarm.t < t && + alarm.last != time.getDate() && + (alarm.timer || alarm.daysOfWeek[time.getDay()]) +); + +print(active); + +if (active.length) { + showAlarm(active.sort((a, b) => a.t - b.t)[0]); +} diff --git a/apps/qalarm/qalarmcheck.js b/apps/qalarm/qalarmcheck.js new file mode 100644 index 000000000..de3db68ab --- /dev/null +++ b/apps/qalarm/qalarmcheck.js @@ -0,0 +1,42 @@ +/** + * This file checks for upcoming alarms and schedules qalarm.js to deal with them and itself to continue doing these checks. + */ + +print("Checking for alarms..."); + +clearInterval(); + +function getCurrentTime() { + let time = new Date(); + return ( + time.getHours() * 3600000 + + time.getMinutes() * 60000 + + time.getSeconds() * 1000 + ); +} + +let time = new Date(); +let t = getCurrentTime(); + +let nextAlarms = (require("Storage").readJSON("qalarm.json", 1) || []) + .filter( + (alarm) => + alarm.on && + alarm.t > t && + alarm.last != time.getDate() && + (alarm.timer || alarm.daysOfWeek[time.getDay()]) + ) + .sort((a, b) => a.t - b.t); + +if (nextAlarms[0]) { + print("Found alarm, scheduling...", nextAlarms[0].t - t); + setTimeout(() => { + load("qalarm.js"); + eval(require("Storage").read("qalarmcheck.js")); + }, 3600000 * (nextAlarms[0].t - t)); +} else { + print("No alarms found. Will re-check at midnight."); + setTimeout(() => { + eval(require("Storage").read("qalarmcheck.js")); + }, 86400000 - t); +} diff --git a/apps/qalarm/widget.js b/apps/qalarm/widget.js new file mode 100644 index 000000000..f80aff653 --- /dev/null +++ b/apps/qalarm/widget.js @@ -0,0 +1,22 @@ +WIDGETS["qalarm"] = { + area: "tl", + width: 0, + draw: function () { + if (this.width) + g.reset().drawImage( + atob( + "GBgBAAAAAAAAABgADhhwDDwwGP8YGf+YMf+MM//MM//MA//AA//AA//AA//AA//AA//AB//gD//wD//wAAAAADwAABgAAAAAAAAA" + ), + this.x, + this.y + ); + }, + reload: function () { + WIDGETS["qalarm"].width = ( + require("Storage").readJSON("qalarm.json", 1) || [] + ).some((alarm) => alarm.on) + ? 24 + : 0; + }, +}; +WIDGETS["qalarm"].reload(); From d10adb0684dfdf6c36c1e0ef81842d44f9c3668e Mon Sep 17 00:00:00 2001 From: David Skrabal Date: Wed, 27 Oct 2021 13:17:15 -0400 Subject: [PATCH 280/392] Revert "Customize" This reverts commit 9e404c625296d008314a547ff8e798767f65e426. --- README.md | 7 +++---- index.html | 5 ++--- 2 files changed, 5 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index a620121b8..d60d46fd3 100644 --- a/README.md +++ b/README.md @@ -1,11 +1,10 @@ -labarks' testing Bangle.js App Loader (and Apps) +Bangle.js App Loader (and Apps) ================================ [![Build Status](https://travis-ci.org/espruino/BangleApps.svg?branch=master)](https://travis-ci.org/espruino/BangleApps) -* Try my **development version** at [github.io](https://labarks.github.io/BangleApps/) -* Try the official **release version** at [banglejs.com/apps](https://banglejs.com/apps) -* Try the official **development version** at [github.io](https://espruino.github.io/BangleApps/) +* Try the **release version** at [banglejs.com/apps](https://banglejs.com/apps) +* Try the **development version** at [github.io](https://espruino.github.io/BangleApps/) **All software (including apps) in this repository is MIT Licensed - see [LICENSE](LICENSE)** By submitting code to this repository you confirm that you are happy with it being MIT licensed, diff --git a/index.html b/index.html index a5aa94e6a..0185f1bae 100644 --- a/index.html +++ b/index.html @@ -17,7 +17,7 @@ - labarks' testing Bangle.js App Loader + Bangle.js App Loader
- - + From 48ecdc5614b0eb9151dfcd0cdc530abf206d78cb Mon Sep 17 00:00:00 2001 From: David Skrabal Date: Wed, 27 Oct 2021 13:25:22 -0400 Subject: [PATCH 281/392] Update widver to 0.02 Display "Rel" (Release) instead of 'undefined' when there is no Build number. --- apps.json | 2 +- apps/widver/ChangeLog | 1 + apps/widver/widget.js | 4 ++++ 3 files changed, 6 insertions(+), 1 deletion(-) diff --git a/apps.json b/apps.json index 3a9925650..7338c438c 100644 --- a/apps.json +++ b/apps.json @@ -1614,7 +1614,7 @@ { "id": "widver", "name": "Firmware Version Widget", - "version": "0.01", + "version": "0.02", "description": "Display the version of the installed firmware in the top widget section.", "icon": "widget.png", "type": "widget", diff --git a/apps/widver/ChangeLog b/apps/widver/ChangeLog index adb5b038a..30581c35b 100644 --- a/apps/widver/ChangeLog +++ b/apps/widver/ChangeLog @@ -1 +1,2 @@ 0.01: New Widget +0.02: Display "Rel" (Release) instead of 'undefined' when there is no Build number. diff --git a/apps/widver/widget.js b/apps/widver/widget.js index 5da66444f..eb751ca23 100644 --- a/apps/widver/widget.js +++ b/apps/widver/widget.js @@ -2,6 +2,10 @@ (() => { var width = 28, ver = process.env.VERSION.split('.'); + + // Example: if ver is 2v11 instead of 2v10.142 write "Rel" (Release) instead of Build number + if(typeof ver[1] === 'undefined'){ver[1] = "Rel";} + function draw() { g.reset().setColor(0, 0.5, 1).setFont("6x8", 1); g.drawString(ver[0], this.x + 2, this.y + 4, true); From eefa209af467fbb993a59db57a7104eecb78ed07 Mon Sep 17 00:00:00 2001 From: Gordon Williams Date: Thu, 28 Oct 2021 12:14:02 +0100 Subject: [PATCH 282/392] support for 'supports:["DEVICEID"]` for files in apps, merge launchb2 and launch --- README.md | 3 ++ apps.json | 26 +++-------- apps/launch/ChangeLog | 3 +- apps/launch/{app.js => app-bangle1.js} | 0 .../app.js => launch/app-bangle2.js} | 0 apps/launchb2/ChangeLog | 4 -- apps/launchb2/app.png | Bin 899 -> 0 bytes bin/firmwaremaker.js | 4 +- bin/firmwaremaker_c.js | 5 ++- bin/sanitycheck.js | 18 +++++--- bin/thumbnailer.js | 41 ++++++++++++++---- core | 2 +- 12 files changed, 63 insertions(+), 43 deletions(-) rename apps/launch/{app.js => app-bangle1.js} (100%) rename apps/{launchb2/app.js => launch/app-bangle2.js} (100%) delete mode 100644 apps/launchb2/ChangeLog delete mode 100644 apps/launchb2/app.png diff --git a/README.md b/README.md index d60d46fd3..531114a34 100644 --- a/README.md +++ b/README.md @@ -262,6 +262,9 @@ and which gives information about the app for the Launcher. // (eg it's evaluated as JS) "noOverwrite":true // if supplied, this file will not be overwritten if it // already exists + "supports": ["BANGLEJS2"]// if supplied, this file will ONLY be uploaded to the device + // types named in the array. This allows different versions of + // the app to be uploaded for different platforms }, ] "data": [ // list of files the app writes to diff --git a/apps.json b/apps.json index d1ebe5249..7593a4b63 100644 --- a/apps.json +++ b/apps.json @@ -94,31 +94,17 @@ }, { "id": "launch", - "name": "Launcher (Bangle.js 1 default)", + "name": "Launcher", "shortName": "Launcher", - "version": "0.07", - "description": "This is needed by Bangle.js 1.0 to display a menu allowing you to choose your own applications. You can replace this with a customised launcher.", + "version": "0.08", + "description": "This is needed to display a menu allowing you to choose your own applications. You can replace this with a customised launcher.", "icon": "app.png", "type": "launch", "tags": "tool,system,launcher", "supports": ["BANGLEJS","BANGLEJS2"], "storage": [ - {"name":"launch.app.js","url":"app.js"} - ], - "sortorder": -10 - }, - { - "id": "launchb2", - "name": "Launcher (Bangle.js 2 default)", - "shortName": "Launcher", - "version": "0.04", - "description": "This is needed by Bangle.js 2.0 to display a menu allowing you to choose your own applications.", - "icon": "app.png", - "type": "launch", - "tags": "tool,system,launcher", - "supports": ["BANGLEJS2"], - "storage": [ - {"name":"launchb2.app.js","url":"app.js"} + {"name":"launch.app.js","url":"app-bangle1.js","supports":["BANGLEJS"]}, + {"name":"launch.app.js","url":"app-bangle2.js","supports":["BANGLEJS2"]} ], "sortorder": -10 }, @@ -4114,7 +4100,7 @@ "description": "A touch based stop watch for Bangle JS 2", "icon": "stopwatch.png", "screenshots": [{"url":"screenshot1.png"},{"url":"screenshot2.png"},{"url":"screenshot3.png"}], - "tags": "tools,app,b2", + "tags": "tools,app", "supports": ["BANGLEJS2"], "readme": "README.md", "storage": [ diff --git a/apps/launch/ChangeLog b/apps/launch/ChangeLog index 09569d8da..bd8a9bd03 100644 --- a/apps/launch/ChangeLog +++ b/apps/launch/ChangeLog @@ -4,4 +4,5 @@ 0.04: Now displays widgets 0.05: Use g.theme for colours 0.06: Use Bangle.setUI for buttons -0.07: Theme colours fix \ No newline at end of file +0.07: Theme colours fix +0.08: Merge Bangle.js 1 and 2 launchers diff --git a/apps/launch/app.js b/apps/launch/app-bangle1.js similarity index 100% rename from apps/launch/app.js rename to apps/launch/app-bangle1.js diff --git a/apps/launchb2/app.js b/apps/launch/app-bangle2.js similarity index 100% rename from apps/launchb2/app.js rename to apps/launch/app-bangle2.js diff --git a/apps/launchb2/ChangeLog b/apps/launchb2/ChangeLog deleted file mode 100644 index a84587b7e..000000000 --- a/apps/launchb2/ChangeLog +++ /dev/null @@ -1,4 +0,0 @@ -0.01: New App! -0.02: Fix occasional missed image when scrolling up -0.03: Text wrapping, better font -0.04: Reduce code duplication and use new E.showScroller diff --git a/apps/launchb2/app.png b/apps/launchb2/app.png deleted file mode 100644 index 8b4e6caa2fe4720a32f492bd00c6e68751fabfbc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 899 zcmV-}1AP36P)EZi8a;XNfX0KK)EG5t2&jmXSR!CR3JOvSF^w(VT@Oq6O4&}^ElAua zX|l63`{wtXcjoO3*x1-CYovub^cOBY?cfcO1>;+VoWa;>Pk;!SG_WW*Es5gZ1-`R@ z4t>oKYJ)f#xYia)IV)#&xZ*BHYck+F1K9eED0&f|F;Lm{VL;rb?(c)W{8d& zzrH4`vJJ?>K!fln4K4LjpAx19%+|UjgL{LF?3gt^suTXG8HN@KQv>tY{cLjA%Q)j? zIX0ma_G_?6n>drF(WulAaitj}A^+b$v5k$*zr})O^uogfX;+bphn_9#OZ}pdk^!&c zqrUVgUd3m%o}@|o!cmyJiIaP-*BlK-1F7-kNoN^X5h5L~tnN`_& zI3(jUhvcNZU>jbg3|-gg8hTDln@m+>N(dP^vh_T*8x8>Qb*ytvU&Y#;lz3_Z*tBLl zEghFFmS~QUfhzCr>E}|Fxr&yKOBoXz4vqjF zlzKwtw{idZM95W(Tbb#rO0Wkqaj6$F@MWZp>h=2o=nr;LTzCQiH!$$4i=w<5W87%F zs6NXOGI0OH6?#VB0k9%#HO2Wg(|z6FTj}`r1kmXWJk5wmGlUFGsuA7}JOW^&y9!O$ zkR=&S*XaHEp1^o_Mn#&D^ig6k6`9rJMEHEc@fMjg8GR Z=Px>?AD_-bQjY)t002ovPDHLkV1j2qp7Q_z diff --git a/bin/firmwaremaker.js b/bin/firmwaremaker.js index 4e22dd168..4bc2a70b2 100755 --- a/bin/firmwaremaker.js +++ b/bin/firmwaremaker.js @@ -12,6 +12,7 @@ var ROOTDIR = path.join(__dirname, '..'); var APPDIR = ROOTDIR+'/apps'; var APPJSON = ROOTDIR+'/apps.json'; var OUTFILE = ROOTDIR+'/firmware.js'; +var DEVICE = "BANGLEJS"; var APPS = [ // IDs of apps to install "boot","launch","mclock","setting", "about","alarm","widbat","widbt","welcome" @@ -61,7 +62,8 @@ Promise.all(APPS.map(appid => { if (app===undefined) throw new Error(`App ${appid} not found`); return AppInfo.getFiles(app, { fileGetter : fileGetter, - settings : SETTINGS + settings : SETTINGS, + device : { id : DEVICE } }).then(files => { appfiles = appfiles.concat(files); }); diff --git a/bin/firmwaremaker_c.js b/bin/firmwaremaker_c.js index 15092ced7..7fb842755 100755 --- a/bin/firmwaremaker_c.js +++ b/bin/firmwaremaker_c.js @@ -29,7 +29,7 @@ if (DEVICE=="BANGLEJS") { } else if (DEVICE=="BANGLEJS2") { var OUTFILE = path.join(ROOTDIR, '../Espruino/libs/banglejs/banglejs2_storage_default.c'); var APPS = [ // IDs of apps to install - "boot","launchb2","s7clk","setting", + "boot","launch","s7clk","setting", "about","alarm","widlock","widbat","widbt","widid" ]; } else { @@ -132,7 +132,8 @@ Promise.all(APPS.map(appid => { if (app===undefined) throw new Error(`App ${appid} not found`); return AppInfo.getFiles(app, { fileGetter : fileGetter, - settings : SETTINGS + settings : SETTINGS, + device : { id : DEVICE } }).then(files => { appfiles = appfiles.concat(files); }); diff --git a/bin/sanitycheck.js b/bin/sanitycheck.js index dbce9c855..ef795871d 100755 --- a/bin/sanitycheck.js +++ b/bin/sanitycheck.js @@ -50,12 +50,12 @@ try{ } const APP_KEYS = [ - 'id', 'name', 'shortName', 'version', 'icon', 'description', 'tags', 'type', + 'id', 'name', 'shortName', 'version', 'icon', 'screenshots', 'description', 'tags', 'type', 'sortorder', 'readme', 'custom', 'customConnect', 'interface', 'storage', 'data', - 'supports', 'allow_emulator', + 'supports', 'allow_emulator', 'dependencies' ]; -const STORAGE_KEYS = ['name', 'url', 'content', 'evaluate', 'noOverwite']; +const STORAGE_KEYS = ['name', 'url', 'content', 'evaluate', 'noOverwite', 'supports']; const DATA_KEYS = ['name', 'wildcard', 'storageFile', 'url', 'content', 'evaluate']; const FORBIDDEN_FILE_NAME_CHARS = /[,;]/; // used as separators in appid.info const VALID_DUPLICATES = [ '.tfmodel', '.tfnames' ]; @@ -107,6 +107,13 @@ apps.forEach((app,appIdx) => { if (!app.description) ERROR(`App ${app.id} has no description`); if (!app.icon) ERROR(`App ${app.id} has no icon`); if (!fs.existsSync(appDir+app.icon)) ERROR(`App ${app.id} icon doesn't exist`); + if (app.screenshots) { + if (!Array.isArray(app.screenshots)) ERROR(`App ${app.id} screenshots is not an array`); + app.screenshots.forEach(screenshot => { + if (!fs.existsSync(appDir+screenshot.url)) + ERROR(`App ${app.id} screenshot file ${screenshot.url} not found`); + }); + } if (app.readme && !fs.existsSync(appDir+app.readme)) ERROR(`App ${app.id} README file doesn't exist`); if (app.custom && !fs.existsSync(appDir+app.custom)) ERROR(`App ${app.id} custom HTML doesn't exist`); if (app.customConnect && !app.custom) ERROR(`App ${app.id} has customConnect but no customn HTML`); @@ -128,13 +135,14 @@ apps.forEach((app,appIdx) => { if (char) ERROR(`App ${app.id} storage file ${file.name} contains invalid character "${char[0]}"`) if (fileNames.includes(file.name)) ERROR(`App ${app.id} file ${file.name} is a duplicate`); - fileNames.push(file.name); + if (!file.supports) fileNames.push(file.name); // assume that there aren't duplicates if 'supports' is set allFiles.push({app: app.id, file: file.name}); if (file.url) if (!fs.existsSync(appDir+file.url)) ERROR(`App ${app.id} file ${file.url} doesn't exist`); if (!file.url && !file.content && !app.custom) ERROR(`App ${app.id} file ${file.name} has no contents`); var fileContents = ""; if (file.content) fileContents = file.content; if (file.url) fileContents = fs.readFileSync(appDir+file.url).toString(); + if (file.supports && !Array.isArray(file.supports)) ERROR(`App ${app.id} file ${file.name} supports field is not an array`); if (file.evaluate) { try { acorn.parse("("+fileContents+")"); @@ -165,7 +173,7 @@ apps.forEach((app,appIdx) => { } } for (const key in file) { - if (!STORAGE_KEYS.includes(key)) ERROR(`App ${app.id}'s ${file.name} has unknown key ${key}`); + if (!STORAGE_KEYS.includes(key)) ERROR(`App ${app.id} file ${file.name} has unknown key ${key}`); } }); let dataNames = []; diff --git a/bin/thumbnailer.js b/bin/thumbnailer.js index db658b01e..b6862741a 100755 --- a/bin/thumbnailer.js +++ b/bin/thumbnailer.js @@ -1,6 +1,11 @@ #!/usr/bin/node +/* +var EMULATOR = "banglejs2"; +var DEVICEID = "BANGLEJS2"; +*/ var EMULATOR = "banglejs1"; +var DEVICEID = "BANGLEJS"; var singleAppId; @@ -40,6 +45,10 @@ var apps = JSON.parse(require("fs").readFileSync(__dirname+"/../apps.json")); /* we factory reset ONCE, get this, then we can use it to reset state quickly for each new app */ var factoryFlashMemory = new Uint8Array(FLASH_SIZE); +// Log of messages from app +var appLog = ""; +// List of apps that errored +var erroredApps = []; jsRXCallback = function() {}; jsUpdateGfx = function() {}; @@ -49,6 +58,10 @@ function ERROR(s) { process.exit(1); } +function onConsoleOutput(txt) { + appLog += txt + "\n"; +} + function getThumbnail(appId, imageFn) { console.log("Thumbnail for "+appId); var app = apps.find(a=>a.id==appId); @@ -61,7 +74,10 @@ function getThumbnail(appId, imageFn) { fileGetter:function(url) { console.log(__dirname+"/"+url); return Promise.resolve(require("fs").readFileSync(__dirname+"/../"+url).toString("binary")); - }, settings : SETTINGS}).then(files => { + }, + settings : SETTINGS, + device : { id : DEVICEID } + }).then(files => { console.log("AppInfo returned");//, files); flashMemory.set(factoryFlashMemory); jsTransmitString("reset()\n"); @@ -69,6 +85,7 @@ function getThumbnail(appId, imageFn) { jsTransmitString("g.clear()\n"); var command = files.map(f=>f.cmd).join("\n")+"\n"; command += `load("${appId}.app.js")\n`; + appLog = ""; jsTransmitString(command); console.log("Done."); jsStopIdle(); @@ -79,6 +96,9 @@ function getThumbnail(appId, imageFn) { var firstPixel = rgba32[0]; var blankImage = rgba32.every(col=>col==firstPixel) + if (appLog.indexOf("Uncaught")>=0) + erroredApps.push( { id : app.id, log : appLog } ); + if (!blankImage) { var Jimp = require("jimp"); let image = new Jimp(GFX_WIDTH, GFX_HEIGHT, function (err, image) { @@ -113,20 +133,22 @@ setTimeout(function() { console.log("Ready!"); if (singleAppId) { - getThumbnail(singleAppId, "screenshots/"+singleAppId+".png") - + getThumbnail(singleAppId, "screenshots/"+singleAppId+"-"+EMULATOR+".png"); return; } - var appList = apps.filter(app => (!app.type || app.type=="clock") && !app.custom).map(app=>app.id); - // TODO: Work out about Bangle.js 1 or 2 + var appList = apps.filter(app => (!app.type || app.type=="clock") && !app.custom); + appList = appList.filter(app => !app.screenshots && app.supports.includes(DEVICEID)); + var promise = Promise.resolve(); - appList.forEach(appId => { + appList.forEach(app => { promise = promise.then(() => { - return getThumbnail(appId, "screenshots/"+appId+".png").then(ok => { + var imageFile = "screenshots/"+app.id+"-"+EMULATOR+".png"; + return getThumbnail(app.id, imageFile).then(ok => { screenshots.push({ - id : appId, - url : "screenshots/"+appId+".png" + id : app.id, + url : imageFile, + version: app.version }); }); }); @@ -135,6 +157,7 @@ setTimeout(function() { promise.then(function() { console.log("Complete!"); require("fs").writeFileSync("screenshots.json", JSON.stringify(screenshots,null,2)); + console.log("Errored Apps", erroredApps); }); diff --git a/core b/core index a7d82825d..70b49d8db 160000 --- a/core +++ b/core @@ -1 +1 @@ -Subproject commit a7d82825d3a43e1da7919591ed6fa776f1f0545a +Subproject commit 70b49d8dbd2afa76f4485aadf679dc75e0a8b4ac From cbf69eeaa2adfac6ec5996cc6e4319be349fae92 Mon Sep 17 00:00:00 2001 From: Gordon Williams Date: Thu, 28 Oct 2021 12:14:14 +0100 Subject: [PATCH 283/392] fix lint errors --- apps/boot/bootupdate.js | 2 +- apps/gpstouch/gpstouch.app.js | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/apps/boot/bootupdate.js b/apps/boot/bootupdate.js index dfd745de2..8ad61f763 100644 --- a/apps/boot/bootupdate.js +++ b/apps/boot/bootupdate.js @@ -182,7 +182,7 @@ if (!g.wrapString) { // added in 2v11 - this is a limited functionality polyfill } return lines; };\n`; -}; +} delete Bangle.appRect; // deleting stops us getting confused by our own decl. builtins can't be deleted if (!Bangle.appRect) { // added in 2v11 - polyfill for older firmwares boot += `Bangle.appRect = ((y,w,h)=>({x:0,y:0,w:w,h:h,x2:w-1,y2:h-1}))(g.getWidth(),g.getHeight()); diff --git a/apps/gpstouch/gpstouch.app.js b/apps/gpstouch/gpstouch.app.js index 0425cdc23..4e49dd1e5 100644 --- a/apps/gpstouch/gpstouch.app.js +++ b/apps/gpstouch/gpstouch.app.js @@ -24,7 +24,7 @@ function resetLastFix() { function processFix(fix) { last_fix.time = fix.time; log_debug(fix); - + if (fix.fix) { if (!last_fix.fix) { // we dont need to suppress this in quiet mode as it is user initiated @@ -78,7 +78,7 @@ function drawInfo() { g.setColor("#fff"); else g.setColor("#000"); - + g.drawString((infoData[infoMode].calc()), w/2, (3*(h-24)/4) + 24); } } @@ -196,7 +196,7 @@ function prevInfo() { } Bangle.on('swipe', dir => { - if (dir == 1) prevInfo() else nextInfo(); + if (dir == 1) prevInfo(); else nextInfo(); draw(); }); From 3c5de5ff701ebd71af4fffa0838b29af7b858e6b Mon Sep 17 00:00:00 2001 From: Victor Serain Date: Thu, 28 Oct 2021 14:45:29 +0200 Subject: [PATCH 284/392] fix: add semicolumn --- apps/gpstouch/gpstouch.app.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/gpstouch/gpstouch.app.js b/apps/gpstouch/gpstouch.app.js index 0425cdc23..cac19cdef 100644 --- a/apps/gpstouch/gpstouch.app.js +++ b/apps/gpstouch/gpstouch.app.js @@ -196,7 +196,7 @@ function prevInfo() { } Bangle.on('swipe', dir => { - if (dir == 1) prevInfo() else nextInfo(); + if (dir == 1) prevInfo(); else nextInfo(); draw(); }); From 2e252814a85432e394088f10a6913ba49a6545f8 Mon Sep 17 00:00:00 2001 From: Gordon Williams Date: Thu, 28 Oct 2021 14:23:29 +0100 Subject: [PATCH 285/392] Add first draft of more flexible 'recorder' app for GPS/etc recording --- apps.json | 21 +- apps/recorder/ChangeLog | 1 + apps/recorder/README.md | 27 +++ apps/recorder/app-icon.js | 1 + apps/recorder/app-settings.json | 6 + apps/recorder/app.js | 406 ++++++++++++++++++++++++++++++++ apps/recorder/app.png | Bin 0 -> 1530 bytes apps/recorder/interface.html | 179 ++++++++++++++ apps/recorder/settings.js | 4 + apps/recorder/widget.js | 222 +++++++++++++++++ 10 files changed, 866 insertions(+), 1 deletion(-) create mode 100644 apps/recorder/ChangeLog create mode 100644 apps/recorder/README.md create mode 100644 apps/recorder/app-icon.js create mode 100644 apps/recorder/app-settings.json create mode 100644 apps/recorder/app.js create mode 100644 apps/recorder/app.png create mode 100644 apps/recorder/interface.html create mode 100644 apps/recorder/settings.js create mode 100644 apps/recorder/widget.js diff --git a/apps.json b/apps.json index 7593a4b63..8c7db5bda 100644 --- a/apps.json +++ b/apps.json @@ -631,6 +631,25 @@ ], "data": [{"name":"gpsrec.json"},{"wildcard":".gpsrc?","storageFile":true}] }, + { + "id": "recorder", + "name": "Recorder (BETA)", + "shortName": "Recorder", + "version": "0.01", + "description": "Record GPS position, heart rate and more in the background, then download to your PC.", + "icon": "app.png", + "tags": "tool,outdoors,gps,widget", + "supports": ["BANGLEJS","BANGLEJS2"], + "readme": "README.md", + "interface": "interface.html", + "storage": [ + {"name":"recorder.app.js","url":"app.js"}, + {"name":"recorder.img","url":"app-icon.js","evaluate":true}, + {"name":"recorder.wid.js","url":"widget.js"}, + {"name":"recorder.settings.js","url":"settings.js"} + ], + "data": [{"name":"recorder.json"},{"wildcard":"recorder.log?.csv","storageFile":true}] + }, { "id": "gpsnav", "name": "GPS Navigation", @@ -1352,7 +1371,7 @@ "id": "assistedgps", "name": "Assisted GPS Update (AGPS)", "version": "0.01", - "description": "Downloads assisted GPS (AGPS) data to Bangle.js for faster GPS startup and more accurate fixes. **No app will be installed**, this just uploads new data to the GPS chip.", + "description": "Downloads assisted GPS (AGPS) data to Bangle.js 1 for faster GPS startup and more accurate fixes. **No app will be installed**, this just uploads new data to the GPS chip.", "icon": "app.png", "type": "RAM", "tags": "tool,outdoors,agps", diff --git a/apps/recorder/ChangeLog b/apps/recorder/ChangeLog new file mode 100644 index 000000000..5560f00bc --- /dev/null +++ b/apps/recorder/ChangeLog @@ -0,0 +1 @@ +0.01: New App! diff --git a/apps/recorder/README.md b/apps/recorder/README.md new file mode 100644 index 000000000..ba53a99f2 --- /dev/null +++ b/apps/recorder/README.md @@ -0,0 +1,27 @@ +# Recorder + +![icon](app.png) + +This app allows you to record data every few seconds - it can run in background. + +Usually you'd record GPS (but this is not required). The data can later be exported as CSV, KML or GPX files via the Download button in the Bangle.js App Store entry for Recorder. + +## Usage + +First run the `Recorder` app, here you can configure what you want to record, how often, +and you can start and stop recordings. + +You can record + +* **Time** The current time +* **GPS** GPS Latitude, Longitude and Altitude +* **Steps** Steps counted by the step counter +* **HR** Heart rate + +**Note:** It is possible for other apps to record information using this app +as well. They need to define a `foobar.recorder.js` file - see the `getRecorders` +function in `widget.js` for more information. + +## Tips + +When recording GPS, it usually takes several minutes for the watch to get a [GPS fix](https://en.wikipedia.org/wiki/Time_to_first_fix). There is a grey satellite symbol, which you will see turn red when you get an actual GPS Fix. You can [upload assistant files](https://banglejs.com/apps/#assisted%20gps%20update) to speed up the time spent on getting a GPS fix. diff --git a/apps/recorder/app-icon.js b/apps/recorder/app-icon.js new file mode 100644 index 000000000..4181d2b12 --- /dev/null +++ b/apps/recorder/app-icon.js @@ -0,0 +1 @@ +require("heatshrink").decompress(atob("mEw4cA///vPWvN8kvkuu14/s3OMjN0Kf4AQ2vaCB0Ftu3oARfgdt23AGsO2NaHQT+MB2XJCJ1MyXJsAQMgUky3JkARMjIRBpIRNvMl2VJlAQLldvtmSpN+CJcbt2ECJsBregggRBv4RRdJfbgEkyVLq3ACJ1Jq3dCBMKBYIRBpFW7d0CJUDsgRBhdbtvQCJHYgUTm1IgEttuwCI8GCIMSpMwA4MVEZPoCIUkaxj7BoQRPiQRCwARNpARByARNpMJCJyNBgKjBCJy1CCJ79BfZYNDCJoxBBoQnCABBVFN4IRJPIoRLV4sCpMgCJTbECJYKFCJUJBQsJfpoA/A")) diff --git a/apps/recorder/app-settings.json b/apps/recorder/app-settings.json new file mode 100644 index 000000000..4a3117a17 --- /dev/null +++ b/apps/recorder/app-settings.json @@ -0,0 +1,6 @@ +{ + "recording":false, + "file":"record.log0.csv", + "period":10, + "record" : ["gps"] +} diff --git a/apps/recorder/app.js b/apps/recorder/app.js new file mode 100644 index 000000000..9c8380c07 --- /dev/null +++ b/apps/recorder/app.js @@ -0,0 +1,406 @@ +Bangle.loadWidgets(); +Bangle.drawWidgets(); + +var settings; + +var osm; +try { // if it's installed, use the OpenStreetMap module + osm = require("openstmap"); +} catch (e) {} + +function loadSettings() { + settings = require("Storage").readJSON("recorder.json",1)||{}; + var changed = false; + if (!settings.file) { + changed = true; + settings.file = "record.log0.csv"; + } + if (!Array.isArray(settings.record)) { + settings.record = ["gps"]; + changed = true; + } + if (changed) + require("Storage").writeJSON("recorder.json", settings); +} +loadSettings(); + +function updateSettings() { + require("Storage").writeJSON("recorder.json", settings); + if (WIDGETS["recorder"]) + WIDGETS["recorder"].reload(); +} + +function getTrackNumber(filename) { + return parseInt(filename.match(/^record\.log(.*)\.csv$/)[1]||0); +} + +function showMainMenu() { + function boolFormat(v) { return v?"Yes":"No"; } + function menuRecord(id) { + return { + value: settings.record.includes(id), + format: boolFormat, + onchange: v => { + settings.recording = false; // stop recording if we change anything + settings.record = settings.record.filter(r=>r!=id); + if (v) settings.record.push(id); + updateSettings(); + } + }; + } + const mainmenu = { + '': { 'title': 'GPS Record' }, + '< Back': ()=>{load();}, + 'RECORD': { + value: !!settings.recording, + format: v=>v?"On":"Off", + onchange: v => { + setTimeout(function() { + E.showMenu(); + WIDGETS["recorder"].setRecording(v).then(function() { + print("Complete"); + loadSettings(); + print(settings.recording); + showMainMenu(); + }); + }, 1); + } + }, + 'File #': { + value: getTrackNumber(settings.file), + min: 0, + max: 99, + step: 1, + onchange: v => { + settings.recording = false; // stop recording if we change anything + settings.file = "record.log"+v+".csv"; + updateSettings(); + } + }, + 'View Tracks': ()=>{viewTracks();}, + 'Time Period': { + value: settings.period||10, + min: 1, + max: 120, + step: 1, + format: v=>v+"s", + onchange: v => { + settings.recording = false; // stop recording if we change anything + settings.period = v; + updateSettings(); + } + } + }; + var recorders = WIDGETS["recorder"].getRecorders(); + Object.keys(recorders).forEach(id=>{ + mainmenu["Log "+recorders[id]().name] = menuRecord(id); + }); + return E.showMenu(mainmenu); +} + + + +function viewTracks() { + const menu = { + '': { 'title': 'GPS Tracks' } + }; + var found = false; + require("Storage").list(/^record\.log.*\.csv$/,{sf:true}).forEach(filename=>{ + found = true; + menu["Track "+getTrackNumber(filename)] = ()=>viewTrack(filename,false); + }); + if (!found) + menu["No Tracks found"] = function(){}; + menu['< Back'] = () => { showMainMenu(); }; + return E.showMenu(menu); +} + +function getTrackInfo(filename) { + "ram" + var minLat = 90; + var maxLat = -90; + var minLong = 180; + var maxLong = -180; + var starttime, duration=0; + var f = require("Storage").open(filename,"r"); + if (f===undefined) return; + var l = f.readLine(f); + var fields, timeIdx, latIdx, lonIdx; + var nl = 0, c, n; + if (l!==undefined) { + fields = l.trim().split(","); + timeIdx = fields.indexOf("Time"); + latIdx = fields.indexOf("Latitude"); + lonIdx = fields.indexOf("Longitude"); + l = f.readLine(f); + } + if (l!==undefined) { + c = l.split(","); + starttime = parseInt(c[timeIdx]); + } + // pushed this loop together to try and bump loading speed a little + while(l!==undefined) { + ++nl;c=l.split(","); + n = +c[latIdx];if(n>maxLat)maxLat=n;if(nmaxLong)maxLong=n;if(nylen ? screenSize/xlen : screenSize/ylen; + return { + fn : getTrackNumber(filename), + fields : fields, + filename : filename, + time : new Date(starttime*1000), + records : nl, + minLat : minLat, maxLat : maxLat, + minLong : minLong, maxLong : maxLong, + lat : (minLat+maxLat)/2, lon : (minLong+maxLong)/2, + lfactor : lfactor, + scale : scale, + duration : Math.round(duration) + }; +} + +function asTime(v){ + var mins = Math.floor(v/60); + var secs = v-mins*60; + return ""+mins.toString()+"m "+secs.toString()+"s"; +} + +function viewTrack(filename, info) { + if (!info) { + E.showMessage("Loading...","GPS Track "+getTrackNumber(filename)); + info = getTrackInfo(filename); + } + console.log(info); + const menu = { + '': { 'title': 'GPS Track '+info.fn } + }; + if (info.time) + menu[info.time.toISOString().substr(0,16).replace("T"," ")] = function(){}; + menu["Duration"] = { value : asTime(info.duration)}; + menu["Records"] = { value : ""+info.records }; + if (info.fields.includes("Latitude")) + menu['Plot Map'] = function() { + info.qOSTM = false; + plotTrack(info); + }; + if (osm && info.fields.includes("Latitude")) + menu['Plot OpenStMap'] = function() { + info.qOSTM = true; + plotTrack(info); + } + if (info.fields.includes("Altitude")) + menu['Plot Alt.'] = function() { + plotGraph(info, "Altitude"); + }; + menu['Plot Speed'] = function() { + plotGraph(info, "Speed"); + }; + // TODO: steps, heart rate? + menu['Erase'] = function() { + E.showPrompt("Delete Track?").then(function(v) { + if (v) { + settings.recording = false; + updateSettings(); + var f = require("Storage").open(filename,"r"); + f.erase(); + viewTracks(); + } else + viewTrack(n, info); + }); + }; + menu['< Back'] = () => { viewTracks(); }; + return E.showMenu(menu); +} + +function plotTrack(info) { + "ram" + + function distance(lat1,long1,lat2,long2) { "ram" + var x = (long1-long2) * Math.cos((lat1+lat2)*Math.PI/360); + var y = lat2 - lat1; + return Math.sqrt(x*x + y*y) * 6371000 * Math.PI / 180; + } + + // Function to convert lat/lon to XY + var getMapXY; + if (info.qOSTM) { + getMapXY = osm.latLonToXY.bind(osm); + } else { + getMapXY = function(lat, lon) { "ram" + return {x:cx + Math.round((long - info.lon)*info.lfactor*info.scale), + y:cy + Math.round((info.lat - lat)*info.scale)}; + }; + } + + E.showMenu(); // remove menu + E.showMessage("Drawing...","GPS Track "+info.fn); + g.flip(); // on buffered screens, draw a not saying we're busy + g.clear(1); + var s = require("Storage"); + var cx = g.getWidth()/2; + var cy = 24 + (g.getHeight()-24)/2; + g.setColor(1,0.5,0.5); + g.setFont("Vector",16); + g.drawString("Track"+info.fn.toString()+" - Loading",10,220); + g.setColor(0,0,0); + g.fillRect(0,220,239,239); + if (!info.qOSTM) { + g.setColor(1, 0, 0); + g.fillRect(9,80,11,120); + g.fillPoly([9,60,19,80,0,80]); + g.setColor(1,1,1); + g.drawString("N",2,40); + g.setColor(1,1,1); + } else { + osm.lat = info.lat; + osm.lon = info.lon; + osm.draw(); + g.setColor(0, 0, 0); + } + var latIdx = info.fields.indexOf("Latitude"); + var lonIdx = info.fields.indexOf("Longitude"); + g.drawString(asTime(info.duration),10,220); + var f = require("Storage").open(info.filename,"r"); + if (f===undefined) return; + var l = f.readLine(f); + l = f.readLine(f); // skip headers + var ox=0; + var oy=0; + var olat,olong,dist=0; + var i=0; + var c = l.split(","); + var lat = +c[latIdx]; + var long = +c[lonIdx]; + var mp = getMapXY(lat, long); + g.moveTo(mp.x,mp.y); + g.setColor(0,1,0); + g.fillCircle(mp.x,mp.y,5); + if (info.qOSTM) g.setColor(1,0,0.55); + else g.setColor(1,1,1); + l = f.readLine(f); + while(l!==undefined) { + c = l.split(","); + lat = +c[latIdx]; + long = +c[lonIdx]; + mp = getMapXY(lat, long); + g.lineTo(mp.x,mp.y); + if (info.qOSTM) g.fillCircle(mp.x,mp.y,2); // make the track more visible + var d = distance(olat,olong,lat,long); + if (!isNaN(d)) dist+=d; + olat = lat; + olong = long; + ox = mp.x; + oy = mp.y; + l = f.readLine(f); + } + g.setColor(1,0,0); + g.fillCircle(ox,oy,5); + if (info.qOSTM) g.setColor(0, 0, 0); + else g.setColor(1,1,1); + g.drawString(require("locale").distance(dist),120,220); + g.setFont("6x8",2); + g.setFontAlign(0,0,3); + g.drawString("Back",230,200); + setWatch(function() { + viewTrack(info.fn, info); + }, global.BTN3||BTN1); + Bangle.drawWidgets(); + g.flip(); +} + +function plotGraph(info, style) { + "ram" + E.showMenu(); // remove menu + E.showMessage("Calculating...","GPS Track "+info.fn); + var filename = info.filename; + var infn = new Float32Array(80); + var infc = new Uint16Array(80); + var title; + var lt = 0; // last time + var tn = 0; // count for each time period + var strt, dur = info.duration; + var f = require("Storage").open(filename,"r"); + if (f===undefined) return; + var l = f.readLine(f); + l = f.readLine(f); // skip headers + var nl = 0, c, i; + var timeIdx = info.fields.indexOf("Time"); + if (l!==undefined) { + c = l.split(","); + strt = c[timeIdx]; + } + if (style=="Altitude") { + title = "Altitude (m)"; + var altIdx = info.fields.indexOf("Altitude"); + while(l!==undefined) { + ++nl;c=l.split(","); + i = Math.round(80*(c[timeIdx] - strt)/dur); + infn[i]+=+c[altIdx]; + infc[i]++; + l = f.readLine(f); + } + } else if (style=="Speed") { + title = "Speed (m/s)"; + var latIdx = info.fields.indexOf("Latitude"); + var lonIdx = info.fields.indexOf("Longitude"); + var p,lp = Bangle.project({lat:c[1],lon:c[2]}); + var t,dx,dy,d,lt = c[timeIdx]; + while(l!==undefined) { + ++nl;c=l.split(","); + t = c[timeIdx]; + i = Math.round(80*(t - strt)/dur); + p = Bangle.project({lat:c[latIdx],lon:c[lonIdx]}); + dx = p.x-lp.x; + dy = p.y-lp.y; + d = Math.sqrt(dx*dx+dy*dy); + if (t!=lt) { + infn[i]+=d / (t-lt); // speed + infc[i]++; + } + lp = p; + lt = t; + l = f.readLine(f); + } + } else throw new Error("Unknown type "+style); + var min=100000,max=-100000; + for (var i=0;i0) infn[i]/=infc[i]; + var n = infn[i]; + if (n>max) max=n; + if (n 8) { + grid*=2; + } + // draw + g.clear(1).setFont("6x8",1); + var r = require("graph").drawLine(g, infn, { + x:4,y:24, + width: g.getWidth()-24, + height: g.getHeight()-(24+8), + axes : true, + gridy : grid, + gridx : 50, + title: title, + xlabel : x=>Math.round(x*dur/(60*infn.length))+" min" // minutes + }); + g.setFont("6x8",2); + g.setFontAlign(0,0,3); + g.drawString("Back",230,200); + setWatch(function() { + viewTrack(info.filename, info); + }, global.BTN3||BTN1); + g.flip(); +} + +showMainMenu(); diff --git a/apps/recorder/app.png b/apps/recorder/app.png new file mode 100644 index 0000000000000000000000000000000000000000..036f5d132181624c52b034f07732d39a958903fa GIT binary patch literal 1530 zcmV*0sE5goeq8BC!bd2RBEJ`$A<#X(ZKv9FiT; z;*uCW9uG-1z*)G#XmK+iJsuB9HDGbtcSno!F6%C%G?KpxeYCJb^aaW#QF54h^C0iC z?n+;KsxsNSqx@eO{sNjj4VHs@}e3_BNyS3^mYDRek&q zdCnpMw^zxDbO|@u3@`#x<&Ng^t;?S_Qqycik-EByl;E{V|D2a+yGgUKStx)WHU$7c z4DeD$p%Hpo5?)4+)ofeVbuGL9FXV+a4*+BEH$s|UgE$)wytBPDQB5rg8Ss8sQ1-|` z^HDPiVUJ=ebz?kTK_`1KY`&~0@c3QZ6VZ$$ZUenF^S|=-`l=y`rYA#t;Uo`u2$)0{ zWgkn!O*U;rjvy$wE@WmU)NurH8Sv~Ycq`!XF9Qu-JJ64(_|I<4;f}59U^7A#DvKnD?%@Kw zsebsL!j{I$v%=?JlU9W_=~b9U7wr8XKUSc>-I3@v;PrN_BxUH~=gcO>U3%iQdXE@p z#>x{+X$%o;~@$c|Tp4ueS#+`hNkLR;XjnX6aJLW!3F20Pd(s0EnT% z;;?)K?F)eBH1ak{tjCr;XsuBuvdz0090V!_`i%Pg{eP)Q13+11R_IE7%zFi`&FNXo5A> z-j;L&Hka*0&>LK2b=zAV8@}&Q|@N<}sL>`8=#CQB5rg8z7>U5uw4N;^NwzoSZ)at^^F>Z#P2z zg|lZ?z#tMb(A3mWN(^CNE{f*QIx8=)k$^WM^Ayl0iRfyH+dyMuV?JcIPrGCipt!xh zE!uh6bMoH>P#=~|7i+E=m`rl zrGkhOJ{8fw8znLcgU&Vp_V74P78Mt7yhGmlh>-o<*)ws!fmL)HINEslClID+W5jU% z*YoEezf)fJ+<6TEyR3~d!rJ!sc9-5BwCFO>c=&KNBNq836|gz{xfK-^(tqXiob-Iy zlEh#R_InQK=^+wb1{lN3+G_$7#l$TsEPUbS-Q+)`Yh#C(dn28QBW*_XK$t7s*~7$QkMaOsS*q_7?VJ#EGjOp)hn2tz4!_Py$*r|KxPUI gJ*gXIlzWYT0cWfgM6O1!vj6}907*qoM6N<$f+S4TzyJUM literal 0 HcmV?d00001 diff --git a/apps/recorder/interface.html b/apps/recorder/interface.html new file mode 100644 index 000000000..2ae1c3e71 --- /dev/null +++ b/apps/recorder/interface.html @@ -0,0 +1,179 @@ + + + + + + THIS IS NOT CURRENTLY IMPLEMENTED +
+ + + + + diff --git a/apps/recorder/settings.js b/apps/recorder/settings.js new file mode 100644 index 000000000..2a9a7a0d8 --- /dev/null +++ b/apps/recorder/settings.js @@ -0,0 +1,4 @@ +(function(back) { + // just go right to our app - we need all the memory + load("record.app.js"); +})(); diff --git a/apps/recorder/widget.js b/apps/recorder/widget.js new file mode 100644 index 000000000..38b1d69d2 --- /dev/null +++ b/apps/recorder/widget.js @@ -0,0 +1,222 @@ +(() => { + var storageFile; // file for GPS track + var entriesWritten = 0; + var activeRecorders = []; + var writeInterval; + + function loadSettings() { + var settings = require("Storage").readJSON("recorder.json",1)||{}; + settings.period = settings.period||10; + if (!settings.file || !settings.file.startsWith("record.log")) + settings.recording = false; + return settings; + } + + function getRecorders() { + var recorders = { + gps:function() { + var lat = 0; + var lon = 0; + var alt = 0; + var samples = 0; + var hasFix = 0; + function onGPS(f) { + hasFix = f.fix; + if (!hasFix) return; + lat += fix.lat; + lon += fix.lon; + alt += fix.alt; + samples++; + } + return { + name : "GPS", + fields : ["Latitude","Longitude","Altitude"], + getValues : () => { + var r = ["","",""]; + if (samples) + r = [(lat/samples).toFixed(6),(lon/samples).toFixed(6),Math.round(alt/samples)]; + samples = 0; lat = 0; lon = 0; alt = 0; + return r; + }, + start : () => { + hasFix = false; + Bangle.on('GPS', onGPS); + Bangle.setGPSPower(1,"recorder"); + }, + stop : () => { + hasFix = false; + Bangle.removeListener('GPS', onGPS); + Bangle.setGPSPower(0,"recorder"); + }, + draw : (x,y) => g.setColor(hasFix?"#f00":"#888").drawImage(atob("DAyBAAACADgDuBOAeA4AzAHADgAAAA=="),x,y) + }; + }, + hrm:function() { + var bpm = 0, bpmConfidence = 0; + var hasBPM = false; + function onHRM(h) { + if (h.confidence >= bpmConfidence) { + bpmConfidence = h.confidence; + bpm = h.bpm; + if (bpmConfidence) hasBPM = true; + } + } + return { + name : "HR", + fields : ["Heartrate"], + getValues : () => { + var r = [bpmConfidence?bpm:""]; + bpm = 0; bpmConfidence = 0; + return r; + }, + start : () => { + hasBPM = false; + Bangle.on('HRM', onHRM); + Bangle.setHRMPower(1,"recorder"); + }, + stop : () => { + hasBPM = false; + Bangle.removeListener('HRM', onHRM); + Bangle.setHRMPower(0,"recorder"); + }, + draw : (x,y) => g.setColor(hasBPM?"#f00":"#888").drawImage(atob("DAyBAAAAAD/H/n/n/j/D/B+AYAAAAA=="),x,y) + }; + }, + steps:function() { + var lastSteps = 0; + return { + name : "Steps", + fields : ["Steps"], + getValues : () => { + var c = Bangle.getStepCount(), r=[c-lastSteps]; + lastSteps = c; + return r; + }, + start : () => { lastSteps = Bangle.getStepCount(); }, + stop : () => {}, + draw : (x,y) => g.reset().drawImage(atob("DAyBAAADDHnnnnnnnnnnjDmDnDnAAA=="),x,y) + }; + } + // TODO: recAltitude from pressure sensor + }; + /* eg. foobar.recorder.js + (function(recorders) { + recorders.foobar = { + name : "Foobar", + fields : ["foobar"], + getValues : () => [123], + start : () => {}, + stop : () => {}, + draw (x,y) => {} // draw 12x12px status image + } + }) + */ + require("Storage").list(/^.*\.recorder\.js$/).forEach(fn=>eval(fn)(recorders)); + return recorders; + } + + function writeLog() { + entriesWritten++; + WIDGETS["recorder"].draw(); + try { + var fields = [Math.round(getTime())]; + activeRecorders.forEach(recorder => fields.push.apply(fields,recorder.getValues())); + if (storageFile) storageFile.write(fields.join(",")+"\n"); + } catch(e) { + // If storage.write caused an error, disable + // GPS recording so we don't keep getting errors! + console.log("recorder: error", e); + var settings = loadSettings(); + settings.recording = false; + require("Storage").write("recorder.json", settings); + reload(); + } + } + + // Called by the GPS app to reload settings and decide what to do + function reload() { + var settings = loadSettings(); + if (writeInterval) clearInterval(writeInterval); + writeInterval = undefined; + + activeRecorders.forEach(rec => rec.stop()); + activeRecorders = []; + entriesWritten = 0; + + if (settings.recording) { + // set up recorders + var recorders = getRecorders(); // TODO: order?? + settings.record.forEach(r => { + var recorder = recorders[r]; + if (!recorder) { + console.log("Recorder for "+E.toJS(r)+"+not found"); + return; + } + var activeRecorder = recorder(); + activeRecorder.start(); + activeRecorders.push(activeRecorder); + // TODO: write field names? + }); + WIDGETS["recorder"].width = 15 + ((activeRecorders.length+1)>>1)*12; // 12px per recorder + // open/create file + if (require("Storage").list(settings.file).length) { // Append + storageFile = require("Storage").open(settings.file,"a"); + // TODO: what if loaded modules are different?? + } else { + storageFile = require("Storage").open(settings.file,"w"); + // New file - write headers + var fields = ["Time"]; + activeRecorders.forEach(recorder => fields.push.apply(fields,recorder.fields)); + storageFile.write(fields.join(",")+"\n"); + } + // start recording... + WIDGETS["recorder"].draw(); + writeInterval = setInterval(writeLog, settings.period*1000); + } else { + WIDGETS["recorder"].width = 0; + storageFile = undefined; + } + } + // add the widget + WIDGETS["recorder"]={area:"tl",width:0,draw:function() { + if (!writeInterval) return; + g.reset(); g.drawImage(atob("DRSBAAGAHgDwAwAAA8B/D/hvx38zzh4w8A+AbgMwGYDMDGBjAA=="),this.x+1,this.y+2); + activeRecorders.forEach((recorder,i)=>{ + recorder.draw(this.y+15+(i>>1)*12, this.y+(i&1)*12); + }); + },getRecorders:getRecorders,reload:function() { + reload(); + Bangle.drawWidgets(); // relayout all widgets + },setRecording:function(isOn) { + var settings = loadSettings(); + if (isOn && !settings.recording && require("Storage").list(settings.file).length) + return E.showPrompt("Overwrite\nLog 0?",{title:"Recorder",buttons:{Yes:"yes",No:"no"}}).then(selection=>{ + if (selection=="no") return false; // just cancel + if (selection=="yes") require("Storage").open(settings.file,"r").erase(); + // TODO: Add 'new file' option + return WIDGETS["recorder"].setRecording(1); + }); + settings.recording = isOn; + require("Storage").write("recorder.json", settings); + WIDGETS["recorder"].reload(); + return Promise.resolve(settings.recording); + }/*,plotTrack:function(m) { // m=instance of openstmap module + // if we're here, settings was already loaded + var f = require("Storage").open(settings.file,"r"); + var l = f.readLine(f); + if (l===undefined) return; + var c = l.split(","); + var mp = m.latLonToXY(+c[1], +c[2]); + g.moveTo(mp.x,mp.y); + l = f.readLine(f); + while(l!==undefined) { + c = l.split(","); + mp = m.latLonToXY(+c[1], +c[2]); + g.lineTo(mp.x,mp.y); + g.fillCircle(mp.x,mp.y,2); // make the track more visible + l = f.readLine(f); + } + }*/}; + // load settings, set correct widget width + reload(); +})() From 1b539fee8dbe16dbf9c2984898e1b4e19a25f784 Mon Sep 17 00:00:00 2001 From: Victor Serain Date: Thu, 28 Oct 2021 15:14:51 +0200 Subject: [PATCH 286/392] fix: app json --- apps.json | 7 ++++--- apps/gpstouch/gpstouch.app.js | 2 +- apps/swiperclocklaunch/icon.js | 1 + 3 files changed, 6 insertions(+), 4 deletions(-) create mode 100644 apps/swiperclocklaunch/icon.js diff --git a/apps.json b/apps.json index 440257e3c..a9a3b2f53 100644 --- a/apps.json +++ b/apps.json @@ -4108,11 +4108,12 @@ "version": "0.01", "description": "Navigate between clock and launcher with Swipe action", "icon": "swiperclocklaunch.png", - "type": "boot", - "tags": "system", + "type": "bootloader", + "tags": "tools, system", "supports": ["BANGLEJS", "BANGLEJS2"], "storage": [ - {"name":"swiperclocklaunch.boot.js","url":"boot.js"} + {"name":"swiperclocklaunch.boot.js","url":"boot.js"}, + {"name":"swiperclocklaunch.img","url":"icon.js","evaluate":true} ] } ] diff --git a/apps/gpstouch/gpstouch.app.js b/apps/gpstouch/gpstouch.app.js index 0425cdc23..cac19cdef 100644 --- a/apps/gpstouch/gpstouch.app.js +++ b/apps/gpstouch/gpstouch.app.js @@ -196,7 +196,7 @@ function prevInfo() { } Bangle.on('swipe', dir => { - if (dir == 1) prevInfo() else nextInfo(); + if (dir == 1) prevInfo(); else nextInfo(); draw(); }); diff --git a/apps/swiperclocklaunch/icon.js b/apps/swiperclocklaunch/icon.js new file mode 100644 index 000000000..c9089ce5c --- /dev/null +++ b/apps/swiperclocklaunch/icon.js @@ -0,0 +1 @@ +require("heatshrink").decompress(atob("lEoxH+AB8WAAwYQEaQrdEp4pWEyYoRC49kxGs2fX6+z1mIsgpUCQtAxAjCAA+zxFAFCAQFxAkJAAuIFBxMF1oeHgEABI+sFBomEORInJPgJ7EEyonLFAJQJBIh0IE5x6GE47CME5nXsgnGOojmME5p5HJyAnO6+IE5LEKE6JQEE4lkC5gnPUIh2SE6B4EAAesC5oAP1gnHTxpPDAQIAFeJQACH5wnP64nWAA3CBJB3WAA203fQBAp3IY4plENQ4HC2gABkjHNxAnX2nJBYeIEYf+AYVkE5oDGE4e0UgdkEwYnDUAITEACikBTwgnFxAnZFAJ2FE4lAJ7dAE4pQFY6yfCToYmDE4kW1jvX1geEE4YoF2YfFABRzD67EEEwqiGFCAmETg5QJPQYAMTQJ0GE5AoGshSPYQgmKFA72BFJWzxBzEExgoIKYOI1grC2esxBLGExwpKABolPFCwmSFKQlVFZoXP")) \ No newline at end of file From 577bcd39b1a25c41d725655943401717080ae04a Mon Sep 17 00:00:00 2001 From: Gordon Williams Date: Thu, 28 Oct 2021 14:28:30 +0100 Subject: [PATCH 287/392] Merge bangle 1 and 2 welcome screens --- apps.json | 27 ++++-------------- apps/welcome/ChangeLog | 1 + apps/welcome/{app.js => app-bangle1.js} | 8 ------ .../app.js => welcome/app-bangle2.js} | 8 ------ apps/welcome2/ChangeLog | 17 ----------- apps/welcome2/app-icon.js | 1 - apps/welcome2/app.png | Bin 1939 -> 0 bytes apps/welcome2/boot.js | 9 ------ apps/welcome2/settings.js | 18 ------------ bin/sanitycheck.js | 4 +-- 10 files changed, 8 insertions(+), 85 deletions(-) rename apps/welcome/{app.js => app-bangle1.js} (97%) rename apps/{welcome2/app.js => welcome/app-bangle2.js} (97%) delete mode 100644 apps/welcome2/ChangeLog delete mode 100644 apps/welcome2/app-icon.js delete mode 100644 apps/welcome2/app.png delete mode 100644 apps/welcome2/boot.js delete mode 100644 apps/welcome2/settings.js diff --git a/apps.json b/apps.json index 23769e299..2362c2e9d 100644 --- a/apps.json +++ b/apps.json @@ -169,17 +169,18 @@ }, { "id": "welcome", - "name": "Welcome (Bangle.js 1)", + "name": "Welcome", "shortName": "Welcome", - "version": "0.12", + "version": "0.13", "description": "Appears at first boot and explains how to use Bangle.js", "icon": "app.png", "tags": "start,welcome", - "supports": ["BANGLEJS"], + "supports": ["BANGLEJS","BANGLEJS2"], "allow_emulator": true, "storage": [ {"name":"welcome.boot.js","url":"boot.js"}, - {"name":"welcome.app.js","url":"app.js"}, + {"name":"welcome.app.js","url":"app-bangle1.js","supports": ["BANGLEJS"]}, + {"name":"welcome.app.js","url":"app-bangle2.js","supports": ["BANGLEJS2"]}, {"name":"welcome.settings.js","url":"settings.js"}, {"name":"welcome.img","url":"app-icon.js","evaluate":true} ], @@ -203,24 +204,6 @@ ], "data": [{"name":"mywelcome.json"}] }, - { - "id": "welcome2", - "name": "Welcome (Bangle.js 2)", - "shortName": "Welcome", - "version": "0.13", - "description": "Appears at first boot and explains how to use Bangle.js 2", - "icon": "app.png", - "tags": "start,welcome", - "supports": ["BANGLEJS2"], - "allow_emulator": true, - "storage": [ - {"name":"welcome2.boot.js","url":"boot.js"}, - {"name":"welcome2.app.js","url":"app.js"}, - {"name":"welcome2.settings.js","url":"settings.js"}, - {"name":"welcome2.img","url":"app-icon.js","evaluate":true} - ], - "data": [{"name":"welcome2.json"}] - }, { "id": "gbridge", "name": "Gadgetbridge", diff --git a/apps/welcome/ChangeLog b/apps/welcome/ChangeLog index 519222c52..f72f77a4b 100644 --- a/apps/welcome/ChangeLog +++ b/apps/welcome/ChangeLog @@ -14,3 +14,4 @@ 0.10: Tweaks to reduce memory usage 0.11: Fix initial screen fill colour 0.12: Fix swipe direction (#800) +0.13: Mods for Bangle.js 2 diff --git a/apps/welcome/app.js b/apps/welcome/app-bangle1.js similarity index 97% rename from apps/welcome/app.js rename to apps/welcome/app-bangle1.js index 047b0cdb2..949750b38 100644 --- a/apps/welcome/app.js +++ b/apps/welcome/app-bangle1.js @@ -290,14 +290,6 @@ setWatch(()=>{ }, BTN2, {repeat:true,edge:"falling"}); setWatch(()=>move(-1), BTN1, {repeat:true}); -(function migrateSettings(){ - let global_settings = require('Storage').readJSON('setting.json', 1) - if (global_settings) { - delete global_settings.welcomed - require('Storage').write('setting.json', global_settings) - } -})() - Bangle.setLCDTimeout(0); Bangle.setLCDPower(1); move(0); diff --git a/apps/welcome2/app.js b/apps/welcome/app-bangle2.js similarity index 97% rename from apps/welcome2/app.js rename to apps/welcome/app-bangle2.js index d9a967d8a..93d1c5657 100644 --- a/apps/welcome2/app.js +++ b/apps/welcome/app-bangle2.js @@ -243,14 +243,6 @@ setWatch(()=>{ move(1); }, BTN1, {repeat:true}); -(function migrateSettings(){ - let global_settings = require('Storage').readJSON('setting.json', 1) - if (global_settings) { - delete global_settings.welcomed - require('Storage').write('setting.json', global_settings) - } -})() - Bangle.setLCDTimeout(0); Bangle.setLCDPower(1); move(0); diff --git a/apps/welcome2/ChangeLog b/apps/welcome2/ChangeLog deleted file mode 100644 index f72f77a4b..000000000 --- a/apps/welcome2/ChangeLog +++ /dev/null @@ -1,17 +0,0 @@ -0.01: New App! -0.02: Animate balloon intro -0.03: BTN3 now won't restart when at the end -0.04: Fix regression after tweaks to Storage.readJSON -0.05: Move configuration into App/widget settings -0.06: Move loader into welcome.boot.js -0.07: Run again when updated - Don't run again when settings app is updated (or absent) - Add "Run Now" option to settings -0.08: Don't overwrite existing settings on app update -0.09: Allow welcome to run after a fresh install - More useful app menu - BTN2 now goes to menu on release -0.10: Tweaks to reduce memory usage -0.11: Fix initial screen fill colour -0.12: Fix swipe direction (#800) -0.13: Mods for Bangle.js 2 diff --git a/apps/welcome2/app-icon.js b/apps/welcome2/app-icon.js deleted file mode 100644 index 5c1373e17..000000000 --- a/apps/welcome2/app-icon.js +++ /dev/null @@ -1 +0,0 @@ -require("heatshrink").decompress(atob("mEwxH+AH4A/AH4AU5gAEFtoxnEwXN53WAAXO5oJB42Wy26AAIueFoPXFggAD4AwEGTQiB6otBFgwAD3QvFGC5dCFxiRGGClhrdbv67BXAIuLMBIwPsIABF4OpLwXOFxjBCF6gtBw2r1mHXoXWFxqQWFwOH62rL4IeB6xeOAAIvHGBYuC6+rR4QvCXpovXw3X1i/DR4QuPR5AvKFQOs6+GF4eod4IvPd5AvLwvWLwQvCv4fBR54vURwOHF4iQCX0yOCF4aQBX0QvHSAoAN3SOSd4WyF4yQPLyhgD1YvDMCJeIFxhgCF47BN4BeHFxpgDSAiRORpAuPMIYAFGBYuaF5aSHFwQvEFqQwOeggSBLa4xNF4X+4wAC/xeCFjIADrYwGBIIvlMQiPDBAOk0gDBz2XF8BlEF4eIxADFF8lcF9n+wIrFF05bHF9AsGF9wupGAYv/F8QupGAov/F/4wOF1gA/AH4Ap")) diff --git a/apps/welcome2/app.png b/apps/welcome2/app.png deleted file mode 100644 index ebbf254bd7c3546e8337c97648a7eb56747c81ac..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1939 zcmV;E2WP)^Vse?M*ABwfS z8MZ{CGrE{9Te8V!(51`XGM!;roJ%xW2E^g2NO{qXsim}(VOBaof>d5Dolx3xFQxb1 z-nZxMkEd_+KDRC9c8eL`e{OQldCvKM@9+H1@Ao`#6F2ey4asCOZNf#^U4iltNGVVP zD9{Fa2%!dFY=)EdIoSdkU1+ff<1#70}x@Hu6Kz{*xG?E@iS0CV6Z_UXTXX+c`#EfepLM z7bkj*!-~A7=*pg+Sbi*K%7RHf4giWO!Qq3`KOGl&fb97ejd1$m`W-Ff7CVP?6!NP@ z*#dZSJOwP6bwBxEm_^gcdS*L+X9eY#LFhPi?iv?)0Qct&s7(@2rVYtLc?9_Na7Wq| z*s!a7VL$mhO77$FB^z-&y=>gMfp-sY$1lBBpl3RC?8G{+#s}vNi$-#!6vBPB&)OMR zSFd&$bZt`bEWGtWzIxkQ4xXu@;q+gK#Us}SYaD|6$H%;%Ti;I9kp;}PGuy7fJm2Nj z3iFC{=TP>!hdI^J%>L8W066-F^;LCQ!M&eAbbP(vkK`q5{1_wcNTtxuZ2ySr8h}N& zRszc2md$8ii@03Y-n|s>8yCR?kc`--87pEZEdlP41PEPrX4^*;%A5{2vnS8zR7W$x z$ly8R&9b`gL{GM5xU>zNlg7h)0KF}J0vsa*DW~nsDFU8oDs=&cd09m`4HsuS|8}Go}cbc4m$MYKWCB5WaYg-fnm1w~?N@s{QIvQxc8y;|@aI_lzb}w~BisS# zemenx-!nLkY_L)4u$>fXwvAaIiTBWc+v}7`&~p6!uCs3uaov50-F-3g3k#a`wiTU zvP%9=C|wR)0Y87>{T;xe;}`am?ajxK)a*r5vJpf0+j$=?(bQEM4dHi_T)m(OP>_0! z1_+^4NFyyH<*{D@K^5csiY97XHdE-Io)Y4AJ18jdq6!;N6w__G$4oxaYSOXO>ixVd z+ws{6d|mcaH(IW=leb~(nby14&Nh=~ygVGcVjJW0xrjs(bVp2%hH_X~(1Taf-^c)x z7fdd^7$=di#^z*S%ALL$;a+Lr=xF3e6aY{@cU@z0T5E~G9qD5HeiuEVI9(y3DL9Gw z1yOPg`+ITpuxVa+DK3e)^{?OJ2V;=^WrSx4^Q0WKKXvUe>I+R(Rh1DhZFp7C$I`_l zlS*4#H@%Sr4uO?(LjPWs*V=<2)&jK*IPU`jS>z$Ju_P`2WvTIvXn zmH3zi^y9hR%brk`mjK)IQWZKoBLssHEiBBw=l9z94dC&#M}GJIl*eYU7cZ~QEIAx*jx#4V*6tXFt75D0`S3i z9}Y}9+K^{NLmzuXR~F6skih>$z;LX3{!6Pxw0a<^>ZsE89`|RJp-`2xV9n22`K4{uPal12c#LV76{gFJ8nP!- zaw36avkT_Uy!ZAWT)neo#k6g;jWdVG2vqd_X5^b_KQbcVPgUo7pa0hDpH9h{^Jkwc z-!McT8S3Bl{(_CIEp)Rdry0B}FR$L8xE8Y*}X}Yi3ly zimxsC2XF#(_RiV^WkXzj?IRg&AIPu(06{kcC_FmEycEFvEC@)5a|@6}ST)4#1`by) zyX#!0>t$TP%4Lh%RHy~~L+v8eWV#kifB-A0ZW?Y&s`=Rw5cL>u!8JF_b1TZrj!Z7V#$X$n89sf7V!{MeE?v?nqF**mb8fyw8z-vHP29u{ Z;y>o9o!*JS4-fzV002ovPDHLkV1gG+pke?3 diff --git a/apps/welcome2/boot.js b/apps/welcome2/boot.js deleted file mode 100644 index 07b7386f1..000000000 --- a/apps/welcome2/boot.js +++ /dev/null @@ -1,9 +0,0 @@ -(function() { - let s = require('Storage').readJSON('welcome2.json', 1) || {}; - if (!s.welcomed) { - setTimeout(() => { - require('Storage').write('welcome2.json', {welcomed: true}) - load('welcome2.app.js') - }) - } -})() diff --git a/apps/welcome2/settings.js b/apps/welcome2/settings.js deleted file mode 100644 index d87cf4b55..000000000 --- a/apps/welcome2/settings.js +++ /dev/null @@ -1,18 +0,0 @@ -(function(back) { - let settings = require('Storage').readJSON('welcome2.json', 1) - || require('Storage').readJSON('setting.json', 1) || {} - E.showMenu({ - '': { 'title': 'Welcome App' }, - 'Run next boot': { - value: !settings.welcomed, - format: v => v ? 'Yes' : 'No', - onchange: v => require('Storage').write('welcome2.json', {welcomed: !v}), - }, - 'Run Now': () => load('welcome2.app.js'), - 'Turn off & run next': () => { - require('Storage').write('welcome2.json', {welcomed: false}); - Bangle.off(); - }, - '< Back': back, - }) -}) diff --git a/bin/sanitycheck.js b/bin/sanitycheck.js index ef795871d..9c5f4c916 100755 --- a/bin/sanitycheck.js +++ b/bin/sanitycheck.js @@ -133,9 +133,9 @@ apps.forEach((app,appIdx) => { if (isGlob(file.name)) ERROR(`App ${app.id} storage file ${file.name} contains wildcards`); let char = file.name.match(FORBIDDEN_FILE_NAME_CHARS) if (char) ERROR(`App ${app.id} storage file ${file.name} contains invalid character "${char[0]}"`) - if (fileNames.includes(file.name)) + if (fileNames.includes(file.name) && !file.supports) // assume that there aren't duplicates if 'supports' is set ERROR(`App ${app.id} file ${file.name} is a duplicate`); - if (!file.supports) fileNames.push(file.name); // assume that there aren't duplicates if 'supports' is set + fileNames.push(file.name); allFiles.push({app: app.id, file: file.name}); if (file.url) if (!fs.existsSync(appDir+file.url)) ERROR(`App ${app.id} file ${file.url} doesn't exist`); if (!file.url && !file.content && !app.custom) ERROR(`App ${app.id} file ${file.name} has no contents`); From 5ad849b8670d704725ff8311f83d7b9030a1e8e8 Mon Sep 17 00:00:00 2001 From: Gordon Williams Date: Thu, 28 Oct 2021 14:31:50 +0100 Subject: [PATCH 288/392] naming --- apps/recorder/app.js | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/apps/recorder/app.js b/apps/recorder/app.js index 9c8380c07..9b9c06c78 100644 --- a/apps/recorder/app.js +++ b/apps/recorder/app.js @@ -49,7 +49,7 @@ function showMainMenu() { }; } const mainmenu = { - '': { 'title': 'GPS Record' }, + '': { 'title': 'Recorder' }, '< Back': ()=>{load();}, 'RECORD': { value: !!settings.recording, @@ -102,7 +102,7 @@ function showMainMenu() { function viewTracks() { const menu = { - '': { 'title': 'GPS Tracks' } + '': { 'title': 'Tracks' } }; var found = false; require("Storage").list(/^record\.log.*\.csv$/,{sf:true}).forEach(filename=>{ @@ -174,12 +174,12 @@ function asTime(v){ function viewTrack(filename, info) { if (!info) { - E.showMessage("Loading...","GPS Track "+getTrackNumber(filename)); + E.showMessage("Loading...","Track "+getTrackNumber(filename)); info = getTrackInfo(filename); } console.log(info); const menu = { - '': { 'title': 'GPS Track '+info.fn } + '': { 'title': 'Track '+info.fn } }; if (info.time) menu[info.time.toISOString().substr(0,16).replace("T"," ")] = function(){}; @@ -240,7 +240,7 @@ function plotTrack(info) { } E.showMenu(); // remove menu - E.showMessage("Drawing...","GPS Track "+info.fn); + E.showMessage("Drawing...","Track "+info.fn); g.flip(); // on buffered screens, draw a not saying we're busy g.clear(1); var s = require("Storage"); @@ -318,7 +318,7 @@ function plotTrack(info) { function plotGraph(info, style) { "ram" E.showMenu(); // remove menu - E.showMessage("Calculating...","GPS Track "+info.fn); + E.showMessage("Calculating...","Track "+info.fn); var filename = info.filename; var infn = new Float32Array(80); var infc = new Uint16Array(80); From 5bbe209a44e8cd15dbcd293197d8a865f2a62427 Mon Sep 17 00:00:00 2001 From: qucchia Date: Thu, 28 Oct 2021 16:00:43 +0200 Subject: [PATCH 289/392] Update Q Alarm --- apps/qalarm/ChangeLog | 1 + apps/qalarm/app.js | 13 +++---------- apps/qalarm/qalarm.js | 4 ---- apps/qalarm/qalarmcheck.js | 7 +++---- 4 files changed, 7 insertions(+), 18 deletions(-) diff --git a/apps/qalarm/ChangeLog b/apps/qalarm/ChangeLog index 4022f485c..135e69d23 100644 --- a/apps/qalarm/ChangeLog +++ b/apps/qalarm/ChangeLog @@ -1 +1,2 @@ 0.01: First version! +0.02: Fixed alarms not working and localised days of week. \ No newline at end of file diff --git a/apps/qalarm/app.js b/apps/qalarm/app.js index 4d27739cf..64f601bf6 100644 --- a/apps/qalarm/app.js +++ b/apps/qalarm/app.js @@ -172,21 +172,14 @@ function showDaysMenu(alarmIndex, alarm) { "< Back": () => showEditAlarmMenu(alarmIndex, alarm), }; - [ - "Sunday", - "Monday", - "Tuesday", - "Wednesday", - "Thursday", - "Friday", - "Saturday", - ].forEach((dayOfWeek, i) => { + for (let i = 0; i < 7; i++) { + let dayOfWeek = require("locale").dow({ getDay: () => i }); menu[dayOfWeek] = { value: alarm.daysOfWeek[i], format: (v) => (v ? "Yes" : "No"), onchange: (v) => (alarm.daysOfWeek[i] = v), }; - }); + } return E.showMenu(menu); } diff --git a/apps/qalarm/qalarm.js b/apps/qalarm/qalarm.js index 38571987e..6b31ba645 100644 --- a/apps/qalarm/qalarm.js +++ b/apps/qalarm/qalarm.js @@ -1,7 +1,5 @@ // This file shows the alarm -print("Starting alarm"); - function formatTime(t) { let hrs = Math.floor(t / 3600000); let mins = Math.round((t / 60000) % 60); @@ -150,8 +148,6 @@ let active = alarms.filter( (alarm.timer || alarm.daysOfWeek[time.getDay()]) ); -print(active); - if (active.length) { showAlarm(active.sort((a, b) => a.t - b.t)[0]); } diff --git a/apps/qalarm/qalarmcheck.js b/apps/qalarm/qalarmcheck.js index de3db68ab..9a3f10d5e 100644 --- a/apps/qalarm/qalarmcheck.js +++ b/apps/qalarm/qalarmcheck.js @@ -29,13 +29,12 @@ let nextAlarms = (require("Storage").readJSON("qalarm.json", 1) || []) .sort((a, b) => a.t - b.t); if (nextAlarms[0]) { - print("Found alarm, scheduling...", nextAlarms[0].t - t); setTimeout(() => { - load("qalarm.js"); eval(require("Storage").read("qalarmcheck.js")); - }, 3600000 * (nextAlarms[0].t - t)); + load("qalarm.js"); + }, nextAlarms[0].t - t); } else { - print("No alarms found. Will re-check at midnight."); + // No alarms found: will re-check at midnight setTimeout(() => { eval(require("Storage").read("qalarmcheck.js")); }, 86400000 - t); From 7ad7fa6c325395539ec5f5d7d8a91daab3e25f2b Mon Sep 17 00:00:00 2001 From: qucchia Date: Thu, 28 Oct 2021 16:03:01 +0200 Subject: [PATCH 290/392] Update Q Alarm --- apps.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps.json b/apps.json index 4d2c4fdb9..12c51ff72 100644 --- a/apps.json +++ b/apps.json @@ -4172,7 +4172,7 @@ "name": "Q Alarm and Timer", "shortName": "Q Alarm", "icon": "app.png", - "version": "0.01", + "version": "0.02", "description": "Alarm and timer app with days of week and 'hard' option.", "tags": "tool,alarm,widget", "supports": ["BANGLEJS", "BANGLEJS2"], From 78ba542aa347f037ebb77b42b6d05dd15ea27377 Mon Sep 17 00:00:00 2001 From: Gordon Williams Date: Thu, 28 Oct 2021 15:11:35 +0100 Subject: [PATCH 291/392] oops - widget fix --- apps/recorder/widget.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/apps/recorder/widget.js b/apps/recorder/widget.js index 38b1d69d2..785f3b03e 100644 --- a/apps/recorder/widget.js +++ b/apps/recorder/widget.js @@ -23,9 +23,9 @@ function onGPS(f) { hasFix = f.fix; if (!hasFix) return; - lat += fix.lat; - lon += fix.lon; - alt += fix.alt; + lat += f.lat; + lon += f.lon; + alt += f.alt; samples++; } return { From ce08d82367810866ffc0d4d701f463ca9eb73ba0 Mon Sep 17 00:00:00 2001 From: Gordon Williams Date: Thu, 28 Oct 2021 15:12:43 +0100 Subject: [PATCH 292/392] location --- apps/recorder/widget.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/recorder/widget.js b/apps/recorder/widget.js index 785f3b03e..df0be1d20 100644 --- a/apps/recorder/widget.js +++ b/apps/recorder/widget.js @@ -182,7 +182,7 @@ if (!writeInterval) return; g.reset(); g.drawImage(atob("DRSBAAGAHgDwAwAAA8B/D/hvx38zzh4w8A+AbgMwGYDMDGBjAA=="),this.x+1,this.y+2); activeRecorders.forEach((recorder,i)=>{ - recorder.draw(this.y+15+(i>>1)*12, this.y+(i&1)*12); + recorder.draw(this.x+15+(i>>1)*12, this.y+(i&1)*12); }); },getRecorders:getRecorders,reload:function() { reload(); From b04bd5d158a62f65d2047c1f90c2a298d7349a84 Mon Sep 17 00:00:00 2001 From: Gordon Williams Date: Thu, 28 Oct 2021 16:13:11 +0100 Subject: [PATCH 293/392] 0.10: Added separate Bangle.js 2 file with Bangle.js 2 kickstarter pixels (as of 28 Oct 2021) --- apps.json | 5 +- apps/about/ChangeLog | 1 + apps/about/{app.js => app-bangle1.js} | 0 apps/about/app-bangle2.js | 71 +++++++++++++++++++++++++++ 4 files changed, 75 insertions(+), 2 deletions(-) rename apps/about/{app.js => app-bangle1.js} (100%) create mode 100644 apps/about/app-bangle2.js diff --git a/apps.json b/apps.json index a1c3583a8..ed9b9ca5c 100644 --- a/apps.json +++ b/apps.json @@ -111,14 +111,15 @@ { "id": "about", "name": "About", - "version": "0.09", + "version": "0.10", "description": "Bangle.js About page - showing software version, stats, and a collaborative mural from the Bangle.js KickStarter backers", "icon": "app.png", "tags": "tool,system", "supports": ["BANGLEJS","BANGLEJS2"], "allow_emulator": true, "storage": [ - {"name":"about.app.js","url":"app.js"}, + {"name":"about.app.js","url":"app-bangle1.js","supports": ["BANGLEJS"]}, + {"name":"about.app.js","url":"app-bangle2.js","supports": ["BANGLEJS2"]}, {"name":"about.img","url":"app-icon.js","evaluate":true} ] }, diff --git a/apps/about/ChangeLog b/apps/about/ChangeLog index ccc80148c..9557e448d 100644 --- a/apps/about/ChangeLog +++ b/apps/about/ChangeLog @@ -7,3 +7,4 @@ 0.07: Pressing a button now exits immediately (fix #618) 0.08: Make about (mostly) work on non-240px screens 0.09: Actual Bangle.js 1 pixels as of 13 Oct 2021 +0.10: Added separate Bangle.js 2 file with Bangle.js 2 kickstarter pixels (as of 28 Oct 2021) diff --git a/apps/about/app.js b/apps/about/app-bangle1.js similarity index 100% rename from apps/about/app.js rename to apps/about/app-bangle1.js diff --git a/apps/about/app-bangle2.js b/apps/about/app-bangle2.js new file mode 100644 index 000000000..8a0be9f3d --- /dev/null +++ b/apps/about/app-bangle2.js @@ -0,0 +1,71 @@ +Bangle.loadWidgets(); +Bangle.drawWidgets(); + +var W = g.getWidth(), H = g.getHeight(); +var ENV = process.env; +var MEM = process.memory(); +var s = require("Storage"); + +var img = atob("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"); +var imgHeight = g.imageMetrics(img).height; +var imgScroll = Math.floor(Math.random()*imgHeight); + +g.reset().setFont("6x15").setFontAlign(0,0); +g.drawString(ENV.VERSION + " " + NRF.getAddress(), g.getWidth()/2, 171); +g.drawImage(img,0,24); + +function getVersion(name,file) { + var j = s.readJSON(file,1); + var v = ("object"==typeof j)?j.version:false; + return v?(name+" "+(v?"v"+v:"Unknown")):"NO "+name; +} + +var versions = [ + getVersion("Bootloader","boot.info"), + getVersion("Launcher","launch.info"), + getVersion("Settings","setting.info") +]; +var logo = E.toArrayBuffer(atob("PBwBAAAAAAAB/gAAAAAAAB/gAAAAAAAB/gAAAAAAAB/gAAAAAAAB/gAAAAAAAB/gAAAAAAAD/w+AAAAQAHA4hAAAAQAMAMhAAAAQAYBmhAAAAQAYBGiAAAAQAQCD/H74+R4wGDhoKJCSEwEDgoKJCT8wFDgoKJCSAwHDhoKJCSEQHj/H6I+R4YHmAAAACAAYEGAAABCAAMEMAAAA8AAHA4AAAAAAAD/wAAAAAAAB/gAAAAAAAB/gAAAAAAAB/gAAAAAAAB/gAAAAAAAB/gAAAAAAAB/g")); + +var imageTop = 24; + +function drawInfo() { + g.reset().clearRect(Bangle.appRect); + g.drawImage(logo,W-60,24); + g.setFont("4x6").setFontAlign(0,0).drawString("BANGLEJS.COM",W-30,56); + var h=8, y = 24-h; + g.setFont("6x8").setFontAlign(-1,-1); + g.drawString("Powered by Espruino",0,y+=4+h); + g.drawString("Version "+ENV.VERSION,0,y+=h); + g.drawString("Commit "+ENV.GIT_COMMIT,0,y+=h); + + getVersion("Bootloader","boot.info"); + getVersion("Launcher","launch.info"); + getVersion("Settings","setting.info"); + + g.drawString(MEM.total+" JS Vars",0,y+=h); + g.drawString("Storage: "+(require("Storage").getFree()>>10)+"k free",0,y+=h); + if (ENV.STORAGE) g.drawString(" "+(ENV.STORAGE>>10)+"k total",0,y+=h); + if (ENV.SPIFLASH) g.drawString("SPI Flash: "+(ENV.SPIFLASH>>10)+"k",0,y+=h); + imageTop = y+h; + imgScroll = imgHeight-imageTop; + g.reset().setFont("6x15").setFontAlign(0,0); + g.drawString(ENV.VERSION + " " + NRF.getAddress(), g.getWidth()/2, 171); + + drawImage(); + setInterval(function() { + drawImage(); + g.flip(); + imgScroll = (imgScroll+1) % imgHeight; + }, 20); +} + +function drawImage() { + g.setClipRect(0,imageTop,W-1,H-14); + g.drawImage(img,0,imageTop-imgScroll); + g.drawImage(img,0,imageTop+imgHeight-imgScroll); + g.setClipRect(0,0,W-1,H-1); +} + +// TODO: a nice little animation before +setTimeout(drawInfo, 1000); From 52ffb2f3c282ab532a0e3a827282724d6f44749d Mon Sep 17 00:00:00 2001 From: hughbarney Date: Thu, 28 Oct 2021 21:51:11 +0100 Subject: [PATCH 294/392] added more screenshots and put them into apps.json --- apps.json | 13 ++++++++++--- apps/calculator/screenshot_calculator.png | Bin 0 -> 2733 bytes apps/calendar/screenshot_calendar.png | Bin 0 -> 3866 bytes apps/cliock/screenshot_cli.png | Bin 0 -> 2115 bytes apps/gallifr/screenshot_time.png | Bin 0 -> 3807 bytes apps/pastel/screenshot_pastel.png | Bin 0 -> 4014 bytes apps/sclock/screenshot_simplec.png | Bin 0 -> 2217 bytes apps/simplest/screenshot_simplest.png | Bin 0 -> 2106 bytes apps/wclock/screenshot_word.png | Bin 0 -> 3540 bytes apps/welcome/screenshot_welcome.png | Bin 0 -> 2618 bytes apps/worldclock/screenshot_world.png | Bin 0 -> 2937 bytes 11 files changed, 10 insertions(+), 3 deletions(-) create mode 100644 apps/calculator/screenshot_calculator.png create mode 100644 apps/calendar/screenshot_calendar.png create mode 100644 apps/cliock/screenshot_cli.png create mode 100644 apps/gallifr/screenshot_time.png create mode 100644 apps/pastel/screenshot_pastel.png create mode 100644 apps/sclock/screenshot_simplec.png create mode 100644 apps/simplest/screenshot_simplest.png create mode 100644 apps/wclock/screenshot_word.png create mode 100644 apps/welcome/screenshot_welcome.png create mode 100644 apps/worldclock/screenshot_world.png diff --git a/apps.json b/apps.json index ed9b9ca5c..d52b2c9b5 100644 --- a/apps.json +++ b/apps.json @@ -175,6 +175,7 @@ "version": "0.13", "description": "Appears at first boot and explains how to use Bangle.js", "icon": "app.png", + "screenshots": [{"url":"screenshot_welcome.png"}], "tags": "start,welcome", "supports": ["BANGLEJS","BANGLEJS2"], "allow_emulator": true, @@ -279,6 +280,7 @@ "version": "0.03", "description": "Display Time as Text", "icon": "clock-word.png", + "screenshots": [{"url":"screenshot_word.png"}], "type": "clock", "tags": "clock", "supports": ["BANGLEJS","BANGLEJS2"], @@ -1090,6 +1092,7 @@ "version": "0.07", "description": "A Simple Digital Clock", "icon": "clock-simple.png", + "screenshots": [{"url":"screenshot_simplec.png"}], "type": "clock", "tags": "clock", "supports": ["BANGLEJS","BANGLEJS2"], @@ -1610,6 +1613,7 @@ "version": "0.14", "description": "Simple CLI-Styled Clock", "icon": "app.png", + "screenshots": [{"url":"screenshot_cli.png"}], "type": "clock", "tags": "clock,cli,command,bash,shell", "supports": ["BANGLEJS","BANGLEJS2"], @@ -1982,6 +1986,7 @@ "version": "0.04", "description": "Basic calculator reminiscent of MacOs's one. Handy for small calculus.", "icon": "calculator.png", + "screenshots": [{"url":"screenshot_calculator.png"}], "tags": "app,tool", "supports": ["BANGLEJS","BANGLEJS2"], "storage": [ @@ -2223,6 +2228,7 @@ "version": "0.02", "description": "Simple calendar", "icon": "calendar.png", + "screenshots": [{"url":"screenshot_calendar.png"}], "tags": "calendar", "supports": ["BANGLEJS","BANGLEJS2"], "readme": "README.md", @@ -2371,6 +2377,7 @@ "version": "0.02", "description": "A clock for time travellers. The light pie segment shows the minutes, the black circle, the hour. The dial itself reads 'time' just in case you forget.", "icon": "gallifr.png", + "screenshots": [{"url":"screenshot_time.png"}], "type": "clock", "tags": "clock", "supports": ["BANGLEJS","BANGLEJS2"], @@ -2873,6 +2880,7 @@ "version": "0.05", "description": "Current time zone plus up to four others", "icon": "app.png", + "screenshots": [{"url":"screenshot_world.png"}], "type": "clock", "tags": "clock", "supports": ["BANGLEJS","BANGLEJS2"], @@ -3559,6 +3567,7 @@ "version": "0.03", "description": "The simplest working clock, acts as a tutorial piece", "icon": "simplest.png", + "screenshots": [{"url":"screenshot_simplest.png"}], "type": "clock", "tags": "clock", "supports": ["BANGLEJS","BANGLEJS2"], @@ -3968,6 +3977,7 @@ "version": "0.05", "description": "A Configurable clock with custom fonts and background", "icon": "pastel.png", + "screenshots": [{"url":"screenshot_pastel.png"}], "type": "clock", "tags": "clock", "supports": ["BANGLEJS","BANGLEJS2"], @@ -4005,7 +4015,6 @@ "type": "clock", "tags": "clock", "supports": ["BANGLEJS","BANGLEJS2"], - "readme": "README.md", "allow_emulator": true, "storage": [ {"name":"waveclk.app.js","url":"app.js"}, @@ -4022,7 +4031,6 @@ "type": "clock", "tags": "clock", "supports": ["BANGLEJS","BANGLEJS2"], - "readme": "README.md", "allow_emulator": true, "storage": [ {"name":"floralclk.app.js","url":"app.js"}, @@ -4039,7 +4047,6 @@ "type": "app", "tags": "", "supports": ["BANGLEJS","BANGLEJS2"], - "readme": "README.md", "storage": [ {"name":"score.app.js","url":"score.app.js"}, {"name":"score.settings.js","url":"score.settings.js"}, diff --git a/apps/calculator/screenshot_calculator.png b/apps/calculator/screenshot_calculator.png new file mode 100644 index 0000000000000000000000000000000000000000..7a259fe2c010fb9c7d2ced201506267537d76077 GIT binary patch literal 2733 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 literal 0 HcmV?d00001 diff --git a/apps/calendar/screenshot_calendar.png b/apps/calendar/screenshot_calendar.png new file mode 100644 index 0000000000000000000000000000000000000000..4507d77dd0cbf962e6f435c5d310f481a12f254c GIT binary patch literal 3866 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 Uc?BnRAa?nz%xqBQCSJt<11SArXaE2J literal 0 HcmV?d00001 diff --git a/apps/cliock/screenshot_cli.png b/apps/cliock/screenshot_cli.png new file mode 100644 index 0000000000000000000000000000000000000000..fe1c6299b4fef932353ee02149f65bd9ce18a5f1 GIT binary patch literal 2115 zcmeH}Sv=c`7RTc+MlhYG493!`QEsb6YfW1!_Hyl#P}I^TS~DHdjN1^RVOqMRX|Gay zXnWB_gSHxL{fAC+Rq44A>Xy+{F4VL0vTPkpbQi=8*Y31fu;p(ANt^NLZ*EzFc_>uC<_2 z{r-6L2rIthpalg{={GSHmse^cb9RKqZzvTC#p=%%utPy21G4dg`T5*k$Ryu32ePNo zO`Enegr@QmZM~$v`HI|AGBKxbb-4V)1JFlQ(ALxV8kQ}TNAN9|^L+zmm|!l+Ug#N4 z`bWu1C#8PN46ZnU3pfLvs(BX|Jk8fVZnfOi?#ivrg>r%dc%yxGI5CECVok<&m~_@v1&E|R=D^vJ z0T_Zc%-uJUGco*W;SImKUQP?(FtQLNCt%UoBsB}x2uoKwlgr%F>x=XufIZ-pHWS}| zLzDa-$|M+E>DUh-lkS6H!eOB%wf9_nHKZrfBn5TJsrZ~u1)`FU4A*5)dRt@&v{ANgODsf-nh+~Zp+m$7V} zZj}M*V+Xx1)r0qG^)Ui}7Xo-{@;YnagmA`(=54#5@Vuy&EKXc9Hz)^JF*tTycsh~U zGnwKoO0oOlnxAMg0k&xw`V@QT$$@0L3yQ&-n$ibWnXcG~|x5xog$A?&@IMLuZN35R7*4*2RxV@?mT8>*Yw3~@JcMl75Z+)eG8 zlr$$K!`w%lTB`~`tFIkQiUj^qQ3%Y-sqTx!S6S0Fcc`Q9PiWsBt)0Ouoi(7_JCc_$ z8sxBBbGmnPily{&1YDs;*wE~(@fprqTiZ{%0>HY61#UD8AZw6?~lSylUHS7wr=Mbez}p zv%hD7yQGoi6R}%3;Ix% z<}eCEIGXD)n(>|ft{~Dhlojf+8Qy*b3QcHlhbddHHIZ;nKb%PwRzm(l(QP6)dS8((LQF4(qe~@P zXiBb3VXgJ*;RWk|^Qp<$=ur$r7Lvay_wMdkNXLDeAFMa+$q*?z%V`VjB=_*yxI$Y{ zLV#`uK*+SxnscT-F`HJrH{9wc7y!M>H&jVC&{$jAG3LsXRl_htRj)Y9_}d6~Ks7Z( zPvTXh#fkgRxx6qM&kS?l{I%8;Cs#=Ocr7c8>(S!%#iPXaYTMi_uZGwZbLyWaecp?5 z*yiiS^P;Z=eiWsa%`o&ASVfz0iHOKNdS=5auWw$e>oM}2cGiC` zg7TgE2*rj3R4Kg_?L{|6xsYUlTOq>i+fGUy9ktcyLB?Loe2|sJvRP105|y?VF57ux zn9_`U+P;CMuaHtJ^q7t&D?hjhpYGAY2{ia=mdu$S-I5nE@6aF8;L)D11vMvwt|F-r zK+GP2!U^+o^_pVvFRgssKdwXT>)h)QfL6hD_fF>mq{ z`d)LXzX5(Hr_g(JE|7Pk8egBp`v9=)zPj)cgofSWgG-1If40tEocU3mD(JXBeq4$186cCK!h6rF zCzQDH-$LQzU*5-^0$`ONLtLFSpst$M@g)!-C9`Po|FZur5~bF8ADlgk;1Q+%3Lt@g Lp}tJ-q`W@>Y#QRL literal 0 HcmV?d00001 diff --git a/apps/gallifr/screenshot_time.png b/apps/gallifr/screenshot_time.png new file mode 100644 index 0000000000000000000000000000000000000000..2754138c45a49d8f7aa866525744342cd9b19047 GIT binary patch literal 3807 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 literal 0 HcmV?d00001 diff --git a/apps/sclock/screenshot_simplec.png b/apps/sclock/screenshot_simplec.png new file mode 100644 index 0000000000000000000000000000000000000000..a12db3ec82a8b9443b565eca26eeed33a53b1a79 GIT binary patch literal 2217 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 Ang9R* literal 0 HcmV?d00001 diff --git a/apps/wclock/screenshot_word.png b/apps/wclock/screenshot_word.png new file mode 100644 index 0000000000000000000000000000000000000000..56e0ce98f36e6a1b4152f0eb5b44491c13ec0734 GIT binary patch literal 3540 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 literal 0 HcmV?d00001 From 6668727aca1910a50ca69396bf605d22ffd87264 Mon Sep 17 00:00:00 2001 From: hughbarney Date: Thu, 28 Oct 2021 22:34:43 +0100 Subject: [PATCH 295/392] more screenshots and remove some redundant references to README's --- apps.json | 5 +++-- apps/astroid/screenshot_asteroids.png | Bin 0 -> 1498 bytes apps/compass/screenshot_compass.png | Bin 0 -> 2632 bytes apps/matrixclock/screenshot_matrix.png | Bin 0 -> 4990 bytes apps/simplest/screenshot_simplest.png | Bin 2106 -> 2180 bytes 5 files changed, 3 insertions(+), 2 deletions(-) create mode 100644 apps/astroid/screenshot_asteroids.png create mode 100644 apps/compass/screenshot_compass.png create mode 100644 apps/matrixclock/screenshot_matrix.png diff --git a/apps.json b/apps.json index d52b2c9b5..6c444455b 100644 --- a/apps.json +++ b/apps.json @@ -394,6 +394,7 @@ "version": "0.02", "description": "inspired by The Matrix, a clock of the same style", "icon": "matrixclock.png", + "screenshots": [{"url":"screenshot_matrix.png"}], "type": "clock", "tags": "clock", "supports": ["BANGLEJS","BANGLEJS2"], @@ -448,7 +449,6 @@ "type": "clock", "tags": "clock", "supports": ["BANGLEJS","BANGLEJS2"], - "readme": "README.md", "allow_emulator": true, "storage": [ {"name":"aclock.app.js","url":"clock-analog.js"}, @@ -512,6 +512,7 @@ "version": "0.03", "description": "Retro asteroids game", "icon": "asteroids.png", + "screenshots": [{"url":"screenshot_asteroids.png"}], "tags": "game", "supports": ["BANGLEJS","BANGLEJS2"], "allow_emulator": true, @@ -552,6 +553,7 @@ "version": "0.04", "description": "Simple compass that points North", "icon": "compass.png", + "screenshots": [{"url":"screenshot_compass.png"}], "tags": "tool,outdoors", "supports": ["BANGLEJS","BANGLEJS2"], "storage": [ @@ -3571,7 +3573,6 @@ "type": "clock", "tags": "clock", "supports": ["BANGLEJS","BANGLEJS2"], - "readme": "README.md", "storage": [ {"name":"simplest.app.js","url":"app.js"}, {"name":"simplest.img","url":"icon.js","evaluate":true} diff --git a/apps/astroid/screenshot_asteroids.png b/apps/astroid/screenshot_asteroids.png new file mode 100644 index 0000000000000000000000000000000000000000..4474c7a664b37661a5982b2872d541d103de26bd GIT binary patch literal 1498 zcmeAS@N?(olHy`uVBq!ia0vp^8$g(Y4M?uv{v-}aF%}28J29*~C-ahlfpvOOu)uKV8GtEy(ObD4m`2az*QK`b0|lvckpVXC&bi;@1$VVGOfBm@*&uvKh9i^ym))Xl*O;Zw}{xb9thm?xx1gsa#!6y z(Y<~uA8x8`+BiQ@(fxXUPX71HoO`S3Q~vrp5+6dr6AU|iv) zv_YJ)U%+1F{riyjUozM3b+OEz+b{k@?cLrj{r}3ZG1gVZv($ZxW_|xj>+fCG{~3+Z zleYEk-z_7$uK$33-HeU{&%^#`)*-Quo~grl$WZ z8voa8Jb8C}_qWE^Cwv}QZNBu9nTchYYbFzmo~_+k;Tg{=4o4pA6IQ)jEyNbMEFkCve)ZubE=Wa;Ncm!89QyhX(=?sn3CF zSms=i6AOn8!?!yB?`5;hwb&TgrU~s3ezmyv?(eso&KXU6>(g*R)?xn1YU{0~dz24N zn##g)hvB+*`ukl|i;HdvGqKbyJO)aekvr!yG;;2_yNFp^V8#LVSKDo89bmbacd=2F z!{-6>*V}Tw3A+Vu>soDKYP5c^y-YmnxV4f_q-Vo{xexXTU+2vFWW>bJ@IA7FF=FyG zp$ef4LrErAB z+%cD6`d&C|-zhy8`63|8DrahK!tVp^C)F+d56D`ak8qm6(AZos^_;Lm!Mu$v3XDwb z54Gm1J3O#S=5%CY;X4#+<==3i@|aK)3x`b0>XLa3jh}l|SvUnOIKp4rFfu)t^yUD@ zkifc2l|X+OPZLmac%Tro^fRz*NY_#HXgJ`w!|ORv^{7Q9^A6Y-xZjg2I~ZIJEUXzk MUHx3vIVCg!06kBM&j0`b literal 0 HcmV?d00001 diff --git a/apps/compass/screenshot_compass.png b/apps/compass/screenshot_compass.png new file mode 100644 index 0000000000000000000000000000000000000000..63579bab72211b0d7d1a69838a6244e9b225285f GIT binary patch literal 2632 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 literal 2106 zcmeH}`%}^h7sl}`RI+QPCX?o^P0=z}*G4lLMXml;tB*FsCBUM~ub7NNpA^s@S-NS3FO!lebfQy)Q=rwdie$(^ ztz@-UaD2uFbBzH8P#@MTBDP40-`z;^SLciLwQW4bSdh#ncl0S*)zzKwg;VZ(@A5H*?7rgSRSTx=X?_)pCXl!mG4<>;WCCp+kB4=;=&3PkJ*sz-V*93Rbi2y-e4 z!B12Rnp0I__&bpKjb0R@1ob}@h;3Q7_k}A+I_R25h)#06*%{m#_j05y5rEfxJ&?|W zZWmPYFZM#W`&vKzkZj_b=1x?UZNMw?<)B3*h#9-@Y#9kAHdHn_H;8zh$B!Z#M7=2Y zn4>6qN>+8{F%-R=j$v2k0YeKu?p1k!i!m?G-3Z41a0%mO1dG^|{5uAK|FhvelWR+# z{#&n$)kO`)2At7-$0e{19#YoTo;abD)OgYA5L7}xS0r-`rTwz7A929%mc%pxNzRaR zQ#|*jO(rI}%x~d5;7CU0utWAkid;7?C8uhbH8xkTU!pdTxO;l{4i^+IdRJRx?}-Ja zUv^)iO@`^x29r+Yp5XW-b?rXCv|vj&s8WT?tce(1=u_FVomJy6;?M`BX-w>Y*mlf1 zye5%g`1q>&oa=jN;gV(T)IQmTAP-u86BF;OzMvF8TeRiEhkgodWebD!ee&3R@x(X5 zZ8M1j)N3fgi`$91d|$8j?(yjT{Ygy`_jd z=a|KL1n>iv;O0p1SWA6;W-?CxhY~=~nYlSi;Xh}u!O6(Wj5^Yv(O`Zj--Oe`9KPN@ z!}6T^%^rtL8??q4wSLp+Jp1|6UN$S|H)iKy@QB#T(aj6Z7vx2uvqzmu4HzS6gY;YE+NY(&L~&yuQ=3o8|2=nL05dTo&{jsweYz5OJ@gd z`|PMzVoshPnU`$W0UzQcsLo=IllDj)1K?lXec7R(0&ZML`F*60`DrV_5%bXa^jgIn zJ?2Jdho~t%+l?M`vy&@wBV#}8J-{>8K&WUs1r$COb)d$MgIGc67&l6@^x&`iY%haNE_+oa(~1G9$jxi~NIeKmIHzJIgMOTDx{^84=t^ zZjcpMs%(c!L>rE-rOBH4lP)e>$VLg3tc?@G9TP#3aqcS9LpwGRfQX5KmtIxf^AaxzX*M(F4%>$rux@pGc@QyX0drb$oRg|}X*MetEN zZDS4gb!{dX&Drk~dJEBY^JXSk1z}V`!cp{ap|Z!s)wB3Dq%038&tMfOIU-Ojw1a;YW{7|%C#+!zfX`qS44)?>aCWf6%l zWAjJ=yl}Tqo>PO!37aww-M#~z`hTN;ZFFBCXN>FuY=)Tu8_xhFJS5^UI~afcFUgqD Ang9R* From 516ff5b609e64a7d312efc93acf6dae53ec9ef91 Mon Sep 17 00:00:00 2001 From: Gordon Williams Date: Fri, 29 Oct 2021 08:32:42 +0100 Subject: [PATCH 296/392] make firmware update beta --- apps.json | 2 +- apps/fwupdate/custom.html | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/apps.json b/apps.json index ed9b9ca5c..4bc4f802a 100644 --- a/apps.json +++ b/apps.json @@ -1,7 +1,7 @@ [ { "id": "fwupdate", - "name": "Firmware Update", + "name": "Firmware Update (BETA)", "version": "0.01", "description": "Uploads new Espruino firmwares to Bangle.js 2", "icon": "app.png", diff --git a/apps/fwupdate/custom.html b/apps/fwupdate/custom.html index 5286ef062..7230a77a8 100644 --- a/apps/fwupdate/custom.html +++ b/apps/fwupdate/custom.html @@ -3,6 +3,8 @@ +

Firmware updates using the App Loader are only possible on Bangle.js 2. For firmware updates on Bangle.js 1 please From 011b4bc97514d7eb7a05f1a6758f080dca0ddad3 Mon Sep 17 00:00:00 2001 From: Gordon Williams Date: Fri, 29 Oct 2021 08:33:13 +0100 Subject: [PATCH 297/392] Change default apps --- bin/firmwaremaker_c.js | 2 +- defaultapps_banglejs2.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/bin/firmwaremaker_c.js b/bin/firmwaremaker_c.js index 7fb842755..ec49aa19a 100755 --- a/bin/firmwaremaker_c.js +++ b/bin/firmwaremaker_c.js @@ -29,7 +29,7 @@ if (DEVICE=="BANGLEJS") { } else if (DEVICE=="BANGLEJS2") { var OUTFILE = path.join(ROOTDIR, '../Espruino/libs/banglejs/banglejs2_storage_default.c'); var APPS = [ // IDs of apps to install - "boot","launch","s7clk","setting", + "boot","launch","antonclk","setting","health", "about","alarm","widlock","widbat","widbt","widid" ]; } else { diff --git a/defaultapps_banglejs2.json b/defaultapps_banglejs2.json index 2d32d285c..04bd44504 100644 --- a/defaultapps_banglejs2.json +++ b/defaultapps_banglejs2.json @@ -1 +1 @@ -["boot","launch","s7clk","setting","about","widbat","widbt","widlock","widid"] +["boot","launch","antonclk","health","setting","about","widbat","widbt","widlock","widid"] From f6ea1b116f1b45b4e1151d88202b3c104859f3b2 Mon Sep 17 00:00:00 2001 From: Gordon Williams Date: Fri, 29 Oct 2021 08:33:31 +0100 Subject: [PATCH 298/392] Fix default app loading for Bangle.js 1 --- loader.js | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/loader.js b/loader.js index c4d8d5972..61e2b1880 100644 --- a/loader.js +++ b/loader.js @@ -27,18 +27,23 @@ DEVICEINFO = DEVICEINFO.filter(x=>x.id.startsWith("BANGLEJS")); // When a device is found, filter the apps accordingly function onFoundDeviceInfo(deviceId, deviceVersion) { - if (deviceId != "BANGLEJS" && deviceId != "BANGLEJS2") { - showToast(`You're using ${deviceId}, not a Bangle.js. Did you want espruino.com/apps instead?` ,"warning", 20000); - } else if (versionLess(deviceVersion, RECOMMENDED_VERSION)) { - showToast(`You're using an old Bangle.js firmware (${deviceVersion}). You can update with the instructions here` ,"warning", 20000); - } + var fwURL = "#"; if (deviceId == "BANGLEJS") { + fwURL = "https://www.espruino.com/Bangle.js#firmware-updates"; Const.MESSAGE_RELOAD = 'Hold BTN3\nto reload'; } if (deviceId == "BANGLEJS2") { + fwURL = "https://www.espruino.com/Bangle.js2#firmware-updates"; Const.MESSAGE_RELOAD = 'Hold button\nto reload'; } + if (deviceId != "BANGLEJS" && deviceId != "BANGLEJS2") { + showToast(`You're using ${deviceId}, not a Bangle.js. Did you want espruino.com/apps instead?` ,"warning", 20000); + } else if (versionLess(deviceVersion, RECOMMENDED_VERSION)) { + showToast(`You're using an old Bangle.js firmware (${deviceVersion}). You can update with the instructions here` ,"warning", 20000); + } + + // check against features shown? filterAppsForDevice(deviceId); /* if we'd saved a device ID but this device is different, ensure @@ -149,7 +154,7 @@ window.addEventListener('load', (event) => { document.getElementById("installdefault").addEventListener("click",event=>{ getInstalledApps().then(() => { if (device.id == "BANGLEJS") - return httpGet("defaultapps_banglejs.json"); + return httpGet("defaultapps_banglejs1.json"); if (device.id == "BANGLEJS2") return httpGet("defaultapps_banglejs2.json"); throw new Error("Unknown device "+device.id); From 2a97f49ded79407ab519426ea523e6b15cf52c37 Mon Sep 17 00:00:00 2001 From: Gordon Williams Date: Fri, 29 Oct 2021 10:34:14 +0100 Subject: [PATCH 299/392] health 0.02: Modified data format to include daily summaries --- apps.json | 116 +++++++++++++++++++++--------------------- apps/health/ChangeLog | 1 + apps/health/README.md | 1 - apps/health/app.js | 40 ++++++++++++++- apps/health/boot.js | 39 +++++++++++--- apps/health/lib.js | 32 ++++++++++-- 6 files changed, 158 insertions(+), 71 deletions(-) diff --git a/apps.json b/apps.json index 4bc4f802a..024fb1d54 100644 --- a/apps.json +++ b/apps.json @@ -49,7 +49,7 @@ { "id": "health", "name": "Health Tracking", - "version": "0.01", + "version": "0.02", "description": "Logs health data and provides an app to view it (BETA - requires firmware 2v11)", "icon": "app.png", "tags": "tool,system", @@ -61,36 +61,7 @@ {"name":"health.boot.js","url":"boot.js"}, {"name":"health","url":"lib.js"} ], - "sortorder": -8 - }, - { - "id": "moonphase", - "name": "Moonphase", - "version": "0.02", - "description": "Shows current moon phase. Now with GPS function.", - "icon": "app.png", - "tags": "", - "supports": ["BANGLEJS"], - "allow_emulator": true, - "storage": [ - {"name":"moonphase.app.js","url":"app.js"}, - {"name":"moonphase.img","url":"app-icon.js","evaluate":true} - ] - }, - { - "id": "daysl", - "name": "Days left", - "version": "0.03", - "description": "Shows you the days left until a certain date. Date can be set with a settings app and is written to a file.", - "icon": "app.png", - "tags": "", - "supports": ["BANGLEJS"], - "allow_emulator": false, - "storage": [ - {"name":"daysl.app.js","url":"app.js"}, - {"name":"daysl.img","url":"app-icon.js","evaluate":true}, - {"name":"daysl.wid.js","url":"widget.js"} - ] + "sortorder": -2 }, { "id": "launch", @@ -108,6 +79,22 @@ ], "sortorder": -10 }, + { + "id": "setting", + "name": "Settings", + "version": "0.31", + "description": "A menu for setting up Bangle.js", + "icon": "settings.png", + "tags": "tool,system", + "supports": ["BANGLEJS","BANGLEJS2"], + "readme": "README.md", + "storage": [ + {"name":"setting.app.js","url":"settings.js"}, + {"name":"setting.img","url":"settings-icon.js","evaluate":true} + ], + "data": [{"name":"setting.json","url":"settings.min.json","evaluate":true}], + "sortorder": -5 + }, { "id": "about", "name": "About", @@ -123,6 +110,24 @@ {"name":"about.img","url":"app-icon.js","evaluate":true} ] }, + { + "id": "alarm", + "name": "Default Alarm & Timer", + "shortName": "Alarms", + "version": "0.13", + "description": "Set and respond to alarms and timers", + "icon": "app.png", + "tags": "tool,alarm,widget", + "supports": ["BANGLEJS","BANGLEJS2"], + "storage": [ + {"name":"alarm.app.js","url":"app.js"}, + {"name":"alarm.boot.js","url":"boot.js"}, + {"name":"alarm.js","url":"alarm.js"}, + {"name":"alarm.img","url":"app-icon.js","evaluate":true}, + {"name":"alarm.wid.js","url":"widget.js"} + ], + "data": [{"name":"alarm.json"}] + }, { "id": "locale", "name": "Languages", @@ -240,38 +245,33 @@ "sortorder": -9 }, { - "id": "setting", - "name": "Settings", - "version": "0.31", - "description": "A menu for setting up Bangle.js", - "icon": "settings.png", - "tags": "tool,system", - "supports": ["BANGLEJS","BANGLEJS2"], - "readme": "README.md", + "id": "moonphase", + "name": "Moonphase", + "version": "0.02", + "description": "Shows current moon phase. Now with GPS function.", + "icon": "app.png", + "tags": "", + "supports": ["BANGLEJS"], + "allow_emulator": true, "storage": [ - {"name":"setting.app.js","url":"settings.js"}, - {"name":"setting.img","url":"settings-icon.js","evaluate":true} - ], - "data": [{"name":"setting.json","url":"settings.min.json","evaluate":true}], - "sortorder": -2 + {"name":"moonphase.app.js","url":"app.js"}, + {"name":"moonphase.img","url":"app-icon.js","evaluate":true} + ] }, { - "id": "alarm", - "name": "Default Alarm & Timer", - "shortName": "Alarms", - "version": "0.13", - "description": "Set and respond to alarms and timers", + "id": "daysl", + "name": "Days left", + "version": "0.03", + "description": "Shows you the days left until a certain date. Date can be set with a settings app and is written to a file.", "icon": "app.png", - "tags": "tool,alarm,widget", - "supports": ["BANGLEJS","BANGLEJS2"], + "tags": "", + "supports": ["BANGLEJS"], + "allow_emulator": false, "storage": [ - {"name":"alarm.app.js","url":"app.js"}, - {"name":"alarm.boot.js","url":"boot.js"}, - {"name":"alarm.js","url":"alarm.js"}, - {"name":"alarm.img","url":"app-icon.js","evaluate":true}, - {"name":"alarm.wid.js","url":"widget.js"} - ], - "data": [{"name":"alarm.json"}] + {"name":"daysl.app.js","url":"app.js"}, + {"name":"daysl.img","url":"app-icon.js","evaluate":true}, + {"name":"daysl.wid.js","url":"widget.js"} + ] }, { "id": "wclock", diff --git a/apps/health/ChangeLog b/apps/health/ChangeLog index 5560f00bc..acf786e65 100644 --- a/apps/health/ChangeLog +++ b/apps/health/ChangeLog @@ -1 +1,2 @@ 0.01: New App! +0.02: Modified data format to include daily summaries diff --git a/apps/health/README.md b/apps/health/README.md index 0ba0d8228..456143844 100644 --- a/apps/health/README.md +++ b/apps/health/README.md @@ -28,7 +28,6 @@ to grab historical health info. ## TODO -* **Extend file format to include combined data for each day (to make graphs faster)** * `interface` page for desktop to allow data to be viewed and exported in common formats * More features in app: * Step counting goal (ensure pedometers use this) diff --git a/apps/health/app.js b/apps/health/app.js index f2df52972..e6fea91b2 100644 --- a/apps/health/app.js +++ b/apps/health/app.js @@ -11,7 +11,8 @@ function menuStepCount() { E.showMenu({ "":{title:"Step Counting"}, "< Back":()=>menuMain(), - "per hour":()=>stepsPerHour() + "per hour":()=>stepsPerHour(), + "per day":()=>stepsPerDay() }); } @@ -19,7 +20,8 @@ function menuMovement() { E.showMenu({ "":{title:"Movement"}, "< Back":()=>menuMain(), - "per hour":()=>movementPerHour() + "per hour":()=>movementPerHour(), + "per day":()=>movementPerDay(), }); } @@ -40,6 +42,23 @@ function stepsPerHour() { Bangle.setUI("updown", ()=>menuStepCount()); } +function stepsPerDay() { + E.showMessage("Loading..."); + var data = new Uint16Array(24); + require("health").readDailySummaries(new Date(), h=>data[h.day]+=h.steps); + g.clear(1); + Bangle.drawWidgets(); + g.reset(); + require("graph").drawBar(g, data, { + y:24, + miny: 0, + axes : true, + gridx : 5, + gridy : 2000 + }); + Bangle.setUI("updown", ()=>menuStepCount()); +} + function movementPerHour() { E.showMessage("Loading..."); var data = new Uint16Array(24); @@ -57,6 +76,23 @@ function movementPerHour() { Bangle.setUI("updown", ()=>menuStepCount()); } +function movementPerDay() { + E.showMessage("Loading..."); + var data = new Uint16Array(24); + require("health").readDailySummaries(new Date(), h=>data[h.day]+=h.movement); + g.clear(1); + Bangle.drawWidgets(); + g.reset(); + require("graph").drawBar(g, data, { + y:24, + miny: 0, + axes : true, + gridx : 5, + ylabel : null + }); + Bangle.setUI("updown", ()=>menuStepCount()); +} + Bangle.loadWidgets(); Bangle.drawWidgets(); menuMain(); diff --git a/apps/health/boot.js b/apps/health/boot.js index d6b84ce98..0da4af086 100644 --- a/apps/health/boot.js +++ b/apps/health/boot.js @@ -4,7 +4,7 @@ Bangle.on("health", health => { const DB_RECORD_LEN = 4; const DB_RECORDS_PER_HR = 6; - const DB_RECORDS_PER_DAY = DB_RECORDS_PER_HR*24; + const DB_RECORDS_PER_DAY = DB_RECORDS_PER_HR*24 + 1/*summary*/; const DB_RECORDS_PER_MONTH = DB_RECORDS_PER_DAY*31; const DB_HEADER_LEN = 8; const DB_FILE_LEN = DB_HEADER_LEN + DB_RECORDS_PER_MONTH*DB_RECORD_LEN; @@ -17,6 +17,12 @@ Bangle.on("health", health => { (DB_RECORDS_PER_HR*d.getHours()) + (0|(d.getMinutes()*DB_RECORDS_PER_HR/60)); } + function getRecordData(health) { + return String.fromCharCode( + health.steps>>8,health.steps&255, // 16 bit steps + health.bpm, // 8 bit bpm + Math.min(health.movement / 8, 255)); // movement + } var rec = getRecordIdx(d); var fn = getRecordFN(d); @@ -30,9 +36,30 @@ Bangle.on("health", health => { } else { require("Storage").write(fn, "HEALTH1\0", 0, DB_FILE_LEN); // header } - var recordData = String.fromCharCode( - health.steps>>8,health.steps&255, // 16 bit steps - health.bpm, // 8 bit bpm - Math.min(health.movement / 8, 255)); // movement - require("Storage").write(fn, recordData, DB_HEADER_LEN+(rec*DB_RECORD_LEN), DB_FILE_LEN); + var recordPos = DB_HEADER_LEN+(rec*DB_RECORD_LEN); + require("Storage").write(fn, getRecordData(health), recordPos, DB_FILE_LEN); + if (rec%DB_RECORDS_PER_DAY != DB_RECORDS_PER_DAY-1) return; + // we're at the end of the day. Read in all of the data for the day and sum it up + var sumPos = recordPos + DB_RECORD_LEN; // record after the current one is the sum + if (f.substr(sumPos, DB_RECORD_LEN)!="\xFF\xFF\xFF\xFF") { + print("HEALTH ERR: Daily summary already written!"); + return; + } + health = { steps:0, bpm:0, movement:0, records:0}; + var records = DB_RECORDS_PER_HR*24; + for (var i=0;i Date: Fri, 29 Oct 2021 13:55:57 +0100 Subject: [PATCH 300/392] banglejs2 support for widgets --- apps.json | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/apps.json b/apps.json index a3c77ff00..edc70c8ee 100644 --- a/apps.json +++ b/apps.json @@ -1424,7 +1424,7 @@ "icon": "widget.png", "type": "widget", "tags": "widget,clock", - "supports": ["BANGLEJS"], + "supports": ["BANGLEJS","BANGLEJS2"], "storage": [ {"name":"widclk.wid.js","url":"widget.js"} ] @@ -1633,7 +1633,7 @@ "icon": "widget.png", "type": "widget", "tags": "widget,tool,system", - "supports": ["BANGLEJS"], + "supports": ["BANGLEJS","BANGLEJS2"], "storage": [ {"name":"widver.wid.js","url":"widget.js"} ] @@ -1788,7 +1788,7 @@ "icon": "widget.png", "type": "widget", "tags": "widget,tools", - "supports": ["BANGLEJS"], + "supports": ["BANGLEJS","BANGLEJS2"], "storage": [ {"name":"widmp.wid.js","url":"widget.js"} ] @@ -3439,7 +3439,7 @@ "icon": "widget.png", "type": "widget", "tags": "widget,gps", - "supports": ["BANGLEJS"], + "supports": ["BANGLEJS","BANGLEJS2"], "readme": "README.md", "storage": [ {"name":"widgps.wid.js","url":"widget.js"} @@ -3965,7 +3965,7 @@ "icon": "widclkbttm.png", "type": "widget", "tags": "widget", - "supports": ["BANGLEJS"], + "supports": ["BANGLEJS","BANGLEJS2"], "readme": "README.md", "storage": [ {"name":"widclkbttm.wid.js","url":"widclkbttm.wid.js"} From f2f500e474109e91b8f83d5d2e76ee79bb09c194 Mon Sep 17 00:00:00 2001 From: Richard de Boer Date: Fri, 29 Oct 2021 18:35:55 +0200 Subject: [PATCH 301/392] menusmall: add `wrap` option --- apps.json | 2 +- apps/menusmall/ChangeLog | 1 + apps/menusmall/boot.js | 6 ++++-- 3 files changed, 6 insertions(+), 3 deletions(-) diff --git a/apps.json b/apps.json index edc70c8ee..ab56b2429 100644 --- a/apps.json +++ b/apps.json @@ -4059,7 +4059,7 @@ { "id": "menusmall", "name": "Small Menus", - "version": "0.01", + "version": "0.02", "description": "Replace Bangle.js 2's menus with a version that contains smaller text", "icon": "app.png", "type": "boot", diff --git a/apps/menusmall/ChangeLog b/apps/menusmall/ChangeLog index 5560f00bc..2f2e25462 100644 --- a/apps/menusmall/ChangeLog +++ b/apps/menusmall/ChangeLog @@ -1 +1,2 @@ 0.01: New App! +0.02: add `wrap` option \ No newline at end of file diff --git a/apps/menusmall/boot.js b/apps/menusmall/boot.js index 59e47b178..7ee3dfda1 100644 --- a/apps/menusmall/boot.js +++ b/apps/menusmall/boot.js @@ -100,8 +100,10 @@ E.showMenu = function(items) { if (l.selectEdit) { var item = l.selectEdit; item.value -= (dir||1)*(item.step||1); - if (item.min!==undefined && item.valueitem.max) item.value = item.max; + if (item.min!==undefined && item.valueitem.max) + item.value = (item.wrap && item.min!==undefined) ? item.min : item.max; if (item.onchange) item.onchange(item.value); l.draw(options.selected,options.selected); } else { From 310bf60ed76bd7e36380ca6725a12c4ad6dc2efd Mon Sep 17 00:00:00 2001 From: Richard de Boer Date: Fri, 29 Oct 2021 18:45:30 +0200 Subject: [PATCH 302/392] menusmall: use Bangle.appRect --- apps/menusmall/ChangeLog | 2 +- apps/menusmall/boot.js | 21 ++++++++------------- 2 files changed, 9 insertions(+), 14 deletions(-) diff --git a/apps/menusmall/ChangeLog b/apps/menusmall/ChangeLog index 2f2e25462..6de3d41f4 100644 --- a/apps/menusmall/ChangeLog +++ b/apps/menusmall/ChangeLog @@ -1,2 +1,2 @@ 0.01: New App! -0.02: add `wrap` option \ No newline at end of file +0.02: add `wrap` option, use Bangle.appRect \ No newline at end of file diff --git a/apps/menusmall/boot.js b/apps/menusmall/boot.js index 7ee3dfda1..805413e2b 100644 --- a/apps/menusmall/boot.js +++ b/apps/menusmall/boot.js @@ -1,28 +1,23 @@ "";//not entirely sure why we need this - related to how bootupdate adds these to .boot0 E.showMenu = function(items) { - g.clear(1).flip(); // clear screen if no menu supplied - Bangle.drawWidgets(); + g.clearRect(Bangle.appRect); // clear screen if no menu supplied if (!items) { Bangle.setUI(); return; } - var w = g.getWidth(); - var h = g.getHeight(); + var menuItems = Object.keys(items); var options = items[""]; if (options) menuItems.splice(menuItems.indexOf(""),1); if (!(options instanceof Object)) options = {}; - options.fontHeight=14; - options.x=0; - options.x2=w-1; - options.y=24; - options.y2=h-12; + options.fontHeight = options.fontHeight|14; if (options.selected === undefined) options.selected = 0; - var x = 0|options.x; - var x2 = options.x2||(g.getWidth()-1); - var y = 0|options.y; - var y2 = options.y2||(g.getHeight()-1); + var ar = Bangle.appRect; + var x = ar.x; + var x2 = ar.x2; + var y = ar.y; + var y2 = ar.y2 - 11; // padding at end for arrow if (options.title) y += 15; var loc = require("locale"); From aeaf508897cf5c6434b947a3291ae479ce6ed330 Mon Sep 17 00:00:00 2001 From: Gordon Williams Date: Fri, 29 Oct 2021 20:21:12 +0100 Subject: [PATCH 303/392] general widget fixes and tweaks --- apps.json | 6 +++--- apps/widgps/ChangeLog | 1 + apps/widgps/widget.js | 6 +++--- apps/widmp/ChangeLog | 2 ++ apps/widmp/widget.js | 41 +++++++++++++++++------------------------ apps/widver/ChangeLog | 1 + apps/widver/widget.js | 20 +++++++------------- 7 files changed, 34 insertions(+), 43 deletions(-) diff --git a/apps.json b/apps.json index edc70c8ee..7316c7802 100644 --- a/apps.json +++ b/apps.json @@ -1628,7 +1628,7 @@ { "id": "widver", "name": "Firmware Version Widget", - "version": "0.02", + "version": "0.03", "description": "Display the version of the installed firmware in the top widget section.", "icon": "widget.png", "type": "widget", @@ -1783,7 +1783,7 @@ { "id": "widmp", "name": "Moon Phase Widget", - "version": "0.01", + "version": "0.02", "description": "Display the current moon phase in blueish for the northern hemisphere in eight phases", "icon": "widget.png", "type": "widget", @@ -3434,7 +3434,7 @@ { "id": "widgps", "name": "GPS Widget", - "version": "0.02", + "version": "0.03", "description": "Tiny widget to show the power on/off status of the GPS. Require firmware v2.08.167 or later", "icon": "widget.png", "type": "widget", diff --git a/apps/widgps/ChangeLog b/apps/widgps/ChangeLog index d80e09912..57bb53bb7 100644 --- a/apps/widgps/ChangeLog +++ b/apps/widgps/ChangeLog @@ -1,2 +1,3 @@ 0.01: First version 0.02: Don't break if running on 2v08 firmware (just don't display anything) +0.03: Fix positioning diff --git a/apps/widgps/widget.js b/apps/widgps/widget.js index 19be2abaf..6ef55e27b 100644 --- a/apps/widgps/widget.js +++ b/apps/widgps/widget.js @@ -4,11 +4,11 @@ function draw() { g.reset(); if (Bangle.isGPSOn()) { - g.setColor(1,0.8,0); // on = amber + g.setColor("#FD0"); // on = amber } else { - g.setColor(0.3,0.3,0.3); // off = grey + g.setColor("#888"); // off = grey } - g.drawImage(atob("GBiBAAAAAAAAAAAAAA//8B//+BgYGBgYGBgYGBgYGBgYGBgYGB//+B//+BgYGBgYGBgYGBgYGBgYGBgYGB//+A//8AAAAAAAAAAAAA=="), 10+this.x, 2+this.y); + g.drawImage(atob("GBiBAAAAAAAAAAAAAA//8B//+BgYGBgYGBgYGBgYGBgYGBgYGB//+B//+BgYGBgYGBgYGBgYGBgYGBgYGB//+A//8AAAAAAAAAAAAA=="), this.x, 2+this.y); } var timerInterval; diff --git a/apps/widmp/ChangeLog b/apps/widmp/ChangeLog index 5560f00bc..3996d9e74 100644 --- a/apps/widmp/ChangeLog +++ b/apps/widmp/ChangeLog @@ -1 +1,3 @@ 0.01: New App! +0.02: Fix position and overdraw bugs + Better memory usage, theme support diff --git a/apps/widmp/widget.js b/apps/widmp/widget.js index cebdb60f5..d8abc3a9c 100644 --- a/apps/widmp/widget.js +++ b/apps/widmp/widget.js @@ -1,20 +1,6 @@ -/* jshint esversion: 6 */ -(() => { - - const BLACK = 0, MOON = 0x41f, MC = 29.5305882, NM = 694039.09; - var r = 12, mx = 0, my = 0; - - var moon = { - 0: () => { g.reset().setColor(BLACK).fillRect(mx - r, my - r, mx + r, my + r);}, - 1: () => { moon[0](); g.setColor(MOON).drawCircle(mx, my, r);}, - 2: () => { moon[3](); g.setColor(BLACK).fillEllipse(mx - r / 2, my - r, mx + r / 2, my + r);}, - 3: () => { moon[0](); g.setColor(MOON).fillCircle(mx, my, r).setColor(BLACK).fillRect(mx - r, my - r, mx, my + r);}, - 4: () => { moon[3](); g.setColor(MOON).fillEllipse(mx - r / 2, my - r, mx + r / 2, my + r);}, - 5: () => { moon[0](); g.setColor(MOON).fillCircle(mx, my, r);}, - 6: () => { moon[7](); g.setColor(MOON).fillEllipse(mx - r / 2, my - r, mx + r / 2, my + r);}, - 7: () => { moon[0](); g.setColor(MOON).fillCircle(mx, my, r).setColor(BLACK).fillRect(mx, my - r, mx + r + r, my + r);}, - 8: () => { moon[7](); g.setColor(BLACK).fillEllipse(mx - r / 2, my - r, mx + r / 2, my + r);} - }; +WIDGETS["widmoon"] = { area: "tr", width: 24, draw: function() { + const MC = 29.5305882, NM = 694039.09; + var r = 11, mx = this.x + 12; my = this.y + 12; function moonPhase(d) { var tmp, month = d.getMonth(), year = d.getFullYear(), day = d.getDate(); @@ -23,11 +9,18 @@ return Math.round(((tmp - (tmp | 0)) * 7)+1); } - function draw() { - mx = this.x; my = this.y + 12; - moon[moonPhase(Date())](); - } + const BLACK = g.theme.bg, MOON = 0x41f; + var moon = { + 0: () => { g.reset().setColor(BLACK).fillRect(mx - r, my - r, mx + r, my + r);}, + 1: () => { moon[0](); g.setColor(MOON).drawCircle(mx, my, r);}, + 2: () => { moon[3](); g.setColor(BLACK).fillEllipse(mx - r / 2, my - r, mx + r / 2, my + r);}, + 3: () => { moon[0](); g.setColor(MOON).fillCircle(mx, my, r).setColor(BLACK).fillRect(mx - r, my - r, mx, my + r);}, + 4: () => { moon[3](); g.setColor(MOON).fillEllipse(mx - r / 2, my - r, mx + r / 2, my + r);}, + 5: () => { moon[0](); g.setColor(MOON).fillCircle(mx, my, r);}, + 6: () => { moon[7](); g.setColor(MOON).fillEllipse(mx - r / 2, my - r, mx + r / 2, my + r);}, + 7: () => { moon[0](); g.setColor(MOON).fillCircle(mx, my, r).setColor(BLACK).fillRect(mx, my - r, mx + r, my + r);}, + 8: () => { moon[7](); g.setColor(BLACK).fillEllipse(mx - r / 2, my - r, mx + r / 2, my + r);} + }; + moon[moonPhase(Date())](); +} }; - WIDGETS["widmoon"] = { area: "tr", width: 24, draw: draw }; - -})(); diff --git a/apps/widver/ChangeLog b/apps/widver/ChangeLog index 30581c35b..06bf45fbd 100644 --- a/apps/widver/ChangeLog +++ b/apps/widver/ChangeLog @@ -1,2 +1,3 @@ 0.01: New Widget 0.02: Display "Rel" (Release) instead of 'undefined' when there is no Build number. +0.03: Add theme support, lower memory usage diff --git a/apps/widver/widget.js b/apps/widver/widget.js index eb751ca23..b6a8b7432 100644 --- a/apps/widver/widget.js +++ b/apps/widver/widget.js @@ -1,15 +1,9 @@ -/* jshint esversion: 6 */ -(() => { - var width = 28, - ver = process.env.VERSION.split('.'); - +WIDGETS["version"] = { area: "tr", width: 28, draw: function() { + var ver = process.env.VERSION.split('.'); // Example: if ver is 2v11 instead of 2v10.142 write "Rel" (Release) instead of Build number - if(typeof ver[1] === 'undefined'){ver[1] = "Rel";} + if(typeof ver[1] === 'undefined') ver[1] = "Rel"; - function draw() { - g.reset().setColor(0, 0.5, 1).setFont("6x8", 1); - g.drawString(ver[0], this.x + 2, this.y + 4, true); - g.setFontAlign(0, -1, 0).drawString(ver[1], this.x + width / 2, this.y + 14, true); - } - WIDGETS["version"] = { area: "tr", width: width, draw: draw }; -})(); + g.reset().setColor((g.getBPP()<8)?(g.theme.dark?"#0ff":"#00f"):"#08f").setFont("6x8"); + g.drawString(ver[0], this.x + 2, this.y + 4, true); + g.setFontAlign(0, -1, 0).drawString(ver[1], this.x + this.width / 2, this.y + 14, true); +} }; From 6d27159cddb910921217cb2c4ca74fa14cb5d887 Mon Sep 17 00:00:00 2001 From: Gordon Williams Date: Fri, 29 Oct 2021 20:50:51 +0100 Subject: [PATCH 304/392] health: Settings to turn HRM on --- apps.json | 2 +- apps/health/ChangeLog | 1 + apps/health/README.md | 10 +++++++++- apps/health/app.js | 25 ++++++++++++++++++++++++- apps/health/boot.js | 17 +++++++++++++++++ 5 files changed, 52 insertions(+), 3 deletions(-) diff --git a/apps.json b/apps.json index 7316c7802..e3e65a296 100644 --- a/apps.json +++ b/apps.json @@ -49,7 +49,7 @@ { "id": "health", "name": "Health Tracking", - "version": "0.02", + "version": "0.03", "description": "Logs health data and provides an app to view it (BETA - requires firmware 2v11)", "icon": "app.png", "tags": "tool,system", diff --git a/apps/health/ChangeLog b/apps/health/ChangeLog index acf786e65..9ce15a982 100644 --- a/apps/health/ChangeLog +++ b/apps/health/ChangeLog @@ -1,2 +1,3 @@ 0.01: New App! 0.02: Modified data format to include daily summaries +0.03: Settings to turn HRM on diff --git a/apps/health/README.md b/apps/health/README.md index 456143844..c69e2e45b 100644 --- a/apps/health/README.md +++ b/apps/health/README.md @@ -14,10 +14,18 @@ To view data, run the `Health` app from your watch. Stores: -* Heart rate (TODO) +* Heart rate * Step count * Movement +## Settings + +* **Heart Rt** - Whether to monitor heart rate or not + * **Off** - Don't turn HRM on, but record heart rate if the HRM was turned on by another app/widget + * **10 Min** - Turn HRM on every 10 minutes (for each heath entry) and turn it off after 2 minutes, or when a good reading is found + * **Always** - Keep HRM on all the time (more accurate recording, but reduces battery life to ~36 hours) + + ## Technical Info Once installed, the `health.boot.js` hooks onto the `Bangle.health` event and diff --git a/apps/health/app.js b/apps/health/app.js index e6fea91b2..6cc46298b 100644 --- a/apps/health/app.js +++ b/apps/health/app.js @@ -1,9 +1,32 @@ +function getSettings() { + return require("Storage").readJSON("health.json",1)||{}; +} + +function setSettings(s) { + require("Storage").writeJSON("health.json",s); +} + function menuMain() { E.showMenu({ "":{title:"Health Tracking"}, "< Back":()=>load(), "Step Counting":()=>menuStepCount(), - "Movement":()=>menuMovement() + "Movement":()=>menuMovement(), + "Settings":()=>menuSettings() + }); +} + +function menuSettings() { + var s=getSettings(); + E.showMenu({ + "":{title:"Health Tracking"}, + "< Back":()=>load(), + "Heart Rt":{ + value : 0|s.hrm, + min : 0, max : 2, + format : v=>["Off","10 mins","Always"][v], + onchange : v => { s.hrm=v;setSettings(s); } + } }); } diff --git a/apps/health/boot.js b/apps/health/boot.js index 0da4af086..200a89f67 100644 --- a/apps/health/boot.js +++ b/apps/health/boot.js @@ -1,3 +1,20 @@ +(function(){ + var settings = require("Storage").readJSON("health.json",1)||{}; + var hrm = 0|settings.hrm; + Bangle.setHRMPower(hrm!=0, "health"); + if (hrm==1) { + function onHealth() { + Bangle.setHRMPower(1, "health"); + setTimeout(()=>Bangle.setHRMPower(0, "health"),2*60000); // give it 2 minutes + } + Bangle.on("health", onHealth); + Bangle.on('HRM', h => { + if (h.confidence>80) Bangle.setHRMPower(0, "health"); + }); + onHealth(); + } +})(); + Bangle.on("health", health => { // ensure we write health info for *last* block var d = new Date(Date.now() - 590000); From 77a74fbeb7a2f7e446ab09d3451cfe7ef6e7aa4d Mon Sep 17 00:00:00 2001 From: David Skrabal Date: Fri, 29 Oct 2021 17:37:33 -0400 Subject: [PATCH 305/392] Update README.md Updated links to travis-ci.org to app.travis-ci.com per "ORG Shutdown" https://blog.travis-ci.com/2021-05-07-orgshutdown --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 531114a34..21f5dbff9 100644 --- a/README.md +++ b/README.md @@ -1,10 +1,10 @@ Bangle.js App Loader (and Apps) ================================ -[![Build Status](https://travis-ci.org/espruino/BangleApps.svg?branch=master)](https://travis-ci.org/espruino/BangleApps) +[![Build Status](https://app.travis-ci.com/espruino/BangleApps.svg?branch=master)](https://app.travis-ci.com/github/espruino/BangleApps) * Try the **release version** at [banglejs.com/apps](https://banglejs.com/apps) -* Try the **development version** at [github.io](https://espruino.github.io/BangleApps/) +* Try the **development version** at [espruino.github.io](https://espruino.github.io/BangleApps/) **All software (including apps) in this repository is MIT Licensed - see [LICENSE](LICENSE)** By submitting code to this repository you confirm that you are happy with it being MIT licensed, From c0c8f36573af70a78572f38d59f061ad4a42f272 Mon Sep 17 00:00:00 2001 From: Gordon Williams Date: Mon, 1 Nov 2021 09:54:28 +0000 Subject: [PATCH 306/392] health 0.04: Add HRM graph view Don't restart HRM when changing apps if we've already got a good BPM value --- apps.json | 2 +- apps/health/ChangeLog | 2 ++ apps/health/app.js | 65 +++++++++++++++++++++++++++++++++++++++---- apps/health/boot.js | 4 +-- 4 files changed, 65 insertions(+), 8 deletions(-) diff --git a/apps.json b/apps.json index bdc9cc7bf..494b98766 100644 --- a/apps.json +++ b/apps.json @@ -49,7 +49,7 @@ { "id": "health", "name": "Health Tracking", - "version": "0.03", + "version": "0.04", "description": "Logs health data and provides an app to view it (BETA - requires firmware 2v11)", "icon": "app.png", "tags": "tool,system", diff --git a/apps/health/ChangeLog b/apps/health/ChangeLog index 9ce15a982..a21d76fd1 100644 --- a/apps/health/ChangeLog +++ b/apps/health/ChangeLog @@ -1,3 +1,5 @@ 0.01: New App! 0.02: Modified data format to include daily summaries 0.03: Settings to turn HRM on +0.04: Add HRM graph view + Don't restart HRM when changing apps if we've already got a good BPM value diff --git a/apps/health/app.js b/apps/health/app.js index 6cc46298b..4d692e638 100644 --- a/apps/health/app.js +++ b/apps/health/app.js @@ -12,6 +12,7 @@ function menuMain() { "< Back":()=>load(), "Step Counting":()=>menuStepCount(), "Movement":()=>menuMovement(), + "Heart Rate":()=>menuHRM(), "Settings":()=>menuSettings() }); } @@ -20,7 +21,7 @@ function menuSettings() { var s=getSettings(); E.showMenu({ "":{title:"Health Tracking"}, - "< Back":()=>load(), + "< Back":()=>menuMain(), "Heart Rt":{ value : 0|s.hrm, min : 0, max : 2, @@ -48,6 +49,16 @@ function menuMovement() { }); } +function menuHRM() { + E.showMenu({ + "":{title:"Heart Rate"}, + "< Back":()=>menuMain(), + "per hour":()=>hrmPerHour(), + "per day":()=>hrmPerDay(), + }); +} + + function stepsPerHour() { E.showMessage("Loading..."); var data = new Uint16Array(24); @@ -67,7 +78,7 @@ function stepsPerHour() { function stepsPerDay() { E.showMessage("Loading..."); - var data = new Uint16Array(24); + var data = new Uint16Array(31); require("health").readDailySummaries(new Date(), h=>data[h.day]+=h.steps); g.clear(1); Bangle.drawWidgets(); @@ -82,6 +93,50 @@ function stepsPerDay() { Bangle.setUI("updown", ()=>menuStepCount()); } +function hrmPerHour() { + E.showMessage("Loading..."); + var data = new Uint16Array(24); + var cnt = new Uint8Array(23); + require("health").readDay(new Date(), h=>{ + data[h.hr]+=h.bpm; + if (h.bpm) cnt[h.hr]++; + }); + data.forEach((d,i)=>data[i] = d/cnt[i]); + g.clear(1); + Bangle.drawWidgets(); + g.reset(); + require("graph").drawBar(g, data, { + y:24, + miny: 0, + axes : true, + gridx : 6, + gridy : 20 + }); + Bangle.setUI("updown", ()=>menuHRM()); +} + +function hrmPerDay() { + E.showMessage("Loading..."); + var data = new Uint16Array(31); + var cnt = new Uint8Array(31); + require("health").readDailySummaries(new Date(), h=>{ + data[h.day]+=h.bpm; + if (h.bpm) cnt[h.day]++; + }); + data.forEach((d,i)=>data[i] = d/cnt[i]); + g.clear(1); + Bangle.drawWidgets(); + g.reset(); + require("graph").drawBar(g, data, { + y:24, + miny: 0, + axes : true, + gridx : 5, + gridy : 20 + }); + Bangle.setUI("updown", ()=>menuHRM()); +} + function movementPerHour() { E.showMessage("Loading..."); var data = new Uint16Array(24); @@ -96,12 +151,12 @@ function movementPerHour() { gridx : 6, ylabel : null }); - Bangle.setUI("updown", ()=>menuStepCount()); + Bangle.setUI("updown", ()=>menuMovement()); } function movementPerDay() { E.showMessage("Loading..."); - var data = new Uint16Array(24); + var data = new Uint16Array(31); require("health").readDailySummaries(new Date(), h=>data[h.day]+=h.movement); g.clear(1); Bangle.drawWidgets(); @@ -113,7 +168,7 @@ function movementPerDay() { gridx : 5, ylabel : null }); - Bangle.setUI("updown", ()=>menuStepCount()); + Bangle.setUI("updown", ()=>menuMovement()); } Bangle.loadWidgets(); diff --git a/apps/health/boot.js b/apps/health/boot.js index 200a89f67..17fbaaaa8 100644 --- a/apps/health/boot.js +++ b/apps/health/boot.js @@ -1,7 +1,6 @@ (function(){ var settings = require("Storage").readJSON("health.json",1)||{}; var hrm = 0|settings.hrm; - Bangle.setHRMPower(hrm!=0, "health"); if (hrm==1) { function onHealth() { Bangle.setHRMPower(1, "health"); @@ -11,8 +10,9 @@ Bangle.on('HRM', h => { if (h.confidence>80) Bangle.setHRMPower(0, "health"); }); + if (Bangle.getHealthStatus().bpmConfidence) return; onHealth(); - } + } else Bangle.setHRMPower(hrm!=0, "health"); })(); Bangle.on("health", health => { From ed9daa139afe6076b4d65ec499da3383aa826d52 Mon Sep 17 00:00:00 2001 From: Gordon Williams Date: Mon, 1 Nov 2021 11:38:58 +0000 Subject: [PATCH 307/392] ensure non-ascii is converted properly --- bin/firmwaremaker_c.js | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/bin/firmwaremaker_c.js b/bin/firmwaremaker_c.js index ec49aa19a..28fbd2f05 100755 --- a/bin/firmwaremaker_c.js +++ b/bin/firmwaremaker_c.js @@ -102,7 +102,13 @@ function fileGetter(url) { fs.writeFileSync(url, code); } } - return Promise.resolve(fs.readFileSync(url).toString("binary")); + var blob = fs.readFileSync(url); + var data; + if (url.endsWith(".js") || url.endsWith(".json")) + data = blob.toString(); // allow JS/etc to be written in UTF-8 + else + data = blob.toString("binary") + return Promise.resolve(data); } // If file should be evaluated, try and do it... From 6f5b902adb13c97186a67ea27a07b8fc1f568e5e Mon Sep 17 00:00:00 2001 From: jeffmer Date: Mon, 1 Nov 2021 17:46:50 +0000 Subject: [PATCH 308/392] multiclock - new bangle 2 compatible --- apps.json | 18 ++-- apps/multiclock/ChangeLog | 23 +++-- apps/multiclock/README.md | 52 ----------- apps/multiclock/{ana.js => ana.face.js} | 46 +++++----- apps/multiclock/anaface.jpg | Bin 44568 -> 0 bytes apps/multiclock/apps_entry.json | 19 ---- apps/multiclock/big.face.js | 31 +++++++ apps/multiclock/big.js | 32 ------- apps/multiclock/bigface.jpg | Bin 40453 -> 0 bytes .../{multiclock-icon.js => clock-icon.js} | 2 +- apps/multiclock/clock.img | Bin 0 -> 1156 bytes apps/multiclock/clock.info | 1 + apps/multiclock/clock.js | 69 -------------- apps/multiclock/{multiclock.png => clock.png} | Bin apps/multiclock/digi.face.js | 38 ++++++++ apps/multiclock/digi.js | 33 ------- apps/multiclock/digiface.jpg | Bin 48073 -> 0 bytes apps/multiclock/dk.face.js | 40 +++++++++ apps/multiclock/multiclock.app.js | 85 ++++++++++++++++++ apps/multiclock/nifty.face.js | 55 ++++++++++++ apps/multiclock/ped.js | 41 --------- apps/multiclock/timdat.js | 47 ---------- apps/multiclock/{txt.js => txt.face.js} | 37 ++++---- apps/multiclock/txtface.jpg | Bin 51801 -> 0 bytes 24 files changed, 316 insertions(+), 353 deletions(-) delete mode 100644 apps/multiclock/README.md rename apps/multiclock/{ana.js => ana.face.js} (59%) delete mode 100644 apps/multiclock/anaface.jpg delete mode 100644 apps/multiclock/apps_entry.json create mode 100644 apps/multiclock/big.face.js delete mode 100644 apps/multiclock/big.js delete mode 100644 apps/multiclock/bigface.jpg rename apps/multiclock/{multiclock-icon.js => clock-icon.js} (90%) create mode 100644 apps/multiclock/clock.img create mode 100644 apps/multiclock/clock.info delete mode 100644 apps/multiclock/clock.js rename apps/multiclock/{multiclock.png => clock.png} (100%) create mode 100644 apps/multiclock/digi.face.js delete mode 100644 apps/multiclock/digi.js delete mode 100644 apps/multiclock/digiface.jpg create mode 100644 apps/multiclock/dk.face.js create mode 100644 apps/multiclock/multiclock.app.js create mode 100644 apps/multiclock/nifty.face.js delete mode 100644 apps/multiclock/ped.js delete mode 100644 apps/multiclock/timdat.js rename apps/multiclock/{txt.js => txt.face.js} (56%) delete mode 100644 apps/multiclock/txtface.jpg diff --git a/apps.json b/apps.json index 494b98766..edf21dd2d 100644 --- a/apps.json +++ b/apps.json @@ -2683,22 +2683,22 @@ { "id": "multiclock", "name": "Multi Clock", - "version": "0.13", + "version": "0.07", "description": "Clock with multiple faces - Big, Analogue, Digital, Text, Time-Date.\n Switch between faces with BTN1 & BTN3", "icon": "multiclock.png", "type": "clock", "tags": "clock", - "supports": ["BANGLEJS"], + "supports": ["BANGLEJS","BANGLEJS2"], "readme": "README.md", "allow_emulator": true, "storage": [ - {"name":"multiclock.app.js","url":"clock.js"}, - {"name":"big.face.js","url":"big.js"}, - {"name":"ana.face.js","url":"ana.js"}, - {"name":"digi.face.js","url":"digi.js"}, - {"name":"txt.face.js","url":"txt.js"}, - {"name":"timdat.face.js","url":"timdat.js"}, - {"name":"ped.face.js","url":"ped.js"}, + {"name":"multiclock.app.js","url":"multiclock.app.js"}, + {"name":"big.face.js","url":"big.face.js"}, + {"name":"ana.face.js","url":"ana.face.js"}, + {"name":"digi.face.js","url":"digi.face.js"}, + {"name":"txt.face.js","url":"txt.face.js"}, + {"name":"dk.face.js","url":"dk.face.js"}, + {"name":"nifty.face.js","url":"nifty.face.js"}, {"name":"multiclock.img","url":"multiclock-icon.js","evaluate":true} ] }, diff --git a/apps/multiclock/ChangeLog b/apps/multiclock/ChangeLog index 2f27f7f28..f40f04031 100644 --- a/apps/multiclock/ChangeLog +++ b/apps/multiclock/ChangeLog @@ -1,13 +1,10 @@ -0.01: New App! -0.02: Separate *.face.js files for faces -0.03: Renaming -0.04: Bug Fixes -0.05: Add README -0.06: Add txt clock -0.07: Add Time Date clock and fix font sizes -0.08: Add pinned clock face -0.09: Added Pedometer clock -0.10: Added GPS and Grid Ref clock faces -0.11: Updated Pedometer clock to retrieve steps from either wpedom or activepedom -0.12: Removed GPS and Grid Ref clock faces, superceded by GPS setup and Walkers Clock -0.13: Localised digi.js and timdat.js \ No newline at end of file +0.01: Initial version +0.02: Add pinned clock facility +0.03: Lnng touch switch to night clock - ANCS off, dimmed +0.04: use theme, font heights etc +0.05: make Bangle compatible +0.06: add minute tick for efficiency and nifty A clock +0.07: compatible with Bang;e.js 2 + + + diff --git a/apps/multiclock/README.md b/apps/multiclock/README.md deleted file mode 100644 index b1773b8df..000000000 --- a/apps/multiclock/README.md +++ /dev/null @@ -1,52 +0,0 @@ -# Multiclock - -This is a clock app that supports multiple clock faces. The user can switch between faces while retaining widget state which makes the switch fast and preserves state such as bluetooth connections. Currently there are four clock faces as shown below. To my eye, these faces look better when widgets are hidden using **widviz**. - -### Analog Clock Face -![](anaface.jpg) - -### Digital Clock Face -![](digiface.jpg) - -### Big Digit Clock Face -![](bigface.jpg) - -### Text Clock Face -![](txtface.jpg) - -### Time and Date Clock Face - - -## Controls -Clock faces are kept in a circular list. - -*BTN1* - switches to the next clock face. - -*BTN2* - switches to the app launcher. - -*BTN3* - switches to the previous clock face. - -## Adding a new face -Clock faces are described in javascript storage files named `name.face.js`. For example, the Analog Clock Face is described in `ana.face.js`. These files have the following structure: - -``` -(() => { - function getFace(){ - function onSecond(){ - //draw digits, hands etc - } - function drawAll(){ - //draw background + initial state of digits, hands etc - } - return {init:drawAll, tick:onSecond}; - } - return getFace; -})(); -``` -For those familiar with the structure of widgets, this is similar, however, there is an additional level of function nesting. This means that although faces are loaded when the clock app starts running they are not instantiated until their `getFace` function is called, i.e. memory is not allocated to structures such as image buffer arrays declared in `getFace` until the face is selected. Consequently, adding a face does not require a lot of extra memory. - -The app at start up loads all files `*.face.js`. The simplest way of adding a face is thus to load it into `Storage` using the WebIDE. Similarly, to remove an unwanted face, simply delete it from `Storage` using the WebIDE. - -## Support - -Please report bugs etc. by raising an issue [here](https://github.com/jeffmer/JeffsBangleAppsDev). \ No newline at end of file diff --git a/apps/multiclock/ana.js b/apps/multiclock/ana.face.js similarity index 59% rename from apps/multiclock/ana.js rename to apps/multiclock/ana.face.js index 4fd5a7251..af1c84c9f 100644 --- a/apps/multiclock/ana.js +++ b/apps/multiclock/ana.face.js @@ -5,54 +5,60 @@ const p = Math.PI/2; const PRad = Math.PI/180; + var cx = g.getWidth()/2; + var cy = 12+g.getHeight()/2; + var scale = (g.getHeight()-24)/(240-24); + scale = scale>=1 ? 1 : scale; + function seconds(angle, r) { const a = angle*PRad; - const x = 120+Math.sin(a)*r; - const y = 134-Math.cos(a)*r; + const x = cx+Math.sin(a)*r; + const y = cy-Math.cos(a)*r; if (angle % 90 == 0) { - g.setColor(0,1,1); + g.setColor(g.theme.fg2); g.fillRect(x-6,y-6,x+6,y+6); } else if (angle % 30 == 0){ - g.setColor(0,1,1); + g.setColor(g.theme.fg); g.fillRect(x-4,y-4,x+4,y+4); } else { - g.setColor(1,1,1); + g.setColor(g.theme.fg); g.fillRect(x-1,y-1,x+1,y+1); } } function hand(angle, r1,r2, r3) { + r1 = scale*r1; r2=scale*r2; r3 = scale*r3; const a = angle*PRad; g.fillPoly([ - 120+Math.sin(a)*r1, - 134-Math.cos(a)*r1, - 120+Math.sin(a+p)*r3, - 134-Math.cos(a+p)*r3, - 120+Math.sin(a)*r2, - 134-Math.cos(a)*r2, - 120+Math.sin(a-p)*r3, - 134-Math.cos(a-p)*r3]); + cx+Math.sin(a)*r1, + cy-Math.cos(a)*r1, + cx+Math.sin(a+p)*r3, + cy-Math.cos(a+p)*r3, + cx+Math.sin(a)*r2, + cy-Math.cos(a)*r2, + cx+Math.sin(a-p)*r3, + cy-Math.cos(a-p)*r3]); } var minuteDate; var secondDate; function onSecond() { - g.setColor(0,0,0); + g.setColor(g.theme.bg); hand(360*secondDate.getSeconds()/60, -5, 90, 3); if (secondDate.getSeconds() === 0) { hand(360*(minuteDate.getHours() + (minuteDate.getMinutes()/60))/12, -16, 60, 7); hand(360*minuteDate.getMinutes()/60, -16, 86, 7); minuteDate = new Date(); } - g.setColor(1,1,1); + g.setColor(g.theme.fg); hand(360*(minuteDate.getHours() + (minuteDate.getMinutes()/60))/12, -16, 60, 7); hand(360*minuteDate.getMinutes()/60, -16, 86, 7); - g.setColor(0,1,1); + g.setColor(g.theme.fg2); secondDate = new Date(); hand(360*secondDate.getSeconds()/60, -5, 90, 3); - g.setColor(0,0,0); - g.fillCircle(120,134,2); + g.setColor(g.theme.bg); + g.fillCircle(cx,cy,2); } function drawAll() { @@ -60,11 +66,11 @@ // draw seconds g.setColor(1,1,1); for (let i=0;i<60;i++) - seconds(360*i/60, 100); + seconds(360*i/60, 100*scale); onSecond(); } - return {init:drawAll, tick:onSecond}; + return {init:drawAll, tick:onSecond, tickpersec:true}; } return getFace; diff --git a/apps/multiclock/anaface.jpg b/apps/multiclock/anaface.jpg deleted file mode 100644 index 86aaccd5496cbd435baa8bc522eec38b71e768ea..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 44568 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 GfB)IuGe&O! diff --git a/apps/multiclock/apps_entry.json b/apps/multiclock/apps_entry.json deleted file mode 100644 index 6383609c1..000000000 --- a/apps/multiclock/apps_entry.json +++ /dev/null @@ -1,19 +0,0 @@ -{ "id": "multiclock", - "name": "Multi Clock", - "icon": "multiclock.png", - "version":"0.06", - "description": "Clock with multiple faces - Big, Analogue, Digital, Text.\n Switch between faces with BT1 & BTN3", - "readme": "README.md", - "tags": "clock", - "type":"clock", - "allow_emulator":false, - "storage": [ - {"name":"multiclock.app.js","url":"clock.min.js"}, - {"name":"big.face.js","url":"big.min.js"}, - {"name":"ana.face.js","url":"ana.min.js"}, - {"name":"digi.face.js","url":"digi.min.js"}, - {"name":"txt.face.js","url":"txt.min.js"}, - {"name":"ped.face.js","url":"ped.js"}, - {"name":"multiclock.img","url":"multiclock-icon.js","evaluate":true} - ] - }, diff --git a/apps/multiclock/big.face.js b/apps/multiclock/big.face.js new file mode 100644 index 000000000..2db4ee4d4 --- /dev/null +++ b/apps/multiclock/big.face.js @@ -0,0 +1,31 @@ +(() => { + + function getFace(){ + + const W = g.getWidth(); + const H = g.getHeight(); + const F = 132*H/240; // reasonable approximation + + function drawTime() { + d = new Date() + g.reset(); + var da = d.toString().split(" "); + var time = da[4].substr(0, 5).split(":"); + var hours = time[0], + minutes = time[1]; + g.clearRect(0,24,W-1,H-1); + g.setColor(g.theme.fg); + g.setFont("Vector",F); + g.setFontAlign(0,-1); + g.drawString(hours,W/2,24,true); + g.setColor(g.theme.fg2); + g.drawString(minutes,W/2,12+H/2,true); + } + + + return {init:drawTime, tick:drawTime, tickpersecond:false}; + } + + return getFace; + +})(); \ No newline at end of file diff --git a/apps/multiclock/big.js b/apps/multiclock/big.js deleted file mode 100644 index 2e83d8fb5..000000000 --- a/apps/multiclock/big.js +++ /dev/null @@ -1,32 +0,0 @@ -(() => { - - function getFace(){ - - function drawTime(d) { - g.reset(); - var da = d.toString().split(" "); - var time = da[4].substr(0, 5).split(":"); - var hours = time[0], - minutes = time[1]; - g.clearRect(0,24,239,239); - g.setColor(1,1,1); - g.setFont("Vector",132); - g.drawString(hours,50,24,true); - g.drawString(minutes,50,132,true); - } - - function onSecond(){ - var t = new Date(); - if (t.getSeconds() === 0) drawTime(t); - } - - function drawAll(){ - drawTime(new Date()); - } - - return {init:drawAll, tick:onSecond}; - } - - return getFace; - -})(); \ No newline at end of file diff --git a/apps/multiclock/bigface.jpg b/apps/multiclock/bigface.jpg deleted file mode 100644 index 6857268644e9f09aca81bdd2b8ef32c9633b2f66..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 40453 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 diff --git a/apps/multiclock/multiclock-icon.js b/apps/multiclock/clock-icon.js similarity index 90% rename from apps/multiclock/multiclock-icon.js rename to apps/multiclock/clock-icon.js index 41a59f503..bad6313ba 100644 --- a/apps/multiclock/multiclock-icon.js +++ b/apps/multiclock/clock-icon.js @@ -1 +1 @@ -require("heatshrink").decompress(atob("mEwwkEogA/AFGIAAQVVDKQWHDB1IC5OECx8z///mYYOBoWDCoIADnBJLFwQWGDAgwIEYU/CQXwh4EC+YwKBIOPFQYXE//4C5BGCIQgXF/5IILo4XGMIQXHLoYXIMIRGMC45IHC4KkGC45IBC4yNEC5KRBC7h2HC5B4GC5EggQXOBwvygEAl6QHC4sikRGEhGAJAgNBC75HIgZHNO48AgIJER54xCiYXKa5AxCGAjvPGA4XIwYXHbQs4C46QGGAbZDB4IXEPBQAEOwwXDJBJGEC4xILIxQwDSJCNDFwwXDMIh0ELoQXIJARhDC4hdCIw4wEDAQXDCwQuIGAgABmYXBmYHDFxIYGAAoWLJIgAGCxgYJCxwZGCqIA/AC4A=")) +require("heatshrink").decompress(atob("mEwwkEogA/AFGIAAQVVDKQWHDB1IC5OECx8z///mYYOBoWDCoIADnBJLFwQWGDAgwIEYU/CQXwh4EC+YwKBIOPFQYXE//4C5BGCIQgXF/5IILo4XGMIQXHLoYXIMIRGMC45IHC4KkGC45IBC4yNEC5KRBC7h2HC5B4GC5EggQXOBwvygEAl6QHC4sikRGEhGAJAgNBC75HIgZHNO48AgIJER54xCiYXKa5AxCGAjvPGA4XIwYXHbQs4C46QGGAbZDB4IXEPBQAEOwwXDJBJGEC4xILIxQwDSJCNDFwwXDMIh0ELoQXIJARhDC4hdCIw4wEDAQXDCwQuIGAgABmYXBmYHDFxIYGAAoWLJIgAGCxgYJCxwZGCqIA/AC4A=")) \ No newline at end of file diff --git a/apps/multiclock/clock.img b/apps/multiclock/clock.img new file mode 100644 index 0000000000000000000000000000000000000000..57e0a935f35d622d52dfb29a3e2af584d16eb56f GIT binary patch literal 1156 zcmchVy-veG5QNQ7K}V4nu>1mvce z)9La!{o86-w`QbVSCN1>fqCVZO@-spY-D&7!0yd_z2H*?v#=QgDnQN|*&omN`P>w= z_D&J!_9Y?65GOYYm3rjUA)G^9`EYPvGNn^ObDcePAmk^V<22I2iGJi|EB!PU@9(`0 zw#)-%SGIKBF#^Sh!P|X$FACES.push(eval(require("Storage").read(face)))); -var lastface = STOR.readJSON("multiclock.json")||{pinned:0}; -var iface = lastface.pinned; -var face = FACES[iface](); -var intervalRefSec; - -function stopdraw() { - if(intervalRefSec) {intervalRefSec=clearInterval(intervalRefSec);} -} - -function startdraw() { - g.clear(); - g.reset(); - Bangle.drawWidgets(); - face.init(); - intervalRefSec = setInterval(face.tick,1000); -} - -function setButtons(){ - function newFace(inc){ - var n = FACES.length-1; - iface+=inc; - iface = iface>n?0:iface<0?n:iface; - stopdraw(); - face = FACES[iface](); - startdraw(); - } - function finish(){ - if (lastface.pinned!=iface){ - lastface.pinned=iface; - STOR.write("multiclock.json",lastface); - } - Bangle.showLauncher(); - } - setWatch(finish, BTN2, {repeat:false,edge:"falling"}); - setWatch(newFace.bind(null,1), BTN1, {repeat:true,edge:"rising"}); - setWatch(newFace.bind(null,-1), BTN3, {repeat:true,edge:"rising"}); -} - -var SCREENACCESS = { - withApp:true, - request:function(){ - this.withApp=false; - stopdraw(); - clearWatch(); - }, - release:function(){ - this.withApp=true; - startdraw(); - setButtons(); - } -}; - -Bangle.on('lcdPower',function(on) { - if (!SCREENACCESS.withApp) return; - if (on) { - startdraw(); - } else { - stopdraw(); - } -}); - -g.clear(); -Bangle.loadWidgets(); -startdraw(); -setButtons(); - diff --git a/apps/multiclock/multiclock.png b/apps/multiclock/clock.png similarity index 100% rename from apps/multiclock/multiclock.png rename to apps/multiclock/clock.png diff --git a/apps/multiclock/digi.face.js b/apps/multiclock/digi.face.js new file mode 100644 index 000000000..1a72c1964 --- /dev/null +++ b/apps/multiclock/digi.face.js @@ -0,0 +1,38 @@ +(() => { + +function getFace(){ + + var W = g.getWidth(); + var H = g.getHeight(); + var scale = w/240; + + var buf = Graphics.createArrayBuffer(W,92,1,{msb:true}); + function flip() { + g.setColor(g.theme.fg); + g.drawImage({width:buf.getWidth(),height:buf.getHeight(),buffer:buf.buffer},0,H/2-46); + } + + var W = g.getWidth(); + var H = g.getHeight(); + + function drawTime() { + buf.clear(); + buf.setColor(1); + var d = new Date(); + var da = d.toString().split(" "); + var time = da[4]; + buf.setFont("Vector",54*scale); + buf.setFontAlign(0,-1); + buf.drawString(time,W/2,0); + buf.setFont("6x8",2); + buf.setFontAlign(0,-1); + var date = d.toString().substr(0,15); + buf.drawString(date, W/2, 70); + flip(); + } + return {init:drawTime, tick:drawTime, tickpersec:true}; +} + +return getFace; + +})(); \ No newline at end of file diff --git a/apps/multiclock/digi.js b/apps/multiclock/digi.js deleted file mode 100644 index 0b2ca4aaa..000000000 --- a/apps/multiclock/digi.js +++ /dev/null @@ -1,33 +0,0 @@ -(() => { - -var locale = require("locale"); - -function getFace(){ - - var buf = Graphics.createArrayBuffer(240,92,1,{msb:true}); - function flip() { - g.setColor(1,1,1); - g.drawImage({width:buf.getWidth(),height:buf.getHeight(),buffer:buf.buffer},0,85); - } - - function drawTime() { - buf.clear(); - buf.setColor(1); - var d = new Date(); - var da = d.toString().split(" "); - var time = da[4]; - buf.setFont("Vector",54); - buf.setFontAlign(0,-1); - buf.drawString(time,buf.getWidth()/2,0); - buf.setFont("6x8",2); - buf.setFontAlign(0,-1); - var date = locale.dow(d, 1) + " " + locale.date(d, 1); - buf.drawString(date, buf.getWidth()/2, 70); - flip(); - } - return {init:drawTime, tick:drawTime}; -} - -return getFace; - -})(); \ No newline at end of file diff --git a/apps/multiclock/digiface.jpg b/apps/multiclock/digiface.jpg deleted file mode 100644 index b0323bd55d1e9947e5573171b77d851445c5b8f9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 48073 zcmeFXbyOAI`!_s?1_^19l$3@;w}28N-Q6YK4Fb{)f;6HaNFyE6jes-~N+ZpoBo6Ql z-uLbIexLPw)_T^v-v8e3HRsI!%(bt5)$Ezsd(Yg?-Yx<6pGnI}0}u!R$buViyNpKn z)XT;a02CAeW&i-t01OBYfB+&C@E-=b{~M!&I0k|TAc7?X+yKY}0QoltfK&+CADjbu z^tTMC0mAjWEh;GY0RsJv2|!#PZUZ3w-L^A={vV7=1M&a~Cnq}#z((1`oLbq%@s4xn z<(2?+-3Yg#4ukf`AAl zK>&=uJVvNYLipoDLlWX2etQzqAKagW`nNw|K9kV@#?&Cj_|x`l62Wgim^FmiB)>ab zh?gKfoJOdU;f|q3Lqch zZ~h%d{1-<48&iRNlz;J|zx@P#Lz&Cx{_O+Ub5Jhxd4A)Ef4KrG`|B)%#{eeyNB*DA z;Qz#9;p7tHc z%=k}#Li_@-{E?potpTP^b~dhVoSaIy2!Jx63MhgX(qljj&;?QfV^CNINCJF;7GNJh zKu`h{fM6`kQ21Rh35WxN02{yw)-eM@U~M9>1>^!a z2+x7%fIO(-2_ORS0zBZJ57ZP6!~m{fLT|y^=fG3YwlLU|83layZhulKM z5F&t3zz~oEwQGZWQBYD7C;-SHDUf`~JOme^3itq6g87pMG(hi!K}!yR2fzWTgv>!s zA)E-qU=(Jc2g=}P4$1}s!JyB=kTnP$f-Hg^!U`BiERY5i0ZqUs(1#}A0L-fuWCN^c zMQ}p60yco}034u#NJ5@NG$1OFenjEdna!Col~9BLuO8xI$vVEe)(6 z1GjYuBZ5By9%L7&1=av&h$blU5)u!Igp@<7A-xbh1YraN1h9YpCWO0Qe@Fk6e;ok` znE&*aN$^&Ngp7iUreSGkV&$sgVPfZQq2p#_Z{ccYVrQXY;pAv$eIJ4k0EJO|C~c*9 z!Wo0WeEP+I1VwNMqPr&`c&(#$gZtlntvf!_AN~S}?lSyWmQjB5 zL5z9=+Wjpre5pgdkFl`oY)TS0zHV&dR2hD9X)Hdd#G+Mk0oC;1- z7S=YhJ}wq&K8osQKDK6p<}~7B)FNI&UiMD*7H%fgUiNklu0md-G{2P#f%uNiK|}pp z#LZTeMq5FdTFTMIf|{3|hnjktogIPI`KJvU_r~JGxkLa0v3pk4E#3(|INVv|1$8OA)bW;ID+s52XMgc9^j??&$tI1EOP<^l5z@2 z;93Ak;^Yur0FjJdh8!HbA^-^F2;u+=ryw^s50o513_!aZgK+XeImr?D|9v3xkI-Mb zz&qbZ1oqe zyu+q{;qKou>Z($p%q)nh&8$s89guSnvzq>kZ}l(yw_Q*Kxc9`y)ydApn_Bs=na>^X z|1)y4@B-ri04YZ&Zx zwC(oxw)sE2XKesb1-8U!{15Mu05}1<2LSzzP9`oUzx9DLEdaq1T&X+)=PXz{;8f-- z*hbIQk{ew50||mD2`(#rzr8&M*MU%z!MRPs?d{dO+uQ5+;52Ok0NNdH+W}lO2q)w* zB7_D&z=a^Se{OBVj*d@G&wia> zT;9b60TBNR3*7$|+5Z+7xSR<=Kte)9LcNO%g5Y@jlkH1@PPlEAQ23^du2Af4-u47fJpaqaczQ zTSHAaOfvKln!u`9%EY$AKw-49UjrYvUhx5DA&`!-zrY_@HoGX->(%3;tQTZ=XyouD z_B9vtu7>s=vy%+lJma|lUB>lO+V%OmLfJQ8<;au!oY_eU)3cBm9(&T7e3}Igb_FrK z3Ey~~**ZEpIuy5>)Cpy02;P2&2t_UMC~ZmaUUO)iOX1?31IHVW>RU9akjfBU6HR8piphnE0Y zEs}Zr%D=*#pRpbikQ5vea_ceE)(KB9Uk+N6P0VhGLW4+#HW7hGq^1kVSUJqPU&km2 zYYVc=QkrM;tM&W8KdHzG!!2U)`5iSL3j z=IVap5D=h@cA#c1I>eLYpJgolUB{aakjB#p`(P@A6z-WP7Xyy3bKg2!ccr`o>=OFCq8f?}M=3~jONKpE+ zirhHg2jJP3!N{199I4o4`|1su1YS5zb-T$>eB8z(dpW2mBkJO;KeY&hR*s^^HEh8@ z{(?pt9OBTKiKTR%7b-VYjkD+1Mak_y;KS{~+jr?Ub`lpaU_?snQxN3tKbfqB1$MJ3 zbypYn*A*B?#N6kLdtdS5bVrr&xy@JS8-Lr#bE74!K>4pBFFaO8R@Uox-(bk|lVCuH z&oO?sNK|;?cO0_@(B$|wjyPk$qx;B|Xsta@*B=_zuuqYy|3dY{U zL-D4*A+%LKyaisl_1C|+JZ69lc9=OctO)I0aM~V!@jB>1_Tb$O(ms(|kIV9JZ`d4f z#zB!U^2+S-k&Z1M7WumUAU3u%EiuHdp(%=#ug=T9+{q_olt)^BPTwW8iORuH+m9{7 zkzb*CYAG_zLp19X?vDeZJUExORw@;SiPHD&x#APSo1v7p1QCC3qshXq+;avTIR1g= z__#QkpUA}Ct7Lh5%#YsQ_`{WWf$OdEuOMmh9xH8`O6QLbb|0<;&U&sQZ-(2!=MOM! z(M4~8uv+OZ@49X1^if0KrNT$!iY!OTBp3M={p(x6GP5y@*+7szJXZcaoVz*J@JF{L zPe*&x#Quud1%n92pcrJVqJYyYu=|1NsvBCpJb5_PZtKL4&jGbJ3r3YPyBCKtH|Q7M zu+8P~xxR&7@1IW9khy=p8E;NA(0k$9fwbj}nRKDkU8?e4S)(crf_l+0a6-1vlkBAn=?&?oj=I8xH6+-nLS_TrfQ>R6w(%b%Zd+3*{J7x zlj_RDk2Y548ip*}H$$!!Vl7T6qOv>`V^S> z6)y3>=rP9Xp0kW=jQd3ud5Bo^JcYCNV1<Ky+@`wccAsmeY&w?p0TzM>8A+RJjSWiGFZq%iiU901(w~p}lyske z|D~JM_Qms&Nl;Q?dav*;AoTjcl0MF<&xtm-D~75-6^f0*m)Prbdhpfx;`)VP_TDk> z8s+fJO#J#bvzvLJzg&S^>?_+~=UIEUg#gN_7vH6iS_TM`a2P4Lw|z9#eMt#EXcw)m zo}f;UZ`RU{GryHeP~Jz)?KjKvxy+z4cG3F!v*qkzeG#n_W6UaI{aZoQsyL z&+%laf6?L0#GLMFCsaT2EMm#g2vc`$U(51mDq)Ql+Z12~R)Zmkg<_N0{F8M1b~T;S zBo{J8z35`yC+{X{)>1FR4ZjU+3%ky0kYwVX3HFnUHoFO;iuU=~)oMhw&p3-%>^~Wq!8F50hvZ@`9ai}d|^91WvZ4>20_g5rox)r#R z0o-2^n;v{wIG2`6Fja$yz5VyD)IllrKAf+)7_*$HJXvDmIX!f1J;tP7q}InoixFv) zRP$**-!w);A$ep>RrtEYwPj`-7FO8bs2{9Xbjqg6EhNX=$mMW9gz}IR<01M{Jsm9f zG`gdQ{vv*05hLXr<#=~xfB#xo{0DXNmnej{z-Ntj87rvK(y91d(EKA#CpzT5ly#gp zYj${K_AwI_7?qq?A|V-@C{z*IqfLiM<8UV9+M@?6s-(Mr z(DQ)?4O5kC$?pTS*c_w5p}h*x8c}=)!qD6n_MLLF#dW3Mj}$55Oj`S9tZKF}g_2Sq zcbu=?5a_3AB=fbgYEB&-;f)O*Sm%jl{2Ydj8v@KIN ztC6-QNg*JR*}d?1vw#xlHFUIkqZ8UANTN}acS5*usHarT9Lpx^iMNek>W+3Qd)Q9bRH~6|_#=)q z=0jt{2lK7^Tb{X%Lj1HQ;6_WbA7)rj&7+N`_79Rof4rF5FK1^j>wDAa(*I>0o&A%z z!CT0vprE@jQzzH#X&^TI@p%>Oszc}&2tH9Dbql<2I9#|mKj6^+XXC9Dlu$(EjGWh(Y$;u zM#{s1GUP3qno<8~Y@szrTgslUXdAQm_-%qLFk4nzIXE@UH{JDlY7j#$Pv7T0cg_p& zYT%3vH(Jc_mhLutOgYxx2rjqi=!K zY}a{MD)kMmKNiV`RjlM%IgX)|&}x~_Xh)BCE5o^_pu|P(B5lxQ?%q8o@oSA^tj%7> zR~fFmA!-@dpV{oQ-xR`6{3HCEj`ehL_EZjkb?EN3mc8E+>RGGf?sBzpp{uJ^PhA|h z-oWV8TKM#cxwKi4bAj?j$_r;tJ9q0z=T9=f7;gb&)$_=e(O0>j4!SBLbC8>TvGkt7 z4s+0F63{-iV3vQThowGRZ3I;AY-me@#D2!Z|dw-99CcO6N zJ2CyLeXO*8`=JyT-sTjO;Lf(hwmJEmdup)gv(iK9*u$Nb4;kz{pNU|#NWnAxmBRy( zdB^0PpDsdGevr;Vzp*56bq5UnIMl$Qycx{lYk|dg?vYD7mbH$$+q$~2vy~&%{jBdE zs~9Gw`>2Ttm06_Itn5~;XDyiCL^`^h*$Cb;yBq*JP|?o^GogV?i9(_Ek%`8w{Ox@i#ay$K}>M5fuer`e@l%6CPGV zy$`ywLjd=Pk6FfAwrulGv+$NmMpU#O?X%@ZmR=_=IduBQfz86x9=_?Fr_&$2c-T}2 zFM@iFv(YaBS-PoPpmNkM|9OGvJRKKB^#tn7@s56<60N+l)T32eAY`UNG_XwG1}4A4 z7{tTG4i~qfSpQJ(mc&}0v^gZN&u$!H@{7|fo#-iGY<#ROwD{$$$rjCdQ_-)eS15J0 zu-+&jWz%zD+2658S@+y^Z+c@2Z=v?e+u|%wYaTy|I)<}-fCQBe@tK;<1GUi6`V*tM z=FSJxFGc8KZVXjL!eYh^uLcu4OA@0~u1{2P2QP9=vs~1J3_jliomY-{TW8;?&uu&( z8a%^wbu4^ACN+RdXZqcO-ke#YpRRJ1+FWZR<`>j(Th(Z%#4=$H*m1T^*N{dtX>qVx z=n_4ik7Eh!qU4-8S(Li+8C7eWvJZd5{J7&2AOE5(q8)`Wq>t`2zc_YWFIRn=Z>CQ5 zbJ)jw^NWmF1X1csJJ*ZV?~Pp!Fh*L)DDY^MqU~Xi$7S7ST>zTH`Vf#MA#)<-c3U1D#|faB9qLCTZ%RHh`TI#&lp2O?^@;I^>(0CZvblQ#6Gam_XU zu*d2l+p+oa==$igVrX!Y7A>M!KD*o!#_&)cR!#iv7(8QYmCsU+K3G6^WW(}!##Q`) zLIZaw2CMXOOeJ#5)WB+_=5(h4JDZuZ9NxX?^gKBe+<5kNljB4>Gs=Yvn~emnt6D$f zj6CiI8J7~GpH>MM4$ynDvAtge<`f0`eno86hqi`j-tn>|R!Wz~dGw2jHNR4v zlVvag9oGRh#HjSeFEP>gC`V_+lUepTTAK5?(2~KbkbbRMXuG*Z$OEpGwMp%i8x#5k(@4@*KPWxSKS zHASgMw*J2$`C>L2T>V^$4VZWx)j4UBX=~&kUcPs=rLRw&Yw)$RCnJ6#tAX>T0hxS{ z5vhL7P1-CuMIV&kIjJy9Jm~U?-BV4^%hfPDODWN^-ZR}uK%OG0U zeeEhnvU=F`8<}X0<|dlq?*ea?=tQ0{*Nq2k{T$?q*?jxly+9G4fZ1#&p|&8}>pPEVFJO?O|FGa_b< ztwo?6>(^P#ql#EJM=Yarvv&SABDl{RuAdLoIv=Q!WqRdoXv85|{-pF?)F4QbZ)A+o z7>!a{kv77m&y(&Ps2{4%D9S2z&Xa6OrrF}6>olCUjyD~Va0gI1x-Ti}dvU^3 z#qnE-XBW19JwWh^H-e>Us`2)8G{s%AynThplBM4tMC@Vkdc8_l?9o^))tvD1M(#>m zsE=YERV1r}yS-V@%-9!mevil(v76W=iK`wz9m5CZUqj`6x%z&l`!KX1SbRbs*v z22QPatFEN=wY6c!mT8Y{oTw5QWJ6)8xJ)F`i}_?*2=Oyy-Q!9#CbigMnpFZUN}8Ds1pI)Uid1F zwXnG6GLf8z4JkvN_GT0Bqo(&!F&Z+zMA1Jn^ay^2O#&Z<@voxPuf|8}R`g(PQ5J$X zgVd+7Dui$Aqo(}Q0!&EEBe>WNqN}R}MVz#HdikRlcHW0Os(szRVfXUYJtrXpVe@c8{|@D}J`KWhJyzie+!r>X4XXvm0u(fsydmvjFt3Hyu-UoqVBXMpk)3ZTl1i5kXF)F;Hm#+Kk^)+v8

%dVj)EoM6^evDof^C~wH_e-QRWLDbd2C@EP8XjZK_cpW3rwGtX2#z)T%h9V*MCc< zQz=VZDA3=r6(U(2GW$)xWJQ!p<7+LG+X0@=u#E^ElU|W76dgF!2Yk-N79|k1WMFO4 zHG&f3r%X$T=bny+KRPe;joo_ObOXC{?|0Fb7X~_uIOVy?>FqJ^W2Ia)!Y9~BW4@NZfzB5%zD)Fv$A2$<9ziJ3K^K&TQLnO}R&ej#2^HCC zdQZy?2Ad-rI_GyiYCCR(RP@F=UnxD3HS9!;9Q^o2QwxaCrWW^!bk%HNWq{#4t>X1smVB8H1K{?2K2xVNHW2-``AnJ zq(F&oxhhd-u33ssA;Xr6S?F+0Ca$T>RJ&5{-BV0fCO40baMY@A*9S zLjGAD+xq7jk&{n5ES9eem!Q~GN`oejy*>wVI`jhv5 zK?ysVS6@A>&!e@$io=!>nR$6}eD3=!Q|)tI^Q38Ft_`*nlLZNbCeov=mrxlKRb4bV zuL(y)#@xo`@ERSkDab5#@`~InubpvTWO~5HxyJv^$|Cimj-FRkCr>DcDe*nq7Qx30 zNo_r$qVddVw6ugvZ{8RN&~%K_K_+t=Zvx|aH*<(4#g~zq0*QwyZt^}vuBK{_Wyqlr zN5K1x30y0yIV)6}`NWuN0tvkwNLQ;@q-99Wpfs2GqQr zK1Il=*|1w#9d&HZQ!>+l>>!c&isKJ-1*=Dshfo>nM~pK$-XAFnpeZ9d5!)WQj+;X0Q5oPO#5WB0q)KYex2Yu zmkuQ739+;-b&qt@5frF^Xduq<`4m;F^xik}tB@aAo?8bxN5c9zx8v~YFncv=Z(fpz zVe9O{Pofg@lUcbDN=u(1(D!OYxg@_-dbWlXwokGqZ;=>{=Unp$(}@(yS@lbB>EUWf z)KB|;qPel9DEt>k19zp zYQFVH&QqH&n;nf{%Tkrq_?hLJB~L>WqL=S2r?0ArsO-;S_RsHAHn(;*H43st8HaS*~2tf((lq$T z#^4-&a!kVWz{4GVSk-43l92!O+YCE=!^KyR%Qetbr31O9Jl?X-Qt^M0EWtxoPgXd0 zzB08I!=4mjamk^|eU`d1{e<(`K+(Kt(;&Mlk9m@JhPvz`a6MjaM~79I-6I;xoQ=lo z7#YBRSXZ)I@hX?fm@fx?npdw39iw+}MgCq&5=*AR8dI7Sfttd7R_WCm1c*pmyq@+s z%Zd?+S57a}+PTKc{D2?rhn|g^s%=eTA)oIgnhMP=J=&W`g)DG-dGiE2KVDdP=nb!~ z7yokGp18eu_#RuW`y|g!WWISS^z6Wbx8_xGo(f$EF}<8YkUk(+9w-SD-Ryjr59hqD zc-#1xCy)M`o$~E z>#<&Mal_d>F_ohzGDjDqM9zjp#dT3RJM46x>GZ*iz@hQ?)SQDSmuEd%Ho!Ij_y0(c z9TzX(pdA^Jl}d4?+0$EvR9B_bXBP$Q-=7FKJwlx$#7M40>gb^2b`TW7SZNvl;h72- zDD#I-Z=co|-|Q*!o8@+0_$u4wN*>Em>-WksB8I$VKFhUo_l54O)wa9z#oE^!$bZed-q<%5Q_>%ra5CzL_|ki|;@wXpTmzo7FSzhees82*qsBb1;#eaI>UB=s3CXdJk|6!AMQxnq-DCS87FU=ux#(vGN{xBrVR$w{ z%$Jqky{Yolhl_?>>tBjdJP}(ezLN!wAg5-R%=OrpkbI+UT)=(VpQyb2>1}S43!1U0 z3`%9{){0tc$4^s%_Q1KeucM2l;ak?mXDNPi#hpvK!T1oczuCgm+q3 zr)x#40mc`J+^q>imzo>wv;+wC_nuQTCeQB}XhpVC%v+a{pV>KLPX<%)$d5Y+r$kuv(k8Mm zGjd$FxywsTXH@iPn&hpI;OU5DE%_H*qok@{JGwreksP~>i_5XnOV*=Di}Puk^oc3n znhOP$jmV12*DUx~Cba{aKe|*Gw~}?6qEoEY@ez+HT6KN|#c+z4709z!9?LqmkUnB1 zyJj+6NI*>f+J^d4`mw-HkE`6glwx?r=ia0h;m-_5EI$Y1YgnIf$^}M33o##etj75l zXH_9{eP_DRL%P2z)<}KC@^Yd!E#QH-&nqIPqIo0PefyZ`j@}+tlod3?mwS}gJ74#B zY#ZHK?1i{V9=v)-(&qI}boa5!hLtsDH)fV`uFrHTqG8hylonUiC{{R@=lfCY`anA6dENdJvXKc{+L$Nu_Wrw)G30no z&PI+mbTC&h7NTNMx z1AhK`mW`{F_iDRGnEM!UD3KuV>7!yj4`P?ZpBJkXy@L7v@pkHfHoRELWWfp*wVr}` zak!+cU4_g7iq`8QQ^$QuIhD+l>^*!`M+^yrqEa@Dh!>F0EoQzhz$;A*MM~fci8p+e zc&XMm2-xv`M?o!+YO+x#5`WZB0=S+~ZDz!n1gKP&OKT-`<+N@txD^Bh%iK=Di>i_o z6zLlp;^?^S8$7%+x$hHmRbm#*CeD*Gm}PyWA=~3y;z{MJj8=c$JM37G8$`?HOsSug zmy)7hbwR|bs08g;!C_mOIDrpXc|DA?HuxqVaoFz8_%IxsGr$`K#n$pnww(88#p%6> zcURCJG%qvvZZ0dcl<)e3z<{ZQD}kQ0?C36$lI!xw)0)({MIu*%JcCGc`d_^x2rLc$ z#bt@})ZB@`Y$rwV-`loQOIM}3r*;l{em75y(Eb&vV-}G_N^dTy_tE<6+RQzy=YD9;1BmY-(Wwvx6?u)E*;#yAl$ zX5y9_L)Q|zDo4K1L2j4d?5&9I@*bf@x^MZ{s{oOK z&sp3o7~#F5r*`!6d9fhj8_(rMRLyY_VOYqS(j=oi4w_A}$h3#0L{Vn@;Gx0>lOyi~ zK}rrG#M)%Y>wP-Y)j_M_;l{GO^Gwj8J&NT~^e&iG|6yS?Pd1B+J#=ILU@+?1og!JU zkJ`e^z7S7RZWd!vz;4%+Wi8fqg{nI+BH;d4Kl;_!PX_1y^xbi}ZB@jEJN>IV^88TyYF=G`n&cu0N zfB=GBXun*6`tuermpR(qd(Zj>&MionBzHB^$C#twJzE@GLXqayL?vkJq4@wge6CzJ z>QO(yVfYz1IIV!poPKlHOZ|2vm7C&U-8bGu6%oLg+4EpGsf(6O_S-9rZjPaC=U%1N zbFHlYPLi8|S4YAyBgTl29%K6xn!2$z5Mk|80lVW%HBV+(g6zRbkLoezt0eCw|HmKA zNQHf_g#z4zna`%;m3T+Evamk`gtSkzkHpL-wr+f9<^vCv4uS%aTEzp#`NXlstrZMT z#P7-HztBqlEqOoh%x}D!7-h9LeCW6|(_S$Lj@9fB?*9M*pR zkj)$0yJeB&?J!nP7vS2=&GVK9;ha?xoK`L!JxFo7S>&~y|8mT1`8C$a%-%jQ5k~yF zrxHczMzVa)=FP8(XkWApIl+f&q|^v<9kk%ftKv3yv3s{bhj^P6)xFVTFZtE%a~Muk zjYOfIEvzkq?r=Kj-L}t1@V+!obTf@!!BIKqH5@v|@(fGLF3IZP}$~Q{7K^a2iQfoCGQP=7sN+m82PF z-w*N70PwX;hZ*=SiDS4pLYs{Nqw=}j^6^{iR_3wQMlbt!TwBBbc7AV&oPZZ3qmB^Ju$V2(H-$Cu~^f;k%)KCOFWeEvqH?sQM5A48=y0aA%&3}`>odB z0@@nCCLADC&8BVpxg)I?*Qu=#xFF1GkLoaRxvhJMK4ZRH?BO`8yRZtE+a#Mqz8N=) zGzxD!Ae2zv!tn(wQ0hAo_+HCAVBp7nH(y6QZNGBA!2mzjjD~M`5Ph1>9sCs+$qmJ0uBSPY^ z1uwPOToK!&JQCWIN1Wq0xproDGHzxZ!M9;?fmN#|vTgTj-dQjri`cB9g;$}`cZ}Ww zhHV7mwnno<%kDEBRQJz!&dkoWN~|+RyW%6YZm?nK1`>F8nN%t z*Fx{@LA*8n#FzzKaf3!4GOedYj4bkg{>9tL6Og)bh2jOLweH2I?rTH#e=hE&nc$=RLycLjxXP#o)bb<`Y?$@WT+ z2jhs!kO=nEmf3l^c&B>vRRFG8zxK{ArxRTC_5(th7~*XXe?@bMFvMHhYaTqy(Xfp+ zE_B*Fczgk&V@wjzTBB67{l4e+16wSL!!0w~|JjH;#6Z?Bs9{%dgHi2h0Jj%gt|FaG zIc!NMg3Y8x-d3AU$F%?I$zd3dCwt&}&3t%zJ#GwERLf@hp;bIDN4QYm<-OXQc&Fux znw64B{YOSZPzf51c8yK!lA2Q_UoXrTj;U7Jkp&jRcpRkX+=hqSI0Rm%@|gl8DA2cv z18hk}U!a6I!rWiomu5KUf=BH|XTmU)iatEp5Ts3fxoK@F&b*W)(Xp*)yWc$EC+u!( zTfBusxR-KN9Hwa}kB?O-Fd~m%Qw~u}oNIl29hv)!fKy|VIr#L<1<#g69(8r|j9{K)h#RTj=5eDUTXzq}FD;VkTI zp&5(i%waQ;`%GCLo>i>8&V4$aXd&+n)JfdeA#oYE2wJmmr#SL~89pb>9;v4c-wEsr zj5b86o)O_KhdYg%!3;wRzl8bPz8j?}=Nn*aNlX|J(N{pH>iyU&OMBUN4t5=6p>x42 zK{(o2EAF|ayiufPE8Upp>a!^ZNZBa``!WLZq*khLS!|uk_|uC|*h}Ie{)l}ZO&jsf zg>&yK{`i#^ED>UJCw z?Wx93dJCAxmrJ+-#`x1aB`@L_gIgNQ`Oi|%?ce(e!CuaYpj)1a;lj|93@CANzZLTM zK5w#>?`Lz&p5Apj(!1}GOb{1f-W-SPq>Rvye!A_CPD<0}W+z7OrFE8aol|f)6=R8| zrWy#vsX4N%&3rsY^XZUygMkUh>&MlHHZ1oNEIozRHwx2x-+RyI2;*cnOKknmExwp7?VPv zAmEeeQMJ9t&=9X=qcF8ro>+>P@+wJy=Zx9%sOEJJ{NBeG^*-@&Yc*ltr~8Kaz77cWAvB=~ zV;++u#WGw${xb z=9{aAexk}sJOMwt0Ea~(M%aE7OM#*Hm|72fu-d%I>0z1>jYuUoCd1F{RbZ`LS_%4j zzi+r8arEan-1a&f&b1r}IsY^aSLPk~5WF%?)OhtEp}3Tdz3j}}MgPgj;PfpZ{Kzj4 z5w!Sb~4^Y9giDp&@EkO6;J6Zr(0uzchk_`#F)NI^b>H-bpcv+Da_8d=X7op`f-?LrA{ z>wNv|gBi~)mNI?)T?aC|eX49~NeQdT?H+%7Ac#S9&;5FC32T$xn{H-3xA#XRVt3QL z^&DO4oWV!tSF68{tTtZ9Sdo$`Q+A2&>`=}1tr`s1y5kovIS`vwlq2-ZQJyFemp$+X8ewA=W~w=p)f50(^PuR zoVc^rT<0zk8vDVk+^SsUwxtgq-|++Y+G2#n>RngpC-zPnTV$4PoA22!D$Y&Zh_=<* zoywY5X81Z@n0Y^7UEPP5G<)__)hO**_`*t_kHe9dMX@>1&pDoaZklA{si>7JT3CER zoR{h^ui4h{rGDnj&079FJly!trw6${*S1_Re4d`A zX&hYD!+MMJW&`+WO6MWFfn;^Xvj_0K8H-PgxsBpgZE%9zW&hl+W}I)CXV+if!YW?Y zxW2d~T$uBH@#cYB>e~w&SJY9qFOTCF2ZIWp@48#xm>i1l&969qV=+3v_I17@`nf85 z=oP9F!`eBxy;nKvY+|=CH*dUmbdJ5$^bXtnyp<)@oxb5r1hzFS#aeL8sL9AUvuz98 z<;PZjADzmaX`5Ma{i9*#(b9q#4k4>1#h}Q1@6Fy1LxYOVYvDtE=(>!f(UGfWO)q&I=i1k+*;kc?`SYXc?{p>o}91+R5sf;`zlA6b`dwkq`+&9jMc$Wa@;4b1hiOjAwO~p9zE+Gpo@RkdLM3D zdziuTQbZ49`f&Ke{~qfpWJ#dbH4=w|ejSF%#e_&UmyM#(d7 zOw?dwPY3ku;cAhf4$=|ZqmI^5XMFJc*hJE2pX!B!z}eJ;>*v?;H_Y-dL}^NN7{mOq zYnKa3oZjn&>N$b#=Y&eb_19`A^pkuDm7}xfvne{hOgThm3Y}ACU*V%IWA=W?E4H@) z=6Nw{)P_zlWL@NyEZHv;LfMBFtQa{B)a3VVl70$RM6l6S&X^hr^_n)sl88+Ty2!FZ zkc{s`h0ZFb4(8jI=yOUAwu8YOT9* z4HeDX+&r40)z^InJ~X0GQbh;IjL~)EIub&%s2cZezYIe!OtxKW^L{Ql7nceq>;yiL zdpC4lu;jJc6t}IM+>SZc8>ha)H-c!dmY5a4vMN|1bGWO!pZxKgSMFnH`#^g-tvWTl zXQdGxUzcU+rEs!cpqXz3c-Mc-WAut5K0~p+_k+*6AheEEO`xkvQ&NshGQsI_JL*i` zAw%_wKns~Wb_q|tClQ@oaMjDyH8W#lLepVM;sQsdfJqUo$j_%F38Ma-=#z!_Lg@UHn{1VVVn zF%h&oJ`4UfUYYx3n1)jw+QA4QNIOY;?|i+wQcHdA@QU30L^MtqcUyp$ptL7IEq0a~ z8-ARiD6q|H~sX5%w54mC=A+>6Y#A7GbN>zm}o-%Na zelB1oA$LT6+>e`OwI0E*#d}Q)t^+W%Sq&56pfh%J5X_aG5UKEe81N*q@NLW-s72u; z>0PCpCn2{tY}eY=&`1q$pDcb`KH8Z}_2V4Y%6PuIsuh~4d^i(cvq(cfZqL3E468Me z{}q~UI5|X>;#5rekmE9xnLLbMs~2vyoK2(@)=GLf(;bW40xt0pCfPe+$;i}4s_wbz zg~k@F^P=y0h8|p$ z;gV&dnoygSe?ZrhvGmrq`}WN6NIWMu!pExn2d3_ifx`*)kemC%3am9h*-8&WyIl-r z-?3HCx7gBHJkA}OeZY(9`3cb=r%F6jjKGiQ)1h?yi>hy1d}~A8=FOpG1&JeyhE_vd z4%)f8{h!Z8Km0F>uEUYduM2BwwMG@SS6ftT*4|Ru8dVgv_bzI$AcWd#@9n3kP0iS` zH)*ZdBcV2l86@eK??1Tjz4x5=oacGYb3vTwE9|odfsxdH4gNEM2^~dVbMtcQL4I9( zZGqCC3q~dVzrLa#QH@zNIVAGnC(X$H&)jTjJ}_)+KLPtZlHR(gD;!i`Ec4oZ^?vf2 zgBSD$Er%CEYwSeV-RJ5|YJ0!&wCDe1kag#&QSqAM=%oSvqHruDGhuYvYVc)nZOo8}vn4J6jKN5<%l$@QO*UOfKwbt)PRJPvD{6l*jVL zKO(ugknIowOu*dp<$xd+8;o8S#&mR83mjnDp8RsbtKOa)DBs<@zFXBWTh3FbBnyRma72A_h%!tCUcxLiL`#px29BU^>u}q<{;U2BGW!#N?0$1{PbL2c<-V@ zE2~lx)m{8k2LEKHL&5UoB*{_ChOqD^%f!={t6`((b($CtH0Ni`dt?m{!Z*5OYkHeX zPSMk$(cYqI5c19N$MN^%7&`wUukD8luxzz0uak?Ke7SM1Z$>Om8N^-`i9G?Kcnu#* zXHO0F`bb`0Z4ZY_@zPxa>iB)rBuH~+ybW~~?ZPU{3e9)%W0$znzo)hla8_1^@P zEV)cVqkNJMw~d!P!HtGbDH!Z##7tdA@-jvTgLAVtiemeeJN@d>M!q6Ikm;|}#lp#1 zSUJC>v1>MIvV4+$?3dV1!4OoI-IS_qV?jXj!M)f;$DFyum`-&r{h@c%nySmh!uM=J zMZ2QO2}r4`gNkN^vC|E6O{ZnnvC9s*0y>Xg@0luvl<8TaQ<3wgm{04kY_61fN4Z%e zb;@v#_AZa4U{86ey2;8KtqvD4pT}D4x&B^dZ=ZTm438%z*v6e!i!NL;o*0w+h*VG) z$i&^8k1!3-H;R8ZsbZ;mb!<8|J@njR=+P$|R&CAo}Lt?HW<_Ypx^DVmK6?XROliSNI;^BRYl`64S-qxD z#?IyM`wwfD)$(TOJ(2N<+XxXo$HFYO-$q%Rv<&~7$H?{vd}O|aSPIsV^y{`6=8jo# zGxOLfGNv1R(~}5V?H{)vGIY4ThavwtiaOa?El9Q_O@my?{+2Dwm|wf|L~#MM(v}=5 zcQx#UcZAyD?jx>{zNs%EF+cn=16GVn`@Y()un}V`IA7j>MLJ2}H|9BqGhP0Y{H1{P z&$<7&Tuhm<|L^qc9Q~yDa9JUcYVuV%=XC(47|mmb$wt&TBZ8sN2n8Cw69aQTEKAWHPMJpW zMmz1hwF4VHluzN+0gpM_ZnpR89cv})&bGPCjbB}BH;+@5OUc@YL*Eh?=6f)m*F?jB z_+X#?)TYKZU+(s^*`12IDbaux*xPgLJ-+v%37t|&$m4?7RHWju+o4l3-~xGP`-4bI z_SZ6@GpLi;ad)Le*!ohpO=`su$>PW2^V?wgbTjeK5Asd!B_@`}cZ;WYKR>?dWXZJ**gjdhm0XcDNOx$f-~&n-w$mhAN2Vntt_Sq zc+y5BpguFSNmlC-_6sJW+U(%;X@+C*EPqq9Y5nlAfSFmw>qRoNEidfHp#rm>tWG7* z5A!EQ-FAaOQ?4|pu3NrFLSt)Wz@7HUt6=VZCdo@FWEjr*;tWsr{vQ!ZKN@<-Baw^v zF5rx(NhCdhyV*GgSUz4|)~wIgXBp61$w;P)Re$`>TH;WjujABxq267QO-i8|@z)e! zK&kMdN_TqPD~GYtd_KIkaMwE8Sn>4Red&KhfcaATX_wW6Akv?F=f#%{1acu5Q*}An zHs|x@!Uwezi3NDw%Rf3sqvUf^i}ZvyIB&wR%Eq_#yK)Ab zvgN_FSe^Mz^xdIJvi9qF+X}C&&v=4nS>R)OC|RA$ox5KcRl`BGQJ%ks z?|Jl+cv9LVZXPN#DeKwT!rs1w{aRQ8Vf@WlJBni-3^VO(&D7kLYl|069dzUV<@cF0 z4<(Bewy+5v0@p*o1HKByOMuBh(xQ&@KSTqo_LTrqjyC}`6w8mOOOw%*?V?0eMyLbY z8n5kZaZ^3RKR=os>?K7@qkits`Ks$<6QheDF1K`G;(tW&sy`-{;lsZZ_bf^*An-%^ z&65Qvf+3QC4#B9`Fh7JIJNn6dUol_mb^6`hHQ@fBZ#kr#@6JdePVCG!uH(GaLR9l=>vx=lmzK$-Cd!> z{*TBF<6PiyGa8XWXFZD>hPzE*@u2 z{_Zf*ePz?KGc!uhwD+$6JZCJpmvx#zN|FE-V!Q4Y7c7$aE|5`(%O?4)MOVpvHZGZy zYIfgcS}7zL@w`K6F!Sj*bsGPO^fU&Wq(>fkbM|(e#FQto*L%Yz?6H|jlx@7ZBaaFyp8 z>ulZ#-MyBIaE--{e?+BRWU}$Yqy^vxswMJEpJrT%!W|%dWBcF%d_YEHt~ssrZI+u7 z6Mt!(kJ0md>g4t+PwBc18j|+zdS^-zx92C1T(;g{7o~ZzhDJWJN#d&@<$d#Xi|ikf ziq^szLIi7v%L7rOssW<;g=b;wFHgIG`DYH79A)q>&)jAnWe}VwI8?6b2 z0)}${n7+KU!Z-!w(!#QfQ-n@#YJn2)+iA)!(b4KjVTQva);KPL38hz(FY6=1Z6Q0YPM%|9dZ9>WBZcSRVohBy zSlE9!D0sP4QvB3a@#%JE(M{rq24&**bM0@wXqeVNBJG1oZN5zFD)=vC>VmCJ=u(BG z)#-uPKlnKe^8yfFBj;kI+9)LJD+59ia-Dq3Y;-amzB_^RyT@Ggatp^P*##!%wL@jcSCOg(u4JrMy$x5lo*r%z7{&W~2Lg@6O%`0p+>xe+| zEouHDFt2h`m5_(0vy4;j56PATaodatXt|5YWk5SY`sX}T*NI`Q2QEBV__o-?`x=P+ zPyXPVmJobf`!}U0N3Y6&dcOzVioX1K5|=VaK0XzsNgEe<`*~QVIQl0puFhrRi=Ftc zL1IgM;@=MBy*>QsYxQT!zB~!HTC7)7U`;;cUPR++v@6dkr(gew?!*JxU!OeJKYj~x z-skuZ=RX}t5uDD=V#k4bua!`4+gSYGeO}45B$`K6Cf?H`%iWs%gLwJ;W`4Wr#hGUNujP)($alkyuSo0Y!c!=3 z;gL6R6&oKn7n00V34*j|yW^g@dN7fFm)sBi8v5H}3g4#uY@9c^7gRRaB(#{hsT}4a z_uU}~@m@VklH-MyTe0cn<79<{=# z`~%i=ZA35c%!vUW62KY#ZZX4-Wy6)V{9qP7AHBFXbqsf&GSQIg1R;!V3pAb2a`9v~ zC<`QM4Ag}HiU6TQYZUXHijGz5Z#{}vYE%8H`n;iyicdWH1v+V~RU7${Bm8ltF??r{ zF6+d*7EItTFw9G6JV@o1VgE)7&6XJ>4x@IY-Or4il0LF*clHB{Qmg^_geG$J%z0K@ z?~2|;A?q-_bw}@S1)V8TUYE%j`G;uDf^ysTKXoVf3jcn@+(a`5q-~dVwab+8F39|?h;4RH%X0{7$H@lzw4s(3R6ha(X|2 zflBH#;Fs-fk$CcQ_vsHty*Yv+Z&|71QuxsSuXJ(X6V=<4l+#cp!=72 zpC28Mf19tG4f1C=J>7C^?tEtj-fg2G<=`*UY}S_HiMbRXdMkH`v);Uvh!d{B*-VW`AmEqb#r>Vc&$g{qw>CxvQ50_xg@Ke4`z#-|aCN==`${(G(nHW`l z0i(PVHX}`rv5{SyG{>PjNx{4-6Hvx* z{UH0ap>ch0>zUD+Uvp>sNgD!yGG6DvXc^<0y>XJgBNa73K6Oa*oEzt7>2Aq~K@QX_ zjIu^QS-!@Ok!(C3o1lUzJRwy01cBVW=V&(Q;aNFm>S`#}xL2Wry|8x8cwwP(AuD;? zzNPWg2~(?<0G9y~c8o5K`dkQ0Z_}ed-i>P)s~|{IRSeNb@o72vb-Aoxa>60ndzY!I zlLPi>vM2}HH(`E6!gcIz7~xwVLO==OpE?4bG*fcose@FEAsv5?e8|C^dJx;ZL9WYV z_dmm&(b_Y>d+86A-1{;DkJfCF(cg`4M=jhA+9p${^5q)hUNujSAD{VQua17>e&9m! zOdw_4w_pO9b}; zeq|)yf`KQ)GWR0ectWc|(rn#D4o~!jR~til^^DNrq+Y1mM?6NC7#9(BP0jFb=4*OQQ_uATNZ&U`@dCt&y$r7O$I|LY5ZU#vk&0p`*$gXr0m(3F&rc!A93&XK*0yTN6(xfoZFVB#>>x7u^wHFA!>kN2U zBd3B;UlzlZeYt%6#W%&g-LyMhp_t(^Y}l5OYpk5HDXwHVF_Vp86@(`p|M?cp)2H9( za|Ry>U_M%F)5TRd_cFoc9OSF!5xkf@1@APoWytDZmyA#S2$5)|>R^_oe?;NVlqtm?4XmFwNkBF3V#qmlPD*$;^K9#dW651Q6 zxXv_eQ3~c?ic{SScQ@dEOS}g!3&5TY1f*6)>#+uKu5D0!Bs@#tk9VNsWRM~zh9ClQ zPMujg?#h64vwUr?mk*xeWXOudLaq+h_a=h@+Qurojw{NpK$6pd^Rl4{mZwN5);Zl5 zn;BB1b%X(jYGu)0qOcJ*g=Se|l@g36LfE%~l!>zSC2Oz`ZkVuZ#8@vkf@M~P91nAO zZePGuS!p}pF*kRb`M>~;zilqRJ1OAhax9)vEO4HRxuW;D=ndl`6$XA$@sH^KI;Qd^ z64SWB7h(p&F&Ih_g>v_)+Yf3{cDS^E12PWr9kuG0b#dKt@C?jCy>pK}04R4r{{!#B zCG|c9S#|9@XrA!F#)<#%=%(D^w;hl%$oH_kyjz1ay9(pCtfl@G%A_A1@trKGSFaTdf{HT$JRGM^omc#g5 z=uu z!I><4)*5~C4dmwGRrKA3*?IMOpe(#evc=D9pC7JCeYvzh&#WH zC^*uQKfD`mV0T+m0F)275XW8<&VZ@9u2#;#?;bXJW#sR%9`|^D{nF$AGGHIAf*9Ns z2f^>~_u%3}_r&{+j9G@;ef(_z&qm2gibGVMK4QF+JnLog%ib`yGHz4xplm-_m)E|AivfWHO^oP>8e2cIn)k2{wyD--ko5uwu`VNG0Zg97F8x~;`J zYGf}v&|(H&{t;H8Px2^2W_-6UxK7n@d^;jWULQ)zf}NecRwks24`*q%x-$TIZgDTP zS~^uCUUqKyY;E9uPFGL+85vC<6=qI%|HL%WyXY7!c~W~F%+$5;{T;u^d6#Lu<=s1_ zvS%ulWuW&v_OKd2=en3cw!X=};T`Fb9*6JOR!-V;V`Mf-{-zBN~ z03WCg0KWaDQNzJ(VM7WmC|r)wp7O)VjA9oGQx#hES1GTMrg;ntyZ_zk z?tm?U@#N#^Oe8~?E1nI@fVu(F_iMMLEZv-*ZaFchs)#hGW~^zBxb*4{ESI=@O1!#L zb$zKmpmX<s?b$m>9D*v9A?OvP>>~gE@!1FEYd#v^)|=m&zq&3|0?`qe zOt-}|L_!4GdDCvdIJj}M0(3y{Euuu4_B*RIT*g1C>8oBbKe4+a$z8yYy8mbVp#c71 z#+E1qLto%>zAv|%{CSNM?C_)FvyaZeKbjq_{H3b8eT^4@G1c^jH(yidOPoiaqyzAc z=Jr&v=+8ojrBK*en^761CAvliHRs=a%~5R80>?gaK&l)yBU~h|5aKl%@jt$Zs!L=S z?{(Xh2#JLIJG5m*w&e|{8JzxjkTCY-msc_oX@_I~%3(PNtJ|8PqQlLVIs@5UtBUl@S_$+yNbs2A^)S`=Uc)0j z9>h^*Q;aj~yM3t>_w~n&akD)XkbM(#`+)GpDpsDjCyuS{%-Xme>NI}D?y(LOTuDbx1-Vrp?w??Hzfg^*Uwz+4>Z61 zQM?^e{*{679X1Okay{&FzW!>G%_6;pEC>RVC9RA+p_ksN`zc>F*8>d8vYNHg3{Y`N zpy&^K%~)A5-6VeDgl}nv`C?|!-v`0$3eTJiY49&#Z1Y73CS&!ccq2|S8^es3NsU=Z z)mdK371kDYT8lP|d*F@sc}LXH%;x$L-$qAGfSJM?Ik1`XS&hAO(E~E}YPs(BQ(i-0u>?nUyekMrYXT3KR|7DM@ z-DG5EGduVY>V`Jo13(VS=sW>bmhQ&aP2BNAR_avd4lNzWUmLVX=% zRXIZoN5>_iON^i(Cd|35os17$#4I?=sQR*uf&Nx|t2`au zQ2%{%S#(!q8=7h$_!VlYIls25dOvd>eUCb8qqDmJ@q{<;m1>C|ugH^cq(lbo_)#!R zQ(`zlmKK8N#r&!L`3EFks|YSv`C9N5=Ekb~jCwe^D@?VTp@JxMiVrdPLXz|;$JtU- z_12duwNbYLvg<>7H~n-webPpYdz$Xs&TlVG@MPk*Rv>mtd=F zWYBF2l$Ja5_#2LJH1g5gQdx`5`S5kYGi#gZ zj2D$UY3a=>6E;%z;k*2Du0J|q2e}9iEL|i1VG&xHg^EL|LXIE=G?l zf_BMmc9y8V!iV7u)3PTv1yTeDjfUeBl4NWci{gempBzE->JZo0DOXV%+~qCp`G~S8 z6IKvcSRBB3C9BuN>PLKiw$}KaFXb8sc&h^wbXV<_*TRt1a`&Z30n7n62&hn+t^$Hj z={^6QArbjOg%|xh-HKDfgL)1`$QBW)iz?ntY0#Ym93Oq8&kd)PJ8`8SQr5x8*}j)w{!0_yKQmUiMhZpA{7t1n9r0+jqcI z&ZFO50q8&u8|r~TeR6^O0-8nzYvTDk?H#ASr6USf5jsy4wC~WxSdFs=)lpyrz$P5h z0}cO(9Kf6x{djV~=CS~IgJ6@j+%QUo<;n06i&b!e_(CKm&-j_V2YTE71vh!hczY5E!M~<)(_u@8pzkDS)~) z7WQBHUU||sNQXwguztjlZm*p>j$REwHIn;G4gR$uI%Za)SI&a){PZc?)X8akGz4+;p>_aF9 z(LIif}Cf+g=mhIQJR&5jLAv$FQxX9$_RWwygUE9+Qj#kgh^cRzdtxe z!p^;PqH+93#QbAMhz>kWv9IapM&*jV-~EAo9sv6t)jm4p|Q1_epCMb1yH+8CKwI*O?Bl#R6x zYXhb+BLE8}~he(cuc5{+R7$zFu8wb8o2qtPIN^ zxGNLWYRWguP5*F5zRvkY~Jj zC-}v?%K6IK{c(FR_nLU*YNtB&enUB_AIR2{DxjvyV$anew5uvvq99=2nm$is0k5LavmEgJ9*LXPBZgjQR4AC(y#oh4a(t zd>>}dugWoChV@MgT|X|K6+C9v53}tz~z->Dj# z?rxb|wyXR{B-&e(IMC<&`8ap)kDtR9H_%b31P%Z@?MDS%&slNqeU{w zU9+UddWYFSz{`MWdSz{%~(4DGx;18&k@+}lqv_J8DLtJmIr7QrR-e`=>_<25s8 z@t1sNX)r-jyD^^M8-n9UaU9Xzz66P4p8g}MmqNzK zF7Q^xUtze`)ZFO~<=9Dt!lWd+jb^KoUe4gpMymz6aa7ago{^8^f%BqM-9i2K=Ls}* z)ySsrx_x>_*U?@Z=A;@Vj;e_d7i|u|Z2WK8i>_atr6lCE?n#lk1jj%%@uLl9IEwVJ z1`R{9CDc@6sZsh>2xoZ~N`LWikFQbg4xb1vNHWU&-Oxp;riX&Cn2FJ`AYq!ZNL-Uies zACA+FmUwS=p_A-g0W+WV42R8^3o{GYaXEzUoB=C67yKFn=nd#D+svn$WLQe?6uy@D z`-J8Lley}Sg7IsCh8M${hIH)AG5j6YMD=n+fHF9`Zm*-~9}!9$u=rL5^&%bpcCeeT zF>?sdnt~tJgP7R2bj%%1<4^HwV$aUF9IM9NL;C&sfeB*zOXE3ss~@f350BXP$wM}= zz4=8~sjUv>D~}%1)w*R^z0wUwT}bCajK8>V16MTEG{q|jK*j8(5H*$gJ~`X9+*3N7ampA zUc@Wkeuf_k2)gjJt7|ZAMty9ACJ_{?KP3k7hK?r@ZJp1; zZB5>%*vXEV3VF&qb0RqUwKza8&@329gnkTo6KDL=CjZb!ig|w9I_+2NTiT67&-kWu zmugwo;Po$nW{1Oc6l_p|4dc8Cjb0MMK9kv;-|U_h04bJZ%JiqjDc@?|@-xRljN^Py zmmPl(uo-E`7%fSfb>zXv0jSSZODdbNVM3P0vtfJ?lsp5%Kpg=`bEHyh%9Tds{0(BU z>DDB$%_e3G_zdDDBlY4%646A7@ZTvZb<)V*F$hG{ELH1V3#I&7wDaBmP;SY!g^9Qe zE*N@xd0x0lPtFvMV)m zQ{*&$+`%WeXY^0{lP`8I| zkJNuK{%&1c_JT0!U3e9ydrZlo4e|CXULp6Kj22hbe=1ZeKUK?Ejh5%K6Rd*EmGemT zT)^mr&q%#~%shYosW!lm4yOq2Z7<-M`+-SB+YGgww9k3NsP;<7Y4n!%j~%oVKikRw zBl>{17R!1gMIFEHZPm_UYH&d)A=Q@%*;Iw-HU4e=p&l7(hC@-|3nOJS6;z+Un*yVye?9~E2 zIb+K>UwsdCQ4+m$&y;G9IErVeaEWRolR$oL{KB(i(veVF#~g4Zzu1s-y!Ky%rk23m zz}-z64JKRD3??pgn^!;CU+_jJy8?8+TLL7HGSQ5uPv4Ax`>8cUvM)OGUL|f6dslW``!V z&tS5O>tCd|owuo`HG?%jODjyAbWQrjF2kF2)R-HGJ0cebXiB5ZT1V=H(Ir=s=KPO~ z8%Tiba_Ks4JPNHatq<3x?;X{3_h0|sR%yn5Y?aIziYgob@~7BhIWhS=hait&?=RrU z7OMlN{Jo$HG&zE_&!lc~2cZ`czxt18*@ucUo_RuYmDb6?U8%OWKAHKx^&OJXd8n|r zP&E9;Vt_^KF=kq_6*5ztdg$Un^GbB=wR(kBex>0fjQDOLO|W<`a*~;iMYXvVk~paz z1KQT3@wdDN-szy{A*CDG7U1_e6M+4j-U8Ty>3BlBU+oq=OJJgSJ(9|`zJJANB=|`5 z3N)G91MrhVmV!YNOQqcCk%I#Zm?V|~ z-kZT3)kj51m>+tUe0=m*-8Y*d!jC`XgXfbMtnsa*Up-%IfZyNL7RoNEkqLu^HBF?3 zw^RbKw}b*c97NuZ`wwjEMhCPOy#tjn&^5`8d(P)?OTdU zBJI(MPHDq`h0@9`FTN0V0B3h35X?L;_l_)NEmZ4AT-{5zWYZwe6!F=0KRbN_j)Z5Q z$afwRm*3V_zX3=VktDs@Rb;FB%d{OM$n@82qHXBdT|`xUVOiI)P*-j3Ri5&X%=Yis zHD?s(<1SMF2M(+93TDRQva@yNSmEz0oG33-d8M(xNdM!Q?!3}X4g6(4>PiIxq`%v7 zG3vB(@a#e^3@me|L1)UY@jmHKBUSju3bo^O9lrBL?1N#~=appzS+&v=e|`*nzoR7W z8sM`tUrDbg_egP=fKoGC*-Y55dY3a&WVj9Ie7_+4rA=?$l}|@DHmI@JKQT7~XHVHu3Wf1MiEct1QCJDVvG{?s-_ z#(D>1i>EUcykj#m^kx?fsA2z8bd&3`Phl!k0O|-Yh@;Qo*GTV9Sn^2%FMlhG%49+bK3$zbAuiJerj3Fp)UNBt2-Wj@vW1^NWxww+ zOj_6MtMCeKjS)_l=wqXv28ad5CgwzJxoKb{a& zpIFvx#~XLBrKRuMTWPMwnBZvkJK-&j;;`n=W}7)TwfHpy+4~0kY8IyK>k%H~Pp1sN z5#F`9*zZXr7%sRg?t%*g$`SU(wiBhwvTS+nT`O_S{$`hX750Ev7fg7cX(MOPRgvcY z#`ZY77->diDz<9kc^Zv07g)sk!_vv9^a0GNu4c@FR>YfDUT)RD)eW&jxQFqIoJ=wl z1^rlOX7W(3r;%GXh?-~IZ*8|&aa3p3rX7r)3z2WR95~^efa(7n6)acx&PJG(kgZ#R zH^JiCxdMe9aTkbsXKe;hkAn8do__VJO@}_wUEmgt>NzWIqSNs8TMCbB{VqsOY{RS5 z(Q7{&&e`4Nrie-v-H6?tVmQixtaJJ&HUprK+yVHWknp`COk zQ&%zN#-r7oE6)c`)hkBeBKH@FSd60eIl1nwsEyWbA~)du0$NC_0U-*k*mQNy7ADiQ zdD;$GA{_Ni-$*bC@Ge<^-biukkRo&t{GUWR0zeKD!FYL8o0;}ImH>@M*VN;8f3P?+ zs`0CX{-e_@dx|b-zTu(J-46c=i$eIfjXi1Y2(Id{|6 zp;xKhuDn30iwJjgP{bKmM|Z7TF-9NMdrDgOk#KrAzAm&@+y#Ka$$*_7KK;2H?&{k7 zy*WQ7&D1HA%AdO~_r3kUKqfLS0$uX9h|By^KdElfcE2*&SFA%*smx@K!*br=>W>ETV#YU?~ zt*na8nwqc6puD0(f29xqg#LzK5~Qpo-nbHwY&jk#6BXGUh)*Q_v)at_fY5R15%2&$?M~92UYHhB5K%8uXzvq8F z6bCYViruU zKSwkDA$~T)Q`}@0(#mdXg22r+DR@CLQ*2pcwiv8*x9ZbRi$LSkLri|m|bVz8qGqQ6~uAHP5+1< zIdagrW%izq3dU3}FC7?rr~Dk2Sc+3}Nepc^W*R`#k!)y)OcZ#ctd#`Qy+-HaS|!`9d}nMrvc4u;;Mj^pA-b~?T9KP^&0no8Bc#a?Na%a@HJ8VJNp77TYI1Zr*|Af>Y3j; zmeLTa+?X{HAbhaE5!~f0vaj+*ZJfgL7AGI!K2=;l6Uav`(iqx`0y9_l>^OkkoDz>H z9`XmA4VUukj@W6ZehUs;uy2f8Xe$_~A#Vtc3j(A|i!GWS^hH zEp+-x3V=6W>ucp7XB{f;#N@8d`k3^mv#7_2-IUhH&%f)ZY&IZXYU*#AFJviYHW+`cyhffMnA``a zlH?HuHxDj-)a#sVJFktm7kzR1#?%|@YzQlYNga3|Xo@Ds?fhTKkfa)Z&z$$y*V8iM zJaE)}{6+HZ{K`}v}Gi=gqWEA{$4#AX&o)6Yt! zDQcpR&dymH8d2jO7?Mh%w}z{UaW1c+_dxo?kT_S0OJVamN*NlVe{(fh zNR4$tb2n;~VI*cv9BY!a#rg91ryq)t|mPXC6_C*#i%eCpn#nbdE)dTm_vETVZKUW2ZV z1>A7K=%gltKh+jr9szuhXp_j3<1A?-k=sLBbf|RUM<#_Phs+B{oqC{*CA02)>U*`e zXIei8E^Z39O{1SGGrGK!Hz6fIKj)aLcDjk^E~*;kvb+`!rLb!cDdzVSk(NUzuQkGt z-oNuWPpy@wve?E}a&p^fsy|oca*+L{sX|)OGdgmE_u>D#>{-UYc=!fTMtr`f_v~?| zn{c+e?Fs4i6^t-5TrgpUP!>p1m6zIjtSt49=zz>KXwZh>=TcbTYA}s-j;U2xjWE=m zi1$76NzT4vTYOM*q}?%TIM+%Tz7|UKaf`aar`EkKAC$bLTufQif4|n#NU!7Pm0_=4 z5PRr6At)|gTj%2Ac+5Pes>73EIHKmqW%-b5!i$sQ1NN>Ra;e%ebH0FO{sp8lVa%03o&h@*Xuti6&Ar|4N<`k5T?i)w)L=%K(j=^%fnJom+Ag~(v zUQSjJf}m7-btsrn!CK)jURrgX0+^WJzr3Y>etN|fkyVa4Ge-e>PD0mM;Bo>8`L&m5 zgFZ864SlMk?Ho1*D_Q?gE66vEl=wcLh+5N)$Hp4V(N{r|s&KI5dZ;A0kt0G*{pZ4@ zLXAzpQe;J0^XzvQ7k9XDX;Gw}k3X6z*@j@}mBOe-{Fmb;Fbp9{kSc^{;0Km1zgH0jwE-ia)4j8vELo(5YE0dL`Tn$$Oc@5W6KX6G#^&wXD0ZZuwyMD z)4_rVGTwL^jFY$ZgR2N7$N z{PY8FglyCA{+v%Yuqw$c?H);IX8_10g{*Dq*}?ZYduQ>PCW`|&~=&3`7%f~s6<0#OqP4Kf=gMM z_?e5hLn)6Jy_$psZ2ISn>*10313^I~tx^h~9Jp_c(N3$LiLL#D&8c+O^-trE{QoF! zPTk4b`{jb1pXH8yrMpBmG9O;Sc~;Bey1J_r_X2bpOF+<&KR`{cZ|Cn};F@C(j!f zad*p;N_y{n7-{+>6H=4SuEOh;n418sM1E>#eaQG&tMzE+X4;4Df;mc}%tiEQNHp~~ zjxc6XhhVbU! z=cPALVR?X@KBw8L@LeSq=zrL~$jvJne^X1U;PYq7uX2T+c@kZF4exwXeZvyP#2NrD ztg+2rh}=n7!>_*jvArn4UQl)pyZ&1$pz(zN*k>td#f2K;8t!v|*Ld%FCzy(nR6eLG zOFbjL2T4p!8loK#s9k7TV&>;;K^ zE(wb1^1&bGOF7A7hL8J+cGg;IPB`P9kgyVFEQZ=_Je9CvBscc?e_zTP-kv(yJG@*u z!p<>~Se_-GEhUqkg{Ei%1k=Opyk}G;amVrjkMeEQ}+}z`JOH5u|)g5Ufip-r;cQ|;_XC4-l8VNt`XQ{q7LDqV0TM}e5_zhk7 zqFhUJUnp@@v8}*=gIgGeN4tfwZ<&WeBAUph;xh`$oH-hra!Xq++lH5o^g>1lR7;Nd z--DoR-Pz?*iJF;*RSr@Pt7F0d?^_4gKg;E{Uw2rTU>QR1$~W-CNMuHtY0a!CIT_P%ECDmD?5UC{dy;S?6{K%Z~+0#Qo_uE(-$`z#3;llk^1 zT96#LdGiZ|bGRY7<-l{EokjRx^Sj76AL+Uua*rNr|C^j{t23rxsVPw)iq2n= z)K6hFynni|#TsYx?ZJi41I~K761@pkgL|{D3|tGJjr7W$%PU@7D5P1@OL8YHOs(Vv zQOTWx`D2~(D#CzE{|h85+tdKaBxj!evIcuoC4I}1<(O~|2g~iBr$5%T8fX92{E4-= zmVGH&{xc+oeUZ(U-z<+9n|BTYF{t}Pf-vsobMoT7SHs^CJT<0XNu%CH6ipmy7$nIj zmLmvSGjJJ_PdILgSn~>6uF<+-UNL(-H&F<$E#i3!Y!Z^?!ne$zDB4sPV<|=8wBbp@ zS5bMWctO4(e`)y1P1o8Ww_AmP7#cT%6^&3YPiAg^>`Qt1N4rDX&5JN#m^>!u~b2@t2NtMc0LW#Fr^?O9g$t)QvJT=E+~g+4Oz_5HSs`$YJX^TT>psp4t% ztq#)m`YH9R?dfocLtO4KMfP?Pi<#LJo$Me4p%@ykjeJ+}-$=6fOZzo=M&Cw@PS&pH z*KJ_Awpe70ZiWl(QuauaSw2;EdzNNHvkmT#)+?;tVDBm(2+SmVOP_m>#88Ei$CjmGpp6#P-~ZVwOqKmC<7W8t{$b*uR` zeI5&|SS(Tu7~<5mE7FTBj-_NRb0K)j3_}yTsXk<>yK=LsD>Y-~HL|c8mG^>MQn%C^ z%129EyJB7&h~Z+5wazycW!ty_9X7Z>HV2V>MDVlfw&Ft>S>OQ4v;ysp;GTFLk8gVS zKZ$-2_$TnA!d@Qm*TUUiUl;58wxx6~HCUy21X5eDwu0ABvqVzjS==;I5hS;9W~{9Uru(4?%l@M4uq=$2n1n)1QC^BRPqR~nZ{unlhZ@i!_~Sz9J`6_ z=V(dV0mkFUAD?>4yifwV{Gqr-&fLeG=;WQsLNQLQS9=jOr zJn(vsl=)*u7**TO6nfg8F9}-PeVwEE3(9n4+P_$qxyeeTCMkb91edk@TEC! zMmQdy=M>ziJYyc_v25w(u;YQjKVGNtsAT|Qk6&Oq_2Q-tgO%%?{yl#hiJ?=*4u7BY zqTR%u-lPG^A1@&P0F(GrU3|p@IqCj=>CGE~vBxJLhxMfdpP1z5pRcD((%5!aDPV!e zdSgfxcOHYVsigTE3(k1p=eK&LDEatpNi?xXJTu;nZ+(o(Mm$Jbo0Z#^zIM=Cy!m zr1J{yC~(90hdqBkUcF6r+HHmAyLkqQq(;{lmnURus!JYwfzHv?p1^umPlogzQ^Xpb zo{ytj%YAiqBEfGIKzWYxFj&wMLX4Bic2!>F4oB=?!e7~f)AoJ5dtVi`uBYPoB*gPY znIN?+s>TRdg)SoRE&ygEfE0xu)?Js%a=$~z%yF@Tw0Auh_Hp=Kqx>829lnt8$2PG% zjdgK&&?;Ohl|uP@xowHj6qAhP46(1CKW(qtF5kmiRKEuNGa!;_N;bCY+@cY=EY+0Z zUP1Fs!7CRW7X*4A?E(8lTYL}j?D}q!@z3I2K>>vv?n`KhJExgJ2OXnM3%8&IkHPc6Un|P* zc6-NX;G{a%qo_&Z5Foa;SmcH|V>@JG*l-9qP!tF6xSR|SYxV2)4e&0RVRe7|OZdty zx=)3sjvX2%8T(eKBwsBMe;HONiU;wz92Kv}2|P??x`Ni-R^B8Ep%k5p0)WhS5_d5h zj(ePTuhXB|FXN0d>Ut2=u3kMC!xNX&wBWxa*Iezmk$GlyW@4?>xd*VVd2WbnQ~IRU zziO*r*+ce6@qdp#Flm@f@{{X>B{{U-y&x(4UgYZYg6Retlhr()F#>U)| zYVyWXJ3_&Nve`o9xWNK>RD-%A2jt}bT#^wI?Lu+#jE_)poS$5MeQ2VrWmioD%#ukI zzA}So+yNLl;{iUMAshC>k3zmcT49^HvC0ND)59RLUo;M(uxUb#1 zpPr@A&X(TM=edqIi*3A-k@G*=MpTvz#dZQu8R2&{Lz7i*lTXmCrj+iyn`^v3U?|G0 zszR6ZKpRUDxyQ_5670ho-?PyCFAdJ1ma8?y5zLWW`O<+mJgUfpA23i(LXaicy-iYG zC&ae)@LR8v#9%8d>V&MMa0w$Qa8>d?Sj&-`iASjUQPs!b?;rlu7ykeZ{t@baBux)P z)Ac)swA5#T6U%3e8B!^qZub}w#S6*hMr2oYJOj;Ye-t%$p2y*b?3LlmtuI&6{9$^U zo}XxR{OT=a)55oRQs**Aw+Xv>b7vA`gYuJxuXlN+!{0blB1K;>Z;ZBQlr+Cv@*R3vR)b!N1ohQ@nt`(NfLG#=y zDH|cTw?dLgS)4F)oGQWe8nws=ihdk^$6gh068Jk`vDds$ed1e-Jx5Vnm5}L(VVZe< z!)~$pZjCD}GhXglWSjR{vKYhsn8+_*CcKjrRlZW6X?79H1|yWI`L^+ZLF&CleAXugD7&7e zD*Ve+<&8qpT|3NK6oLi^2O~e!)+#h=8cc(bIX%DqeJkp1XG4QiLly2pBLRTv_4Tg^ z@fU-ybe4A7ULlgM0Skf8By>K<6~gJe9T1g{BIYze6dV>ABd1@d@-;~b05Y76f1bbA ztz5@1otXm?dFg}4<^DByQG-ZJng0N@Jkx5MnI2t&R#wK)`#xR6q1(q?dt&LcZf>l~ z7fGG24i9{uYE_jmIyQR`Po-0u)uIl>@ik~eG)f}@gV5#g72KZZa0)oWoUTMnvrN%v1|^Plmn zI-Rzc9I>{Ua@Pn|LwS*ym^oaq8OSOR-8>w16_O;_+nbO%J--apn!cT@=z5geX0vNG zmCOfZ&|Jpw%Nr05*N#A}rvw}jI3V;QlXuW}eG2N}W1my?rwgyQZeQBz4ZpgJ!Em@6dm|%_= zqks=Q^Xb!^*R6Of!P?)7rjExilgS9QDn7?4;Xmp3D+ULMyks@WsTpQ-do=6=P-%xB<~h z_G6u)PaJ|PrP~nd5WP=q_ge3UCHOtA#eL!ZWX{s5Yh(&mRK`GQI{>GZ zJzE@fuQ9cfNG_7%24$K*nF_I17{^8g5$MCX;MJ@9?Mqs|eN$JR?xvYRc^sBG94XJR z;CpthQ_!Abms zkVpgMsBH8(Cj=i{bk847l*N@pZeN&WjDm0vsN=0mBf?AhN7I5q&QDG-I``?#C3}{C z|JVF*)gjR4w~o=QWR_GQ?ZzaCtB}5F8U68#90SC`dC0Cy{t|sdN!BH4S_wq65hQNn zYfw}lnOlI-ZekZ4mE3yfyAKfG9VcIg4NB(XD|v2FroVSfn}HOhGs;mL4(P6C+6XN^ zSLDN5((=6sj8vTHKUWpK;3 zQ7@e&!DZXTzGR;`Uo-)@f74%=sIImj6gP$LG;kMi_>2ySei@$PC9IU{<6C{_%9(Ce+3RR|zXX zhBFwP4V&=!I~F+np@KmPxD1g+^srp?GarVu%a|jwyJU`dzk78kWkDb-A(2&Cj!HCh z6VJ~fj~P-20e`KC^xJz22W5D#q`XOd%wd302vh@)EXK-CNnpEzj;E8p)b-J;$jT1p zGe{=^1AOPrEEHreL-~MXg5-Y=2TqTuX|qcPluhNbVVts|0T~x*%YwxGr8))%B2N#R za<6ZOp-Zmj~Id! z1TQ(Rm*BiQFNpkUCxkprYA)?Hh$M>VI6)M=JaR|38(0>|VaW3o4waMpO?VgL&xJk{ z=pP1rFDrsVM?B# z<3Eb@pNBpZm-ZU?Ky=MoUl9KQ!Y!}eYgQ_4<+|3PdFQ;h*rD=Al(D38x9(%dZn=LH z{3!>)kAnJd?9t%6O&?U%z9m?AZ&%c>bl`#J)-5$z2(q_y=6FnzBo@)kskNnN1g3YXzP9>()>GZajRPRYf!kcy$iNUt%_bxXCCPg`En$$0|=WT zn*=CgIpst)`n{6Pr@BuADJKAOJs1(5JqY5yulTEf7s5}48XxSP@Y?fE)-OIF+Ud6% z+E}Dzlf)Wsu#v%M2Gbn2z}zZ8i7+@%F@RoJdH(>!FNS^|)P5oSKlnB9axF^t#1`u( zhrCUwG*=2vyAAQSmBP4|IH9+VC23VlAXtlzPd-&_I!pTej*n>fK2_E{1E=a;%r1Gs z`GLUT4w(Ea$u&;|>NZpPa-rBWnE>8^4^ltV4A-bO){^4OqdlOaknoC3jXCL8TC{{Smta)pLLinyE|c*o;q{` zrDN(apu2cs0Z~3&fN{b1^cD2Zqwot^(=LCrW|=MwY!ppo=IY#@H#~9$UFtyu9iuoS zgI2U3f;Ycuxtj7Ny7J(BMR{ypT)T+I#9}h|JJ9aJ5xIfsN*H+(@d+O<%V8MasLj12 zjzN!7LC?$22d8j(tD2JC>UVd#rloNu?ZdiG^UoobPULmy4(+Xx z>5O2S>5g9d8N6aX6MKEry4xUSSwxZJpS{KjLJtN^)gzZ_Ro*^nQX4~bc-W%pSjx*1q;}z*TW}RhcDLPf0R>n{pd}=|! z{v7f#pI_%%Q_GV0jHQh1d~xBw*{{SuXeU5BmTYzQHS-^he`wDYU0O2u9Y3-mIgM^43oY9m9Bs~HOk*R4I6aMYbHw-el!&&|p1N#y(F){IW*c1FYv#|P6KI6Jt7c=Bk&gub06+8Z z#WfK^l$YjEcn6H*_36{zmNp53263DY4?=nRj@j*1C!rD8vbZB;Ss36B3l0w*KbNIM z+e2bNHv)JZXY}X~A4+JE#&;Z$q~nfyboU_V{{YoVBQrK!^PHTXy$5snd(f@W&ewX9 zmfDIr8|$52%b{z2ifP4hiMe6kogT9y+|!9sa&O1xQ^lN zBh^w_T*PEqH+;Zt+7kKHzY_7Cmp^gaQr8TVS&r4*3b z+OXO(_Y%mFHY8o`7*=eM3rg>d{LLWFLas9s+9_-;tmA?F$v@H~X-sYwCyy$?o=G7X z<2(dBZf<&K*R{PL#5X#ghY$8~a`E{kQc%&zgl!>}fDE#@$N`6*I&1`arRCMyYO#xJ zxZWwgf89nlJ^~ytWWw&)rx?y7fA1W!m6hE^)X9>Sy1G^@K$p6qXhm(4MhQUGiOCy+Kb48tIR8>J*y zGT83p^K_38MXp5sn}`WpQseM3j_--DsoErMKI-bK0B zZsiOH88CCvj?>%Fn*7hcT{e4I^@b9`b!TM^8FfaD)n(kRGLe>?M9m)M!vJud7iSxeumT@~{Hd8C5b);m>FCCV1cj1l*rkL{jogKr!!m)(p4**Gjo z9N>Tn^!2Zdyj9`d3&ajzQHV>1Vmjml+&BLKudls%*vvm;qYqQLC&H~s{5xagzuKEr zxr*0OxqlGqUIn-ECGw`%1^eX2~zRJTrB;tz#BBroh2ZiGKNGxF;r{@Oemn4oz<-B#+MSPu65qp` ze3sWn;wUYAKz!Xk`t@U-OKn)^4DtmiWAg$7itwr_MOpsCt#|QmeOtf|y1BWym9)$I2D!V`Aa@~oi_aKuQFyv(ESK0SH+Q{(UUx5obfjb0o5m;V5= zbpHSiuYh5=@Dtn1e=L>?ngrJ=cYVI)SIG0CxBcN#O~Wi3-*Fp1IX))*L6_ohj`eRG zh?3eZPT)%nF>sMUk)&`c3@!kP7lHuC*^zE$IIM5qwLek14KNWX}sI z5@31)PVS!d=$a?Sdzq&e`jwO}t^v$URfYz79u9ray?ox6GGt|j?l5Y^Q)h?!qXRuZ z$n9QyD>b7oRL`^Y--sdR5x3$XtA^I3xW2mHl@A0KvT9uxISQ`$qU%Rrsax_rmrbEV)k+ zNu}9Eswdhl?IEXCtp)>G)FJYQ7b=vw7|{HQ5#&WK;6xNc+ba+m4m}YkXM!ra$1GUk!X$t9(7w zzhZA0Uq`0hU0Aimeglqpr(1bm6C`Ybw?!u3GBe#7PkQrBW8u&I5Wn`H{h$0-;_r+< z4=lfDy+NR!*3VScbgQ2WYgQLxKlEu~X(Em}gF7Hq21usKiGv->Ur%2s^h->(Ks9H7|<44?Mv&-lipDS(rf!HZpQTqOLFxrE(Yl0JJ}VY|#GzXIWm{ z9PyM$KvUcIji1uKP}W}U;J2Fe6uI)FGslc8C)|te59-D7z2`6uy##bN=5rxA0@P9h;op<8TihNglZ*Agj zM&Q`_u`8@3MH)m{1~@^^&`aQxoF8m>?bXOrv3mP(dG*KB=~O(;ic}n_>OH^7t~ZLP z&D9vLhq;?QJ`Gi@Y?fPj;|*+lnOhRfj6t|o&zbw>`OIhKL4{n5n#hIC?VaA2@*>+2 zAWUrrR&Bp3;F0QmjaIt8lH*L${7Y;$+%>=1WM%ntach{_&JP99sUF_-Z&A6mwA5qN z?O6;+HwcKtk`)AHhIt<3_N?67Dr)6Otj?#Ve`doOYnY47#5M^IaI4r3IQOTi8t#;_ zktEllq?ZV#kCFhu+5!8+&}SfVT_&O6-Frya>`nYeIQ1CeyMHD`V$nN%zyv=l zIO$n>d~j^S4Wt2qfwTeX{V~O8-D)uDmNFM45-GNtCX_ZM-Ln_PT8uKtwtxrn zy7~`M)32beQcH$&kPo>ho;%~|`cv;F7cA1h%ug&%IUNANtn@`;k^sogeT`Bpmc_9D z068P3K*+%380qRg>ckV=z(I(W=c&ffI0FY5>DSoQ04kdiKp6a;ky9i-rlgX`~~PR5@Z47>mXe7upz1bXm2Yb`-Q0d~$o z9-#F<CdG?yOS@5Hh%Nt4p~T*3AFW z{9DuQV7P+f+f8{qsBVM;6wjRkIvtN7Dpgg8@_20d#Be|jP(F>Nt3!EzY|>o3ahcZV z3+FL8P>K}cHtcsFc%Xa}n!`Gc?2=trK|2SQ&P#9JZ8D(pzyJ`tw~Q4mPVnO-@M(># z&Ms41xQf)y$$+sqWXyN~x)F_~vczsD%k<5D;NL^woEdih*HqCAx^}H>@J$qR#T~5C zG)}TXAx*noLGuUA8*b#uv>a`!I*ypIM-0gENSSStM6zv}w(5Szv(I&Z-bjPY3WihzX)l%YM$CdZ z#fI9}^3H2rINOG2jaaBHn8WUqVJC$JKtJ@wiEcV{S9aQuhAty*eWtWXWQne01&pYZ zMj9vU$Cw#NO~4s5jzP{8Dwehu_c~A(sPeixBN6wqt#NBiTj=f&+RMvuvj!lQNkRs2S%R523Bh7Oc62!l znvy$+EMdLVBc4@PwU)|7S4CkOl~%Xk^9_tukxKK01zV77NX*T``k!t1{^Lg0bhvy= z;fbZ5%I+ZIS3?W9VZ#*8MnU<9X2|Vd4|vG6pfWee(Swx(^1&Xy_4Kd7jc@)EEdy2X zZm7m(V)xcASmd0kxr`2=0?Rf@>mwqMmb?q%U7I!3sUah7KteJPBmwK%u*69;bH&<6 zkZM}=>JikHDl@@5fgQme$FT;yw^Ol`#6Bp6V~wS`yFOyMkgS`LNgz34f^nSZBdD&f z^sAz`Z0GBb>0FMp31M$@8x@iXl2nm;qbUV;gPubG!}(Xw)w$|M`y-C=4~NXwx|P0} zy5)6ic`c>5yxld>S@xNm%w{CW#BK8%a}_-DNv{g=AB22KeRPwy$;?ngXsW-vZz=^V zA6_%bR{R@XaxjsX7v>l*u8`z9E0s^lmnfKKnsAAUjh zu5(fF&V_R}H9HG=z{ogXE>1Iyvg5xwt{S*&Jq`V)hs-)kKJfB_3iJopo`1%_v%mN@ z@8L&`JX7$W#vVENSMfUULe!gFme%`3eJeICB}<< z)@>>wEU7=)q>Ii_Sm9(0s!1vVB%Z7il{u-HVx#RTxOYFi%|peX@Nhqe?(VdxJU#Gx z#8AZYExqz;8kLWln~05#vqvdHR|Kz^+j?$nWc}m&Gil$n-;Mqf>l$DD6c7QWo*azQmh{G}e0IUo!4>wx6_Dk0VkQRb*Qk zhzc-2*4nu~=c(#*UU%_l_S^lbzBzb$=fQs&emi*M#5zUr5!_hL>jkW--6e|AE!I>c zhK@k-u;G-~wT#UbN^S}XU$6Af4wg*eB-7i}{IT(pX;#{lmf8g0X|PEpj?P?@=2|4K zwvuF$OG$1cbDl{#I5p+hiz_zX=lYJ7^**EE-vG*5=Hh)u<0l0`jy#@Da(Vv%Jw0&W z!=DfBBvpe=mUbNG=HZ!r#?gRB<6kLRHuXM|olQ@eoB-n_WOn*ijhBZty-2It!6OcZ zh{BF|<+%Qp^fUt2(Q&8SLu@g|#N>J$wogty>pu2r?o=#{N{)c`_WD%CK8CZB+~u^t z3ym{J`xdux88S;9(kvNc6M#{}5;nHwz&PkY=DTQKOWzGcp;*GdVA14~>0QFKi1Pvt zWCJH5uoUn=gmK3_;A{%xfIYbN&3Znqb3T*ch%`1s5B7sB-ceAju^`ANxh#9J&weOL zn95xbJc?-|VJ-mcCQTInqm>B;6Kb=$?akaT)pT`2P*g@tv4tw?b z({gEOQafEKT!6U9KPc)t_N>iwP)R0RXbQ3cgO8ghBoWUYs(bmxos;bOOD@1iQR+w1 zxJbl%L{X?!$Dkg$ACIjy7DTVPc|#%v!BV|901gjdu5reD)p<4(lwI{5sHD z7C@3<3<3C#{d1qvq%khzle-549AJN+$kvEl%p-m_kO(8wfsame>F-u{077R61m~Qd z1~bo~$2As783X`wGtW83KPs?@Hh{~BjDLsWLPVzfkPNN@U>xMKNef#|?l0@^OEtnyk zmgD8!oSgUc13%}AwE_UmA#KcY_jBA1amIRLtVd>BcGUq%JrCpU*Vpr_i5P#EZpX*t zyBzKP4?XkiPnBBZ>8V*EXJdj-Ot#V#XMvpO9)s4Et<{%n9x;Lxe87XA+;seLR?WKX pj7b>)F4A`#x4G@|^!%ynU6U$EEP-+xA1by^ex8}7>SH*c|JkdAM4 { + function getFace(){ + + const locale = require("locale"); + + var W = g.getWidth(); + var H = g.getHeight(); + var scale = W/240; + + function drawClock(){ + var now=Date(); + d=now.toString().split(' '); + var min=d[4].substr(3,2); + var sec=d[4].substr(-2); + var tm=d[4].substring(0,5); + var hr=d[4].substr(0,2); + lastmin=min; + g.reset(); + g.clearRect(0,24,W-1,H-1); + g.setColor(g.theme.fg); + g.setFontAlign(0,-1); + g.setFontVector(80*scale); + g.drawString(tm,4+W/2,H/2-80*scale); + g.setFontVector(36*scale); + g.setColor(g.theme.fg2); + d[1] = locale.month(now,3); + d[0] = locale.dow(now,3); + var dt=d[0]+" "+d[1]+" "+d[2];//+" "+d[3]; + g.drawString(dt,W/2,H/2); + g.flip(); + } + + + return {init:drawClock, tick:drawClock, tickpersec:false}; + } + + return getFace; + +})(); + diff --git a/apps/multiclock/multiclock.app.js b/apps/multiclock/multiclock.app.js new file mode 100644 index 000000000..af0ee06b9 --- /dev/null +++ b/apps/multiclock/multiclock.app.js @@ -0,0 +1,85 @@ +var FACES = []; +var STOR = require("Storage"); +STOR.list(/\.face\.js$/).forEach(face=>FACES.push(eval(require("Storage").read(face)))); +var lastface = STOR.readJSON("clock.json") || {pinned:0} +var iface = lastface.pinned; +var face = FACES[iface](); +var intervalRefSec; +var intervalRefSec; +var tickTimeout; + +function stopdraw() { + if(intervalRefSec) {intervalRefSec=clearInterval(intervalRefSec);} + if(tickTimeout) {tickTimeout=clearTimeout(tickTimeout);} + g.clear(); +} + +function queueMinuteTick(f) { + if (tickTimeout) clearTimeout(drawTimeout); + tickTimeout = setTimeout(function() { + tickTimeout = undefined; + f(); + }, 60000 - (Date.now() % 60000)); +} + +function startdraw() { + g.reset(); + face.init(); + if (face.tickpersec) + intervalRefSec = setInterval(face.tick,1000); + else + queueMinuteTick(face.tick); + wOS.drawWidgets(); +} + +var SCREENACCESS = { + withApp:true, + request:function(){ + this.withApp=false; + stopdraw(); + }, + release:function(){ + this.withapp=true; + startdraw(); + setButtons(); + } +}; + +Bangle.on('lcdPower',function(b) { + if (!SCREENACCESS.withApp) return; + if (b) { + startdraw(); + } else { + stopdraw(); + } +}); + +function setButtons(){ + function newFace(inc){ + if (!inc) Bangle.showLauncher(); + else { + var n = FACES.length-1; + iface+=inc; + iface = iface>n?0:iface<0?n:iface; + stopdraw(); + face = FACES[iface](); + startdraw(); + } + } + Bangle.setUI("leftright", newFace); +} + +E.on('kill',()=>{ + if (iface!=lastface.pinned){ + lastface.pinned=iface; + STOR.write("clock.json",lastface); + } +}); + +Bangle.loadWidgets(); +g.clear(); +startdraw(); +setButtons(); + + + diff --git a/apps/multiclock/nifty.face.js b/apps/multiclock/nifty.face.js new file mode 100644 index 000000000..2c2af6063 --- /dev/null +++ b/apps/multiclock/nifty.face.js @@ -0,0 +1,55 @@ +(() => { + function getFace(){ + + const locale = require("locale"); + const is12Hour = (require("Storage").readJSON("setting.json", 1) || {})["12hour"]; + + const scale = g.getWidth() / 176; + + const widget = 24; + + const viewport = { + width: g.getWidth(), + height: g.getHeight(), + } + + const center = { + x: viewport.width / 2, + y: Math.round(((viewport.height - widget) / 2) + widget), + } + + function d02(value) { + return ('0' + value).substr(-2); + } + + function drawClock() { + g.reset(); + g.clearRect(0, widget, viewport.width, viewport.height); + var now = new Date(); + const hour = d02(now.getHours() - (is12Hour && now.getHours() > 12 ? 12 : 0)); + const minutes = d02(now.getMinutes()); + const day = d02(now.getDay()); + const month = d02(now.getMonth() + 1); + const year = now.getFullYear(); + const month2 = locale.month(now, 3); + const day2 = locale.dow(now, 3); + g.setFontAlign(1, 0).setFont("Vector", 90 * scale); + g.drawString(hour, center.x + 32 * scale, center.y - 31 * scale); + g.drawString(minutes, center.x + 32 * scale, center.y + 46 * scale); + g.fillRect(center.x + 30 * scale, center.y - 72 * scale, center.x + 32 * scale, center.y + 74 * scale); + g.setFontAlign(-1, 0).setFont("Vector", 16 * scale); + g.drawString(year, center.x + 40 * scale, center.y - 62 * scale); + g.drawString(month, center.x + 40 * scale, center.y - 44 * scale); + g.drawString(day, center.x + 40 * scale, center.y - 26 * scale); + g.drawString(month2, center.x + 40 * scale, center.y + 48 * scale); + g.drawString(day2, center.x + 40 * scale, center.y + 66 * scale); + } + + + return {init:drawClock, tick:drawClock, tickpersec:false}; + } + + return getFace; + +})(); + diff --git a/apps/multiclock/ped.js b/apps/multiclock/ped.js deleted file mode 100644 index a0f81e2e5..000000000 --- a/apps/multiclock/ped.js +++ /dev/null @@ -1,41 +0,0 @@ -(() => { - - function getFace(){ - - function draw() { - let steps = "-"; - let show_steps = false; - - // only attempt to get steps if activepedom is loaded - if (WIDGETS.activepedom !== undefined) { - steps = WIDGETS.activepedom.getSteps(); - } else if (WIDGETS.wpedom !== undefined) { - steps = WIDGETS.wpedom.getSteps(); - } - - var d = new Date(); - var da = d.toString().split(" "); - var time = da[4].substr(0,5); - - g.reset(); - g.clearRect(0,24,239,239); - g.setFont("Vector", 80); - g.setColor(1,1,1); // white - g.setFontAlign(0, -1); - g.drawString(time, g.getWidth()/2, 60); - g.setColor(0,255,0); // green - g.setFont("Vector", 60); - g.drawString(steps, g.getWidth()/2, 160); - } - - function onSecond(){ - var t = new Date(); - if ((t.getSeconds() % 5) === 0) draw(); - } - - return {init:draw, tick:onSecond}; - } - - return getFace; - -})(); diff --git a/apps/multiclock/timdat.js b/apps/multiclock/timdat.js deleted file mode 100644 index a4a93a691..000000000 --- a/apps/multiclock/timdat.js +++ /dev/null @@ -1,47 +0,0 @@ -(() => { - var locale = require("locale"); - var dayFirst = ["en_GB", "en_IN", "en_NAV", "de_DE", "nl_NL", "fr_FR", "en_NZ", "en_AU", "de_AT", "en_IL", "es_ES", "fr_BE", "de_CH", "fr_CH", "it_CH", "it_IT", "tr_TR", "pt_BR", "cs_CZ", "pt_PT"]; - var withDot = ["de_DE", "nl_NL", "de_AT", "de_CH", "hu_HU", "cs_CZ", "sl_SI"]; - - function getFace(){ - - var lastmin=-1; - function drawClock(){ - var d=Date(); - if (d.getMinutes()==lastmin) return; - var tm=d.toString().split(' ')[4].substring(0,5); - lastmin=d.getMinutes(); - g.reset(); - g.clearRect(0,24,239,239); - var w=g.getWidth(); - g.setColor(0xffff); - g.setFontVector(80); - g.drawString(tm,4+(w-g.stringWidth(tm))/2,64); - g.setFontVector(36); - g.setColor(0x07ff); - var dt=locale.dow(d, 1) + " "; - if (dayFirst.includes(locale.name)) { - dt+=d.getDate(); - if (withDot.includes(locale.name)) { - dt+="."; - } - dt+=" " + locale.month(d, 1); - } else { - dt+=locale.month(d, 1) + " " + d.getDate(); - } - g.drawString(dt,(w-g.stringWidth(dt))/2,160); - g.flip(); - } - - function drawFirst(){ - lastmin=-1; - drawClock(); - } - - return {init:drawFirst, tick:drawClock}; - } - - return getFace; - -})(); - diff --git a/apps/multiclock/txt.js b/apps/multiclock/txt.face.js similarity index 56% rename from apps/multiclock/txt.js rename to apps/multiclock/txt.face.js index 130455176..ebe5d3ef2 100644 --- a/apps/multiclock/txt.js +++ b/apps/multiclock/txt.face.js @@ -1,8 +1,14 @@ (() => { function getFace(){ - - function drawTime(d) { + + + var W = g.getWidth(); + var H = g.getHeight(); + var scale = W/240; + var F = 44 * scale; + + function drawTime() { function convert(n){ var t0 = [" ","one","two","three","four","five","six","seven","eight","nine"]; var t1 = ["ten","eleven","twelve","thirteen","fourteen","fifteen","sixteen","seventeen","eighteen","nineteen"]; @@ -13,28 +19,25 @@ return "error"; } g.reset(); - g.clearRect(0,40,239,210); - g.setColor(1,1,1); + g.clearRect(0,24,W-1,H-1); + var d = new Date(); + g.setColor(g.theme.fg); g.setFontAlign(0,0); g.setFont("Vector",44); var txt = convert(d.getHours()); - g.drawString(txt.top,120,60); - g.drawString(txt.bot,120,100); + g.setColor(g.theme.fg); + g.drawString(txt.top,W/2,H/2-2*F); + g.setColor(g.theme.fg2); + g.drawString(txt.bot,W/2,H/2-F); txt = convert(d.getMinutes()); - g.drawString(txt.top,120,140); - g.drawString(txt.bot,120,180); + g.setColor(g.theme.fg); + g.drawString(txt.top,W/2,H/2); + g.setColor(g.theme.fg2); + g.drawString(txt.bot,W/2,H/2+F); } - function onSecond(){ - var t = new Date(); - if (t.getSeconds() === 0) drawTime(t); - } - function drawAll(){ - drawTime(new Date()); - } - - return {init:drawAll, tick:onSecond}; + return {init:drawTime, tick:drawTime, tickpersec:false}; } return getFace; diff --git a/apps/multiclock/txtface.jpg b/apps/multiclock/txtface.jpg deleted file mode 100644 index e3834125780c16c697d9fb22d5d3eead3cee2d30..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 51801 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 From 54514220dbe3c00db30d3f3da14c9174df789de4 Mon Sep 17 00:00:00 2001 From: jeffmer Date: Mon, 1 Nov 2021 18:06:15 +0000 Subject: [PATCH 309/392] fix file names --- apps/multiclock/README.md | 51 ++++++++++++++++++ .../{clock.img => multiclock-icon.img} | Bin .../{clock-icon.js => multiclock-icon.js} | 0 apps/multiclock/{clock.png => multiclock.png} | Bin 4 files changed, 51 insertions(+) create mode 100644 apps/multiclock/README.md rename apps/multiclock/{clock.img => multiclock-icon.img} (100%) rename apps/multiclock/{clock-icon.js => multiclock-icon.js} (100%) rename apps/multiclock/{clock.png => multiclock.png} (100%) diff --git a/apps/multiclock/README.md b/apps/multiclock/README.md new file mode 100644 index 000000000..8e1b32543 --- /dev/null +++ b/apps/multiclock/README.md @@ -0,0 +1,51 @@ +# Multiclock + +This is a clock app that supports multiple clock faces. The user can switch between faces while retaining widget state which makes the switch fast. Currently there are four clock faces as shown below. +### Analog Clock Face + + +### Digital Clock Face + + +### Big Digit Clock Face + + +### Text Clock Face + + +### Time and Date Clock Face + + +## Controls +Clock faces are kept in a circular list. + +*BTN1* - switches to the next clock face. + +*BTN2* - switches to the app launcher. + +*BTN3* - switches to the previous clock face. + +## Adding a new face +Clock faces are described in javascript storage files named `name.face.js`. For example, the Analog Clock Face is described in `ana.face.js`. These files have the following structure: + +``` +(() => { + function getFace(){ + function onSecond(){ + //draw digits, hands etc + } + function drawAll(){ + //draw background + initial state of digits, hands etc + } + return {init:drawAll, tick:onSecond}; + } + return getFace; +})(); +``` +For those familiar with the structure of widgets, this is similar, however, there is an additional level of function nesting. This means that although faces are loaded when the clock app starts running they are not instantiated until their `getFace` function is called, i.e. memory is not allocated to structures such as image buffer arrays declared in `getFace` until the face is selected. Consequently, adding a face does not require a lot of extra memory. + +The app at start up loads all files `*.face.js`. The simplest way of adding a face is thus to load it into `Storage` using the WebIDE. Similarly, to remove an unwanted face, simply delete it from `Storage` using the WebIDE. + +## Support + +Please report bugs etc. by raising an issue [here](https://github.com/jeffmer/JeffsBangleAppsDev). \ No newline at end of file diff --git a/apps/multiclock/clock.img b/apps/multiclock/multiclock-icon.img similarity index 100% rename from apps/multiclock/clock.img rename to apps/multiclock/multiclock-icon.img diff --git a/apps/multiclock/clock-icon.js b/apps/multiclock/multiclock-icon.js similarity index 100% rename from apps/multiclock/clock-icon.js rename to apps/multiclock/multiclock-icon.js diff --git a/apps/multiclock/clock.png b/apps/multiclock/multiclock.png similarity index 100% rename from apps/multiclock/clock.png rename to apps/multiclock/multiclock.png From 9f8e451a249527a2c9380549a5cfde80ed5ec4f6 Mon Sep 17 00:00:00 2001 From: Richard de Boer Date: Mon, 1 Nov 2021 19:50:21 +0100 Subject: [PATCH 310/392] menusmall: follow latest E_showMenu improvements - remove unused variable - remove unused parameter from `select()` - shave a few bytes off `move()` If a numerical item has `item.wrap` we no longer check if `item.min/max` is set, because your menu will be broken either way. Only small optimizations, so skip the version bump. --- apps/menusmall/boot.js | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/apps/menusmall/boot.js b/apps/menusmall/boot.js index 805413e2b..43c66089f 100644 --- a/apps/menusmall/boot.js +++ b/apps/menusmall/boot.js @@ -46,7 +46,6 @@ E.showMenu = function(items) { rows = 1+rowmax-rowmin; } } - var less = idx>0; while (rows--) { var name = menuItems[idx]; var item = items[name]; @@ -77,7 +76,7 @@ E.showMenu = function(items) { g.setColor((idxitem.max) - item.value = (item.wrap && item.min!==undefined) ? item.min : item.max; + if (item.min!==undefined && item.valueitem.max) item.value = item.wrap ? item.min : item.max; if (item.onchange) item.onchange(item.value); l.draw(options.selected,options.selected); } else { var a=options.selected; - options.selected = (dir+options.selected)%menuItems.length; - if (options.selected<0) options.selected += menuItems.length; + options.selected = (dir+options.selected+menuItems.length)%menuItems.length; l.draw(Math.min(a,options.selected), Math.max(a,options.selected)); } } From 33763110cc4958f47907ec84ff72374beabcc423 Mon Sep 17 00:00:00 2001 From: jeffmer Date: Mon, 1 Nov 2021 19:19:16 +0000 Subject: [PATCH 311/392] tunig layout --- apps/multiclock/digi.face.js | 2 +- apps/multiclock/dk.face.js | 4 ++-- apps/multiclock/multiclock.app.js | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/apps/multiclock/digi.face.js b/apps/multiclock/digi.face.js index 1a72c1964..50a5c529e 100644 --- a/apps/multiclock/digi.face.js +++ b/apps/multiclock/digi.face.js @@ -4,7 +4,7 @@ function getFace(){ var W = g.getWidth(); var H = g.getHeight(); - var scale = w/240; + var scale = W/240; var buf = Graphics.createArrayBuffer(W,92,1,{msb:true}); function flip() { diff --git a/apps/multiclock/dk.face.js b/apps/multiclock/dk.face.js index bca7cb2f5..a89397a75 100644 --- a/apps/multiclock/dk.face.js +++ b/apps/multiclock/dk.face.js @@ -20,13 +20,13 @@ g.setColor(g.theme.fg); g.setFontAlign(0,-1); g.setFontVector(80*scale); - g.drawString(tm,4+W/2,H/2-80*scale); + g.drawString(tm,4+W/2,H/2+24-80*scale); g.setFontVector(36*scale); g.setColor(g.theme.fg2); d[1] = locale.month(now,3); d[0] = locale.dow(now,3); var dt=d[0]+" "+d[1]+" "+d[2];//+" "+d[3]; - g.drawString(dt,W/2,H/2); + g.drawString(dt,W/2,H/2+24); g.flip(); } diff --git a/apps/multiclock/multiclock.app.js b/apps/multiclock/multiclock.app.js index af0ee06b9..126802500 100644 --- a/apps/multiclock/multiclock.app.js +++ b/apps/multiclock/multiclock.app.js @@ -29,7 +29,7 @@ function startdraw() { intervalRefSec = setInterval(face.tick,1000); else queueMinuteTick(face.tick); - wOS.drawWidgets(); + Bangle.drawWidgets(); } var SCREENACCESS = { From 26beb8fafdf4eceb5a2265a3507304d3f54034e6 Mon Sep 17 00:00:00 2001 From: Gordon Williams Date: Mon, 1 Nov 2021 19:47:57 +0000 Subject: [PATCH 312/392] health 0.05: Fix daily summary calculation --- apps.json | 4 ++-- apps/health/ChangeLog | 1 + apps/health/boot.js | 19 ++++++++++--------- 3 files changed, 13 insertions(+), 11 deletions(-) diff --git a/apps.json b/apps.json index 494b98766..35d95d9a7 100644 --- a/apps.json +++ b/apps.json @@ -49,10 +49,10 @@ { "id": "health", "name": "Health Tracking", - "version": "0.04", + "version": "0.05", "description": "Logs health data and provides an app to view it (BETA - requires firmware 2v11)", "icon": "app.png", - "tags": "tool,system", + "tags": "tool,system,health", "supports": ["BANGLEJS","BANGLEJS2"], "readme": "README.md", "storage": [ diff --git a/apps/health/ChangeLog b/apps/health/ChangeLog index a21d76fd1..808282b64 100644 --- a/apps/health/ChangeLog +++ b/apps/health/ChangeLog @@ -3,3 +3,4 @@ 0.03: Settings to turn HRM on 0.04: Add HRM graph view Don't restart HRM when changing apps if we've already got a good BPM value +0.05: Fix daily summary calculation diff --git a/apps/health/boot.js b/apps/health/boot.js index 17fbaaaa8..a8d78f685 100644 --- a/apps/health/boot.js +++ b/apps/health/boot.js @@ -55,28 +55,29 @@ Bangle.on("health", health => { } var recordPos = DB_HEADER_LEN+(rec*DB_RECORD_LEN); require("Storage").write(fn, getRecordData(health), recordPos, DB_FILE_LEN); - if (rec%DB_RECORDS_PER_DAY != DB_RECORDS_PER_DAY-1) return; + if (rec%DB_RECORDS_PER_DAY != DB_RECORDS_PER_DAY-2) return; // we're at the end of the day. Read in all of the data for the day and sum it up var sumPos = recordPos + DB_RECORD_LEN; // record after the current one is the sum if (f.substr(sumPos, DB_RECORD_LEN)!="\xFF\xFF\xFF\xFF") { print("HEALTH ERR: Daily summary already written!"); return; } - health = { steps:0, bpm:0, movement:0, records:0}; + health = { steps:0, bpm:0, movement:0, movCnt:0, bpmCnt:0}; var records = DB_RECORDS_PER_HR*24; for (var i=0;i Date: Mon, 1 Nov 2021 20:38:22 +0000 Subject: [PATCH 313/392] final release fixes --- apps.json | 2 +- apps/multiclock/README.md | 27 ++++----------------------- apps/multiclock/digi.face.js | 6 +++--- apps/multiclock/txt.face.js | 10 +++++----- 4 files changed, 13 insertions(+), 32 deletions(-) diff --git a/apps.json b/apps.json index edf21dd2d..305e5255b 100644 --- a/apps.json +++ b/apps.json @@ -2684,7 +2684,7 @@ "id": "multiclock", "name": "Multi Clock", "version": "0.07", - "description": "Clock with multiple faces - Big, Analogue, Digital, Text, Time-Date.\n Switch between faces with BTN1 & BTN3", + "description": "Clock with multiple faces. Switch between faces with BTN1 & BTN3 or swipe left-right. For best display set theme Background 2 to cyan or some other bright colour in settings.", "icon": "multiclock.png", "type": "clock", "tags": "clock", diff --git a/apps/multiclock/README.md b/apps/multiclock/README.md index 8e1b32543..e8b8335ea 100644 --- a/apps/multiclock/README.md +++ b/apps/multiclock/README.md @@ -1,29 +1,11 @@ # Multiclock -This is a clock app that supports multiple clock faces. The user can switch between faces while retaining widget state which makes the switch fast. Currently there are four clock faces as shown below. +This is a clock app that supports multiple clock faces. The user can switch between faces while retaining widget state which makes the switch fast. Currently there are four clock faces as shown below. There are currently an anlog, digital, text, big digit, time and date, and a clone of the Nifty-A-Clock faces. ### Analog Clock Face -### Digital Clock Face - - -### Big Digit Clock Face - - -### Text Clock Face - - -### Time and Date Clock Face - - ## Controls -Clock faces are kept in a circular list. - -*BTN1* - switches to the next clock face. - -*BTN2* - switches to the app launcher. - -*BTN3* - switches to the previous clock face. +Swipe left and right on both the Bangle and Bangle 2 switch between faces. BTN1 & BTH3 also switch faces on the Bangle. ## Adding a new face Clock faces are described in javascript storage files named `name.face.js`. For example, the Analog Clock Face is described in `ana.face.js`. These files have the following structure: @@ -37,7 +19,7 @@ Clock faces are described in javascript storage files named `name.face.js`. For function drawAll(){ //draw background + initial state of digits, hands etc } - return {init:drawAll, tick:onSecond}; + return {init:drawAll, tick:onSecond, tickpersec:true}; } return getFace; })(); @@ -46,6 +28,5 @@ For those familiar with the structure of widgets, this is similar, however, ther The app at start up loads all files `*.face.js`. The simplest way of adding a face is thus to load it into `Storage` using the WebIDE. Similarly, to remove an unwanted face, simply delete it from `Storage` using the WebIDE. -## Support +If `tickpersec` is false then `tick` is only called each minute as this is more power effcient - especially on the BAngle 2. -Please report bugs etc. by raising an issue [here](https://github.com/jeffmer/JeffsBangleAppsDev). \ No newline at end of file diff --git a/apps/multiclock/digi.face.js b/apps/multiclock/digi.face.js index 50a5c529e..21f339afc 100644 --- a/apps/multiclock/digi.face.js +++ b/apps/multiclock/digi.face.js @@ -9,7 +9,7 @@ function getFace(){ var buf = Graphics.createArrayBuffer(W,92,1,{msb:true}); function flip() { g.setColor(g.theme.fg); - g.drawImage({width:buf.getWidth(),height:buf.getHeight(),buffer:buf.buffer},0,H/2-46); + g.drawImage({width:buf.getWidth(),height:buf.getHeight(),buffer:buf.buffer},0,H/2-34); } var W = g.getWidth(); @@ -24,10 +24,10 @@ function getFace(){ buf.setFont("Vector",54*scale); buf.setFontAlign(0,-1); buf.drawString(time,W/2,0); - buf.setFont("6x8",2); + buf.setFont("6x8",scale<1?1:2); buf.setFontAlign(0,-1); var date = d.toString().substr(0,15); - buf.drawString(date, W/2, 70); + buf.drawString(date, W/2, 70*scale); flip(); } return {init:drawTime, tick:drawTime, tickpersec:true}; diff --git a/apps/multiclock/txt.face.js b/apps/multiclock/txt.face.js index ebe5d3ef2..fddc07214 100644 --- a/apps/multiclock/txt.face.js +++ b/apps/multiclock/txt.face.js @@ -23,17 +23,17 @@ var d = new Date(); g.setColor(g.theme.fg); g.setFontAlign(0,0); - g.setFont("Vector",44); + g.setFont("Vector",F); var txt = convert(d.getHours()); g.setColor(g.theme.fg); - g.drawString(txt.top,W/2,H/2-2*F); + g.drawString(txt.top,W/2,H/2+24-2*F); g.setColor(g.theme.fg2); - g.drawString(txt.bot,W/2,H/2-F); + g.drawString(txt.bot,W/2,H/2+24-F); txt = convert(d.getMinutes()); g.setColor(g.theme.fg); - g.drawString(txt.top,W/2,H/2); + g.drawString(txt.top,W/2,H/2+24); g.setColor(g.theme.fg2); - g.drawString(txt.bot,W/2,H/2+F); + g.drawString(txt.bot,W/2,H/2+24+F); } From 37b1e38e7fe9702c6d98fb56774fb0f291ca4bd4 Mon Sep 17 00:00:00 2001 From: jeffmer Date: Tue, 2 Nov 2021 12:52:22 +0000 Subject: [PATCH 314/392] fix minute tick bug --- apps.json | 2 +- apps/multiclock/ChangeLog | 1 + apps/multiclock/multiclock.app.js | 9 +++++---- 3 files changed, 7 insertions(+), 5 deletions(-) diff --git a/apps.json b/apps.json index 305e5255b..31184e954 100644 --- a/apps.json +++ b/apps.json @@ -2683,7 +2683,7 @@ { "id": "multiclock", "name": "Multi Clock", - "version": "0.07", + "version": "0.08", "description": "Clock with multiple faces. Switch between faces with BTN1 & BTN3 or swipe left-right. For best display set theme Background 2 to cyan or some other bright colour in settings.", "icon": "multiclock.png", "type": "clock", diff --git a/apps/multiclock/ChangeLog b/apps/multiclock/ChangeLog index f40f04031..9d02ae85e 100644 --- a/apps/multiclock/ChangeLog +++ b/apps/multiclock/ChangeLog @@ -5,6 +5,7 @@ 0.05: make Bangle compatible 0.06: add minute tick for efficiency and nifty A clock 0.07: compatible with Bang;e.js 2 +0.08: fix minute tick bug diff --git a/apps/multiclock/multiclock.app.js b/apps/multiclock/multiclock.app.js index 126802500..c24e5c94b 100644 --- a/apps/multiclock/multiclock.app.js +++ b/apps/multiclock/multiclock.app.js @@ -14,11 +14,12 @@ function stopdraw() { g.clear(); } -function queueMinuteTick(f) { - if (tickTimeout) clearTimeout(drawTimeout); +function queueMinuteTick() { + if (tickTimeout) clearTimeout(tickTimeout); tickTimeout = setTimeout(function() { tickTimeout = undefined; - f(); + face.tick(); + queueMinuteTick(); }, 60000 - (Date.now() % 60000)); } @@ -28,7 +29,7 @@ function startdraw() { if (face.tickpersec) intervalRefSec = setInterval(face.tick,1000); else - queueMinuteTick(face.tick); + queueMinuteTick(); Bangle.drawWidgets(); } From 102b1b2ddb229e929e1fdb1995e01e9f23d920bb Mon Sep 17 00:00:00 2001 From: Gordon Williams Date: Tue, 2 Nov 2021 15:36:19 +0000 Subject: [PATCH 315/392] update default BG2 theme colour --- apps/setting/settings.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/setting/settings.js b/apps/setting/settings.js index 0c2930086..0decb5313 100644 --- a/apps/setting/settings.js +++ b/apps/setting/settings.js @@ -193,7 +193,7 @@ function showThemeMenu() { 'Light BW': ()=>{ upd({ fg:cl("#000"), bg:cl("#fff"), - fg2:cl("#00f"), bg2:cl("#0ff"), + fg2:cl("#000"), bg2:cl("#cff"), fgH:cl("#000"), bgH:cl("#0ff"), dark:false }); From ca4bef7a1cac03a652440d121128864efbf3546c Mon Sep 17 00:00:00 2001 From: Gordon Williams Date: Tue, 2 Nov 2021 16:19:32 +0000 Subject: [PATCH 316/392] Add ability to download health info --- apps.json | 1 + apps/health/interface.html | 133 +++++++++++++++++++++++++++++++++++++ apps/health/lib.js | 1 - core | 2 +- 4 files changed, 135 insertions(+), 2 deletions(-) create mode 100644 apps/health/interface.html diff --git a/apps.json b/apps.json index 35d95d9a7..03e20050e 100644 --- a/apps.json +++ b/apps.json @@ -55,6 +55,7 @@ "tags": "tool,system,health", "supports": ["BANGLEJS","BANGLEJS2"], "readme": "README.md", + "interface": "interface.html", "storage": [ {"name":"health.app.js","url":"app.js"}, {"name":"health.img","url":"app-icon.js","evaluate":true}, diff --git a/apps/health/interface.html b/apps/health/interface.html new file mode 100644 index 000000000..f04857926 --- /dev/null +++ b/apps/health/interface.html @@ -0,0 +1,133 @@ + + + + + +

+ + + + + diff --git a/apps/health/lib.js b/apps/health/lib.js index 20d73a907..70305bff8 100644 --- a/apps/health/lib.js +++ b/apps/health/lib.js @@ -16,7 +16,6 @@ function getRecordIdx(d) { // Read all records from the given month exports.readAllRecords = function(d, cb) { - var rec = getRecordIdx(d); var fn = getRecordFN(d); var f = require("Storage").read(fn); if (f===undefined) return; diff --git a/core b/core index 70b49d8db..5ef454a1a 160000 --- a/core +++ b/core @@ -1 +1 @@ -Subproject commit 70b49d8dbd2afa76f4485aadf679dc75e0a8b4ac +Subproject commit 5ef454a1acce54f6420015b519a7ecf461f9bc37 From 47ba763a9d24cd59e0b57549a3d7bcefb54c7aa2 Mon Sep 17 00:00:00 2001 From: Gordon Williams Date: Tue, 2 Nov 2021 20:06:27 +0000 Subject: [PATCH 317/392] recorder 0.02: Use 'recorder.log..' rather than 'record.log..' + Fix interface.html --- apps.json | 2 +- apps/recorder/ChangeLog | 2 + apps/recorder/app.js | 8 +- apps/recorder/interface.html | 272 ++++++++++++++++++++++------------- apps/recorder/widget.js | 2 +- 5 files changed, 183 insertions(+), 103 deletions(-) diff --git a/apps.json b/apps.json index 1a79e59f4..35fe0b49a 100644 --- a/apps.json +++ b/apps.json @@ -624,7 +624,7 @@ "id": "recorder", "name": "Recorder (BETA)", "shortName": "Recorder", - "version": "0.01", + "version": "0.02", "description": "Record GPS position, heart rate and more in the background, then download to your PC.", "icon": "app.png", "tags": "tool,outdoors,gps,widget", diff --git a/apps/recorder/ChangeLog b/apps/recorder/ChangeLog index 5560f00bc..bf90d0384 100644 --- a/apps/recorder/ChangeLog +++ b/apps/recorder/ChangeLog @@ -1 +1,3 @@ 0.01: New App! +0.02: Use 'recorder.log..' rather than 'record.log..' + Fix interface.html diff --git a/apps/recorder/app.js b/apps/recorder/app.js index 9b9c06c78..ac3e391fc 100644 --- a/apps/recorder/app.js +++ b/apps/recorder/app.js @@ -13,7 +13,7 @@ function loadSettings() { var changed = false; if (!settings.file) { changed = true; - settings.file = "record.log0.csv"; + settings.file = "recorder.log0.csv"; } if (!Array.isArray(settings.record)) { settings.record = ["gps"]; @@ -31,7 +31,7 @@ function updateSettings() { } function getTrackNumber(filename) { - return parseInt(filename.match(/^record\.log(.*)\.csv$/)[1]||0); + return parseInt(filename.match(/^recorder\.log(.*)\.csv$/)[1]||0); } function showMainMenu() { @@ -73,7 +73,7 @@ function showMainMenu() { step: 1, onchange: v => { settings.recording = false; // stop recording if we change anything - settings.file = "record.log"+v+".csv"; + settings.file = "recorder.log"+v+".csv"; updateSettings(); } }, @@ -105,7 +105,7 @@ function viewTracks() { '': { 'title': 'Tracks' } }; var found = false; - require("Storage").list(/^record\.log.*\.csv$/,{sf:true}).forEach(filename=>{ + require("Storage").list(/^recorder\.log.*\.csv$/,{sf:true}).forEach(filename=>{ found = true; menu["Track "+getTrackNumber(filename)] = ()=>viewTrack(filename,false); }); diff --git a/apps/recorder/interface.html b/apps/recorder/interface.html index 2ae1c3e71..eca13d263 100644 --- a/apps/recorder/interface.html +++ b/apps/recorder/interface.html @@ -3,7 +3,6 @@ - THIS IS NOT CURRENTLY IMPLEMENTED
@@ -14,14 +13,35 @@ function saveKML(track,title) { var kml = ` - - ${title} - - - ${track.map(pt=>[pt.lon, pt.lat, pt.alt].join(",")).join("\n ")} - - - + +${track[0].Heartrate!==undefined ? ` + Heart Rate + `:``} +${track[0].Steps!==undefined ? ` + Step Count`:``} + + + + Tracks + + ${title} + +${track.map(pt=>` ${pt.Time.toISOString()}\n`).join("")} +${track.map(pt=>` ${pt.Longitude} ${pt.Latitude} ${pt.Altitude}\n`).join("")} + + + +${track[0].Heartrate!==undefined ? ` +${track.map(pt=>` ${0|pt.Heartrate}\n`).join("")} + `:``} +${track[0].Steps!==undefined ? ` +${track.map(pt=>` ${0|pt.Steps}\n`).join("")} + `:``} + + + + + `; var a = document.createElement("a"), @@ -39,6 +59,7 @@ function saveKML(track,title) { function saveGPX(track, title) { var gpx = ` + @@ -48,11 +69,19 @@ function saveGPX(track, title) { `; track.forEach(pt=>{ gpx += ` - - ${pt.alt} - + + ${pt.Altitude} + + + + ${pt.Heartrate ? `${pt.Heartrate}`:``} + ${""/*...*/} + ${""/* 65 */} + + `; }); + // https://www8.garmin.com/xmlschemas/TrackPointExtensionv1.xsd gpx += ` @@ -70,104 +99,153 @@ function saveGPX(track, title) { }, 0); } -function trackLineToObject(l, hasTrackNumber) { +function saveCSV(track, title) { + var headers = Object.keys(track[0]); + var csv = headers.join(",")+"\n"; + track.forEach(t=>{ + csv += headers.map(k=>{ + if (t[k] instanceof Date) return t[k].toISOString(); + return t[k]; + }).join(",")+"\n"; + }); + Util.saveCSV(title, csv); +} + +function trackLineToObject(headers, l) { var t = l.trim().split(","); - var n = hasTrackNumber ? 1 : 0; - var o = { - date : new Date(parseInt(t[n+0])), - lat : parseFloat(t[n+1]), - lon : parseFloat(t[n+2]), - alt : parseFloat(t[n+3]) - }; - if (hasTrackNumber) - o.number = t[0]; + var o = {}; + headers.forEach((header,i) => o[header] = t[i]); + if (o.Time) o.Time = new Date(o.Time*1000); return o; } -function downloadTrack(trackid, callback) { +function downloadTrack(filename, callback) { Util.showModal("Downloading Track..."); - Util.readStorageFile(`.gpsrc${trackid.toString(36)}`,data=>{ + Util.readStorageFile(filename,data=>{ Util.hideModal(); - var track = data.trim().split("\n").map(l=>trackLineToObject(l,false)); + var lines = data.trim().split("\n"); + var headers = lines.shift().split(","); + var track = lines.map(l=>trackLineToObject(headers, l)); callback(track); }); } + function getTrackList() { - Util.showModal("Loading Tracks..."); + Util.showModal("Loading Track List..."); domTracks.innerHTML = ""; - Puck.write(`\x10(function() { - Bluetooth.println(""); - for (var n=0;n<36;n++) { - var f = require("Storage").open(".gpsrc"+n.toString(36),"r"); - var l = f.readLine(); - Bluetooth.println((l!==undefined) ? (n + "," + l.trim()) : ""); - } - })()\n`,tracklist=>{ - var trackLines = tracklist.trim().split("\n").filter(l=>l!=""); - var html = `
-
\n`; - trackLines.forEach(l => { - var track = trackLineToObject(l, true /*has track number*/); - html += ` -
-
-
Track ${track.number}
-
${track.date.toString().substr(0,24)}
-
-
- -
-
- -
- `; - }); - if (trackLines.length==0) { - html += ` -
-
-
No tracks
-
No GPS tracks found
-
-
- `; - } - html += ` -
-
`; - domTracks.innerHTML = html; - Util.hideModal(); - var buttons = domTracks.querySelectorAll("button"); - for (var i=0;i { - var button = event.currentTarget; - var trackid = parseInt(button.getAttribute("trackid")); - var task = button.getAttribute("task"); - if (task=="delete") { - Util.showModal("Deleting Track..."); - Util.eraseStorageFile(`.gpsrc${trackid.toString(36)}`,()=>{ - Util.hideModal(); - getTrackList(); + Puck.eval(`require("Storage").list(/^recorder\\.log.*\\.csv$/,{sf:1})`,files=>{ + var trackList = []; + var promise = Promise.resolve(); + /* For each file ask Bangle.js for info. Since we now start recording even + before we have a GPS trace, we get the Bangle to do a *quick* search for us + to see if it found any data first. */ + files.forEach(filename => { + promise = promise.then(()=>new Promise(resolve => { + var trackNo = filename.match(/^recorder\.log(.*)\.csv$/)[1]; + Util.showModal(`Loading Track ${trackNo}...`); + Puck.eval(`(function(fn) { + var f = require("Storage").open(fn,"r"); + var headers = f.readLine(); + var data = f.readLine(); + var lIdx = headers.split(",").indexOf("Latitude"); + if (lIdx >= 0) { + var tries = 100; + var l = data; + while (l && l.split(",")[lIdx]=="" && tries++) + l = f.readLine(); + if (l) data = l; + } + return {headers:headers,l:data}; +})(${JSON.stringify(filename)})`, trackInfo=>{ + console.log(filename," => ",trackInfo); + trackInfo.headers = trackInfo.headers.split(","); + trackList.push({ + filename : filename, + number : trackNo, + info : trackInfo }); + resolve(); + }); + })); + }); + // ================================================ + // When 'promise' completes we now have all the info in trackList + promise.then(() => { + var html = `
+
\n`; + trackList.forEach(track => { + var trackData = trackLineToObject(track.info.headers, track.info.l); + console.log("track", track); + console.log("trackData", trackData); + html += ` +
+
+
Track ${track.number}
+
${trackData.Time.toLocaleDateString(undefined, { weekday: 'long', year: 'numeric', month: 'long', day: 'numeric' })}
+
+${trackData.Latitude ? ` +
+ +
` : `
No GPS info
`} + +
+ `; + }); + if (trackList.length==0) { + html += ` +
+
+
No tracks
+
No GPS tracks found
+
+
+ `; } - if (task=="downloadkml") { - downloadTrack(trackid, track => saveKML(track, `Bangle.js Track ${trackid}`)); - } - if (task=="downloadgpx") { - downloadTrack(trackid, track => saveGPX(track, `Bangle.js Track ${trackid}`)); - } - }); - } - }) + html += ` +
+
`; + domTracks.innerHTML = html; + Util.hideModal(); + var buttons = domTracks.querySelectorAll("button"); + for (var i=0;i { + var button = event.currentTarget; + var filename = button.getAttribute("filename"); + var trackid = parseInt(button.getAttribute("trackid")); + if (!filename || trackid===undefined) return; + var task = button.getAttribute("task"); + if (task=="delete") { + Util.showModal("Deleting Track..."); + Util.eraseStorageFile(filename,()=>{ + Util.hideModal(); + getTrackList(); + }); + } + if (task=="downloadkml") { + downloadTrack(filename, track => saveKML(track, `Bangle.js Track ${trackid}`)); + } + if (task=="downloadgpx") { + downloadTrack(filename, track => saveGPX(track, `Bangle.js Track ${trackid}`)); + } + if (task=="downloadcsv") { + downloadTrack(filename, track => saveCSV(track, `Bangle.js Track ${trackid}`)); + } + }); + } + }); + }); } function onInit() { diff --git a/apps/recorder/widget.js b/apps/recorder/widget.js index df0be1d20..09893bbb7 100644 --- a/apps/recorder/widget.js +++ b/apps/recorder/widget.js @@ -7,7 +7,7 @@ function loadSettings() { var settings = require("Storage").readJSON("recorder.json",1)||{}; settings.period = settings.period||10; - if (!settings.file || !settings.file.startsWith("record.log")) + if (!settings.file || !settings.file.startsWith("recorder.log")) settings.recording = false; return settings; } From ab3de04c2deaa14265d8887446d5824aa5e2f360 Mon Sep 17 00:00:00 2001 From: Filipe Fradique Date: Thu, 4 Nov 2021 05:36:09 +0000 Subject: [PATCH 318/392] Fixed wrong day being displayed in nifty clocks --- apps/ffcniftya/app.js | 2 +- apps/ffcniftyb/app.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/ffcniftya/app.js b/apps/ffcniftya/app.js index 0b8865bec..31742f64a 100644 --- a/apps/ffcniftya/app.js +++ b/apps/ffcniftya/app.js @@ -27,7 +27,7 @@ function draw() { const hour = d02(now.getHours() - (is12Hour && now.getHours() > 12 ? 12 : 0)); const minutes = d02(now.getMinutes()); - const day = d02(now.getDay()); + const day = d02(now.getDate()); const month = d02(now.getMonth() + 1); const year = now.getFullYear(); diff --git a/apps/ffcniftyb/app.js b/apps/ffcniftyb/app.js index 58bf0b24b..75d217ab4 100644 --- a/apps/ffcniftyb/app.js +++ b/apps/ffcniftyb/app.js @@ -31,7 +31,7 @@ function renderText(g) { const hour = d02(now.getHours() - (is12Hour && now.getHours() > 12 ? 12 : 0)); const minutes = d02(now.getMinutes()); - const day = d02(now.getDay()); + const day = d02(now.getDate()); const month = d02(now.getMonth() + 1); const year = now.getFullYear(); From 935d409f4c46f527b8e306fad854113419b69b9e Mon Sep 17 00:00:00 2001 From: Gordon Williams Date: Thu, 4 Nov 2021 17:16:02 +0000 Subject: [PATCH 319/392] ability to depend on a specific app ID Layout can display images in buttons iOS and Android integration apps --- README.md | 1 + apps.json | 43 +++++++++-- apps/android/ChangeLog | 1 + apps/android/app-icon.js | 1 + apps/android/app.js | 2 + apps/android/app.png | Bin 0 -> 636 bytes apps/android/boot.js | 55 ++++++++++++++ apps/ios/ChangeLog | 1 + apps/ios/app-icon.js | 1 + apps/ios/app.js | 2 + apps/ios/app.png | Bin 0 -> 1301 bytes apps/ios/boot.js | 129 ++++++++++++++++++++++++++++++++ apps/messages/ChangeLog | 2 + apps/messages/app.js | 157 ++++++++++++++++++++++++++++----------- apps/messages/boot.js | 36 --------- apps/messages/lib.js | 37 +++++++++ core | 2 +- modules/Layout.js | 31 ++++---- 18 files changed, 403 insertions(+), 98 deletions(-) create mode 100644 apps/android/ChangeLog create mode 100644 apps/android/app-icon.js create mode 100644 apps/android/app.js create mode 100644 apps/android/app.png create mode 100644 apps/android/boot.js create mode 100644 apps/ios/ChangeLog create mode 100644 apps/ios/app-icon.js create mode 100644 apps/ios/app.js create mode 100644 apps/ios/app.png create mode 100644 apps/ios/boot.js create mode 100644 apps/messages/ChangeLog delete mode 100644 apps/messages/boot.js diff --git a/README.md b/README.md index 21f5dbff9..527cb1188 100644 --- a/README.md +++ b/README.md @@ -230,6 +230,7 @@ and which gives information about the app for the Launcher. "tags": "", // comma separated tag list for searching "supports": ["BANGLEJS2"], // List of device IDs supported, either BANGLEJS or BANGLEJS2 "dependencies" : { "notify":"type" } // optional, app 'types' we depend on + "dependencies" : { "messages":"app" } // optional, depend on a specific app ID // for instance this will use notify/notifyfs is they exist, or will pull in 'notify' "readme": "README.md", // if supplied, a link to a markdown-style text file // that contains more information about this app (usage, etc) diff --git a/apps.json b/apps.json index 35fe0b49a..156b6e5b0 100644 --- a/apps.json +++ b/apps.json @@ -32,17 +32,50 @@ { "id": "messages", "name": "Messages", - "version": "0.01", - "description": "App to display notifications from iOS and Gadgetbridge (BETA)", + "version": "0.02", + "description": "App to display notifications from iOS and Gadgetbridge", "icon": "app.png", + "type": "app", "tags": "tool,system", "supports": ["BANGLEJS","BANGLEJS2"], "readme": "README.md", "storage": [ {"name":"messages.app.js","url":"app.js"}, {"name":"messages.img","url":"app-icon.js","evaluate":true}, - {"name":"messages.boot.js","url":"boot.js"}, - {"name":"messages.wid.js","url":"widget.js"} + {"name":"messages.wid.js","url":"widget.js"}, + {"name":"messages","url":"lib.js"} + ], + "sortorder": -9 + }, + { + "id": "android", + "name": "Android Integration", + "version": "0.01", + "description": "(BETA) App to display notifications from Gadgetbridge on Android. This will eventually replace the Gadgetbridge widget.", + "icon": "app.png", + "tags": "tool,system,messages,notifications", + "dependencies": {"messages":"app"}, + "supports": ["BANGLEJS","BANGLEJS2"], + "storage": [ + {"name":"android.app.js","url":"app.js"}, + {"name":"android.img","url":"app-icon.js","evaluate":true}, + {"name":"android.boot.js","url":"boot.js"} + ], + "sortorder": -9 + }, + { + "id": "ios", + "name": "iOS Integration", + "version": "0.01", + "description": "(BETA) App to display notifications from iOS devices", + "icon": "app.png", + "tags": "tool,system,ios,apple,messages,notifications", + "dependencies": {"messages":"app"}, + "supports": ["BANGLEJS","BANGLEJS2"], + "storage": [ + {"name":"ios.app.js","url":"app.js"}, + {"name":"ios.img","url":"app-icon.js","evaluate":true}, + {"name":"ios.boot.js","url":"boot.js"} ], "sortorder": -9 }, @@ -216,7 +249,7 @@ "id": "gbridge", "name": "Gadgetbridge", "version": "0.24", - "description": "The default notification handler for Gadgetbridge notifications from Android", + "description": "The default notification handler for Gadgetbridge notifications from Android. This will eventually be replaced by the 'Android' app.", "icon": "app.png", "type": "widget", "tags": "tool,system,android,widget", diff --git a/apps/android/ChangeLog b/apps/android/ChangeLog new file mode 100644 index 000000000..5560f00bc --- /dev/null +++ b/apps/android/ChangeLog @@ -0,0 +1 @@ +0.01: New App! diff --git a/apps/android/app-icon.js b/apps/android/app-icon.js new file mode 100644 index 000000000..9253ec839 --- /dev/null +++ b/apps/android/app-icon.js @@ -0,0 +1 @@ +require("heatshrink").decompress(atob("mEw4MA///xF9FstggwFDuEOAoc//gFJv/+AoZHBAgUB8/nwAFCBYIFCgYFB4AFHABdjCIPGAoPzAoPPAvpHFMpYFFPosAnk8NgYFdjEYfMo=")) diff --git a/apps/android/app.js b/apps/android/app.js new file mode 100644 index 000000000..5c5c7ddaf --- /dev/null +++ b/apps/android/app.js @@ -0,0 +1,2 @@ +// Config app not implemented yet +load("messages.app.js"); diff --git a/apps/android/app.png b/apps/android/app.png new file mode 100644 index 0000000000000000000000000000000000000000..65150f08de4205995f37e8b83cd6bf94aa25352b GIT binary patch literal 636 zcmV-?0)zdDP)1F^Gb$6(WiXLUDF7wIWE{$ymfapyKRc zhJZgN!NDnue?Ui5XhrNIRB-CxBGf_BO|ys^>r38o=#!L?Jx&ow@sJKT6@ zBexX+fQph&|875t3T*lQ3sLew(?;SM8=C}h--8bzcOI@4L{u&Sr-2h;NCWr`dg3jk65lA7^+8@Ur7q4HW`x#fA=;jxH?ikzp- zcKOwn#iaQq$>MTt;W7lTflN5G6~15Uv!r`|PeiUhT6}A4Xk!7D+ET8?kB=ay{*C}-+Ha-HLtMqtJ$1;e)GMNsf|6*;^*yy#RH@z`%Kcop?;rBuX%wpM{?O) zz)O=lj0GsHbeAcjr9oe6zj;+z!BBv)i3R3N*Y@C|#l0M3CGuCOTq|4$sR9H_>FM(3 z`u_O5+AQSp(xwc`*N+$;kSgInsV7=ZUaH-EaZEhhxs;Q}b;W0>e73sLiQxoH8Yf`V zI02JpDg^9yF10?gN(}Qw3J8?a{zh8I^GeBTi)Pq-#7S-RO|Gn0w1u zKg=+0;W0000 { + // feed a copy to other handlers if there were any + if (_GB) setTimeout(_GB,0,Object.assign({},event)); + + /* TODO: Call handling, fitness */ + var HANDLERS = { + // {t:"notify",id:int, src,title,subject,body,sender,tel:string} add + "notify" : function() { event.t="add";require("messages").pushMessage(event); }, + // {t:"notify~",id:int, title:string} // modified + "notify~" : function() { event.t="modify";require("messages").pushMessage(event); }, + // {t:"notify-",id:int} // remove + "notify-" : function() { event.t="remove";require("messages").pushMessage(event); }, + // {t:"find", n:bool} // find my phone + "find" : function() { + if (Bangle.findDeviceInterval) { + clearInterval(Bangle.findDeviceInterval); + delete Bangle.findDeviceInterval; + } + if (event.n) // Ignore quiet mode: we always want to find our watch + Bangle.findDeviceInterval = setInterval(_=>Bangle.buzz(),1000); + }, + // {t:"musicstate", state:"play/pause",position,shuffle,repeat} + "musicstate" : function() { + require("messages").pushMessage({t:"modify",id:"music",title:"Music",state:event.state}); + }, + // {t:"musicinfo", artist,album,track,dur,c(track count),n(track num} + "musicinfo" : function() { + require("messages").pushMessage(Object.assign(event, {t:"modify",id:"music",title:"Music"})); + } + }; + var h = HANDLERS[event.t]; + if (h) h(); else console.log("GB Unknown",event); + }; + + // Battery monitor + function sendBattery() { gbSend({ t: "status", bat: E.getBattery() }); } + NRF.on("connect", () => setTimeout(sendBattery, 2000)); + setInterval(sendBattery, 10*60*1000); + // Health tracking + Bangle.on('health', health=>{ + gbSend({ t: "act", stp: health.steps, hrm: health.bpm }); + }); + // Music control + Bangle.musicControl = cmd => { + // play/pause/next/previous/volumeup/volumedown + gbSend({ t: "music", m:cmd }); + } +})(); diff --git a/apps/ios/ChangeLog b/apps/ios/ChangeLog new file mode 100644 index 000000000..5560f00bc --- /dev/null +++ b/apps/ios/ChangeLog @@ -0,0 +1 @@ +0.01: New App! diff --git a/apps/ios/app-icon.js b/apps/ios/app-icon.js new file mode 100644 index 000000000..b74048750 --- /dev/null +++ b/apps/ios/app-icon.js @@ -0,0 +1 @@ +require("heatshrink").decompress(atob("mEwwZC/AGEB/4AGwARHv4RH/wQGj4QHAAP4CIoQJAAIRWg4RL8ARVn4RL/gR/CJv9BIP934DFEZH+v/0AgMv+wRK+YCBz/7C4PfCJOfAQO//JHMCIX3/d/CJ//t4RJF4JlCCIP/koRKEYh+DCIxlBCIQADCJQgCn4DCCJSbBHIIDBXYQRI/+Sp4DB7ZsCfdQRzg4RL8ARVgARLCAgRSj4QJ/ARFgF/CA/+CA0AgIRHwARHAH4AnA")) diff --git a/apps/ios/app.js b/apps/ios/app.js new file mode 100644 index 000000000..5c5c7ddaf --- /dev/null +++ b/apps/ios/app.js @@ -0,0 +1,2 @@ +// Config app not implemented yet +load("messages.app.js"); diff --git a/apps/ios/app.png b/apps/ios/app.png new file mode 100644 index 0000000000000000000000000000000000000000..79aa78f3a3cbe6d008a396f65cf4b6e739a5d494 GIT binary patch literal 1301 zcmV+w1?u{VP)7hf>g#sri^Q3NGIK}89)+*_c9?slgwz3g`9 z_^{GuU1oM>+XYPa_q6k!Gc*4)-}%n@W)^bf$dTi2qU<<}h&!xl%Rwy@ojE8b0)->g za1)_bIXDhdAMp9=l~PfwCtD666p5@r)K-Bhnd!95InXzi`u%&XIHwIjM4aJ>wnb3u zN3P8}N@RP$@2gcx>1KY8bQiiC;sHdd4WUkLb2>lM83;upD@4>+qbDm9)bdilx8BHV zI0GW$7ExQWBg#60><|&Rk=-zWM73dRR#e$Q!Q`-}Ei47H@~1NS<4c2Dp%KSqDaY6b!?C5<~d_?M z6Ca$$>2WY~L&a_HQ|kBKR;%q9$p7I>oL8C?2cn~n9i@BaJ1OD;2A4ih-;L?Wx4#dK z$(1nr+y_#8t6rbNq-X3GKHCAf|2l*-d<_8AatRv$W^jf<7^AxQ}==kq(abYv^U;A>5sss&y3%_6@Rc7P2&0$kN3@!jS=L zn_X-?mD*3PW?r2zEy#d&vci1yp0e0Qvu zg+)!NhBVj?;AUVPeeU6{$>dd2(PMEAuls|G=X!|6bh>+De0QLY&2^_(ySf7JSQh|3 zuM2N=kQW;r{Mrdo9R_us{Z}vX=HcBuU1l$RAcIEs=k_LoPn1zIyLf0!ABgk)fi}K5 z*v|EiehLcnm^!JDnk5r?aJnz)d|hB?i{jAr4qC#8xX{%>RdESxD`&GfSZ*lPsF97h z6W=LDtrOpCm<7;t$5f=J%gA6Bz||}W$qZ$z#V`P+Xv~h93=obPnM`It3_m8_X_S%% zLz|I7L|mar*C}9HR#aI;!TCV3x6{ + /* eg: + { + event:"add", + uid:42, + category:4, + categoryCnt:42, + silent:true, + important:false, + preExisting:true, + positive:false, + negative:true + } */ + + //console.log("ANCS",msg.event,msg.id); + // don't need info for remove events - pass these on + if (msg.event=="remove") + return E.emit("notify", msg); + + // not a remove - we need to get the message info first + function ancsHandler() { + var msg = Bangle.ancsMessageQueue[0]; + NRF.ancsGetNotificationInfo( msg.uid ).then( info => { + E.emit("notify", Object.assign(msg, info)); + Bangle.ancsMessageQueue.shift(); + if (Bangle.ancsMessageQueue.length) + ancsHandler(); + }); + } + Bangle.ancsMessageQueue.push(msg); + // if this is the first item in the queue, kick off ancsHandler, + // otherwise ancsHandler will handle the rest + if (Bangle.ancsMessageQueue.length==1) + ancsHandler(); +}); + +// Handle ANCS events with all the data +E.on('notify',msg=>{ +/* Info from ANCS event plus + "uid" : int, + "appId" : string, + "title" : string, + "subtitle" : string, + "message" : string, + "messageSize" : string, + "date" : string, + "posAction" : string, + "negAction" : string, + "name" : string, +*/ + var appNames = { + "com.netflix.Netflix" : "Netflix", + "com.google.ios.youtube" : "YouTube", + "com.google.hangouts" : "Hangouts" + // could also use NRF.ancsGetAppInfo(msg.appId) here + }; + var unicodeRemap = { + '2019':"'" + }; + var replacer = ""; //(n)=>print('Unknown unicode '+n.toString(16)); + if (appNames[msg.appId]) msg.a + require("messages").pushMessage({ + t : msg.event, + id : msg.uid, + src : appNames[msg.appId] || msg.appId, + title : msg.title&&E.decodeUTF8(msg.title, unicodeRemap, replacer), + subject : msg.subtitle&&E.decodeUTF8(msg.subtitle, unicodeRemap, replacer), + body : msg.message&&E.decodeUTF8(msg.message, unicodeRemap, replacer) + }); + // TODO: posaction/negaction? +}); + +// Apple media service +E.on('AMS',a=>{ + function push(m) { + var msg = { t : "modify", id : "music", title:"Music" }; + if (a.id=="artist") msg.artist = m; + else if (a.id=="album") msg.artist = m; + else if (a.id=="title") msg.tracl = m; + else return; // duration? need to reformat + require("messages").pushMessage(msg); + } + if (a.truncated) NRF.amsGetMusicInfo(a.id).then(push) + else push(a.value); +}); + +// Music control +Bangle.musicControl = cmd => { + // play, pause, playpause, next, prev, volup, voldown, repeat, shuffle, skipforward, skipback, like, dislike, bookmark + NRF.amsCommand(cmd); +} + +/* +// For testing... + +NRF.ancsGetNotificationInfo = function(uid) { + print("ancsGetNotificationInfo",uid); + return Promise.resolve({ + "uid" : uid, + "appId" : "Hangouts", + "title" : "Hello", + "subtitle" : "There", + "message" : "Lots and lots of text", + "messageSize" : 100, + "date" : "...", + "posAction" : "ok", + "negAction" : "cancel", + "name" : "Fred", + }); +}; + +E.emit("ANCS", { + event:"add", + uid:42, + category:4, + categoryCnt:42, + silent:true, + important:false, + preExisting:true, + positive:false, + negative:true +}); + +*/ diff --git a/apps/messages/ChangeLog b/apps/messages/ChangeLog new file mode 100644 index 000000000..bbeb8b717 --- /dev/null +++ b/apps/messages/ChangeLog @@ -0,0 +1,2 @@ +0.01: New App! +0.02: Add 'messages' library diff --git a/apps/messages/app.js b/apps/messages/app.js index 801434498..2fb0c613b 100644 --- a/apps/messages/app.js +++ b/apps/messages/app.js @@ -12,15 +12,10 @@ /* For example for maps: -GB({"t":"notify","id":1575479849,"src":"Hangouts","title":"A Name","body":"message contents"}) -GB({"t":"notify","id":2,"src":"Hangouts","title":"Gordon","body":"Hello world quite a lot of text here..."}) -GB({"t":"notify","id":3,"src":"Messages","title":"Ted","body":"Bed time."}) -GB({"t":"notify","id":4,"src":"Messages","title":"Kailo","body":"Mmm... food"}) -GB({"t":"notify-","id":1}) - -GB({"t":"notify","id":1,"src":"Maps","title":"0 yd - High St","body":"Campton - 11:48 ETA","img":"Y2MBAA....AAAAAAAAAAAAAA="}) -GB({"t":"notify~","id":1,"body":"Campton - 11:54 ETA"}) -GB({"t":"notify~","id":1,"title":"High St"}) +// a message +{"t":"add","id":1575479849,"src":"Hangouts","title":"A Name","body":"message contents"} +// maps +{"t":"add","id":1,"src":"Maps","title":"0 yd - High St","body":"Campton - 11:48 ETA","img":"GhqBAAAMAAAHgAAD8AAB/gAA/8AAf/gAP/8AH//gD/98B//Pg/4B8f8Afv+PP//n3/f5//j+f/wfn/4D5/8Aef+AD//AAf/gAD/wAAf4AAD8AAAeAAADAAA="} */ @@ -37,6 +32,21 @@ function saveMessages() { require("Storage").writeJSON("messages.json",MESSAGES) } +function getBackImage() { + return atob("FhYBAAAAEAAAwAAHAAA//wH//wf//g///BwB+DAB4EAHwAAPAAA8AADwAAPAAB4AAHgAB+AH/wA/+AD/wAH8AA=="); +} +function getMessageImage(msg) { + if (msg.img) return atob(msg.img); + var s = (msg.src||"").toLowerCase(); + if (s=="skype") return atob("GhoBB8AAB//AA//+Af//wH//+D///w/8D+P8Afz/DD8/j4/H4fP5/A/+f4B/n/gP5//B+fj8fj4/H8+DB/PwA/x/A/8P///B///gP//4B//8AD/+AAA+AA=="); + if (s=="hangouts") return atob("FBaBAAH4AH/gD/8B//g//8P//H5n58Y+fGPnxj5+d+fmfj//4//8H//B//gH/4A/8AA+AAHAABgAAAA="); + if (s=="whatsapp") return atob("GBiBAAB+AAP/wAf/4A//8B//+D///H9//n5//nw//vw///x///5///4///8e//+EP3/APn/wPn/+/j///H//+H//8H//4H//wMB+AA=="); + if (msg.id=="music") return atob("FhaBAH//+/////////////h/+AH/4Af/gB/+H3/7/f/v9/+/3/7+f/vB/w8H+Dwf4PD/x/////////////3//+A="); + if (msg.id=="back") return getBackImage(); + return atob("HBKBAD///8H///iP//8cf//j4//8f5//j/x/8//j/H//H4//4PB//EYj/44HH/Hw+P4//8fH//44///xH///g////A=="); +} + + function showMapMessage(msg) { var m; var distance, street, target, eta; @@ -50,48 +60,98 @@ function showMapMessage(msg) { target = m[1]; eta = m[2]; } else target=msg.body; - layout = new Layout({ - type:"v", c: [ - {type:"txt", font:"6x15", label:target, bgCol:"#0f0", fillx:1, pad:2 }, - {type:"h", bgCol:"#0f0", fillx:1, c: [ - {type:"txt", font:"6x8", label:"Towards" }, - {type:"txt", font:"6x15:2", label:street } + layout = new Layout({ type:"v", c: [ + {type:"txt", font:"6x15", label:target, bgCol:"#0f0", fillx:1, pad:2 }, + {type:"h", bgCol:"#0f0", fillx:1, c: [ + {type:"txt", font:"6x8", label:"Towards" }, + {type:"txt", font:"6x15:2", label:street } + ]}, + {type:"h",fillx:1, filly:1, c: [ + msg.img?{type:"img",src:atob(msg.img), scale:2}:{}, + {type:"v", fillx:1, c: [ + {type:"txt", font:"6x15:2", label:distance||"" } ]}, - {type:"h",fillx:1, filly:1, c: [ - {type:"img",src:atob(msg.img)}, - {type:"v", fillx:1, c: [ - {type:"txt", font:"6x15:2", label:distance||"" } - ]}, - ]}, - - {type:"txt", font:"6x8:2", label:eta } - ] - }); - g.clearRect(0,24,g.getWidth()-1,g.getHeight()-1); + ]}, + {type:"txt", font:"6x8:2", label:eta } + ]}); + g.clearRect(Bangle.appRect); layout.render(); Bangle.setUI("updown",function() { // any input to mark as not new and return to menu msg.new = false; saveMessages(); + layout = undefined; checkMessages(); }); } +function showMusicMessage(msg) { + function fmtTime(s) { + var m = Math.floor(s/60); + s = (s%60).toString().padStart(2,0); + return m+":"+s; + } + + function back() { + msg.new = false; + saveMessages(); + layout = undefined; + checkMessages(); + } + layout = new Layout({ type:"v", c: [ + {type:"h", fillx:1, bgCol:"#0f0", c: [ + { type:"btn", src:getBackImage, cb:back }, + { type:"v", fillx:1, c: [ + { type:"txt", font:"6x15:2", label:msg.artist, pad:2 }, + { type:"txt", font:"6x15", label:msg.album, pad:2 } + ]} + ]}, + {type:"txt", font:"6x15:2", label:msg.track, fillx:1, filly:1, pad:2 }, + Bangle.musicControl?{type:"h",fillx:1, c: [ + {type:"btn", pad:8, label:"\0"+atob("FhgBwAADwAAPwAA/wAD/gAP/gA//gD//gP//g///j///P//////////P//4//+D//gP/4A/+AD/gAP8AA/AADwAAMAAA"), cb:()=>Bangle.musicControl("play")}, // play + {type:"btn", pad:8, label:"\0"+atob("EhaBAHgHvwP/wP/wP/wP/wP/wP/wP/wP/wP/wP/wP/wP/wP/wP/wP/wP/wP/wP/wP/wP3gHg"), cb:()=>Bangle.musicControl("pause")}, // pause + {type:"btn", pad:8, label:"\0"+atob("EhKBAMAB+AB/gB/wB/8B/+B//B//x//5//5//x//B/+B/8B/wB/gB+AB8ABw"), cb:()=>Bangle.musicControl("next")}, // next + ]}:{}, + {type:"txt", font:"6x8:2", label:msg.dur?fmtTime(msg.dur):"--:--" } + ]}); + g.clearRect(Bangle.appRect); + layout.render(); +} + function showMessage(msgid) { var msg = MESSAGES.find(m=>m.id==msgid); if (!msg) return checkMessages(); // go home if no message found if (msg.src=="Maps") return showMapMessage(msg); - var m = msg.title+"\n"+msg.body; - E.showPrompt(m,{title:"Message", buttons : {"Read":"read", "Back":"back"}}).then(chosen => { - if (chosen=="read") { - // any input to mark as not new and return to menu - msg.new = false; - saveMessages(); - checkMessages(); - } else { - checkMessages(true); - } - }); + if (msg.id=="music") return showMusicMessage(msg); + // Normal text message display + var title=msg.title, titleFont = "6x15:2"; + if (title) { + var w = g.getWidth()-40; + if (g.setFont(titleFont).stringWidth(title) > w) + titleFont = "6x15"; + if (g.setFont(titleFont).stringWidth(title) > w) + title = g.wrapString(title, w).join("\n"); + } + layout = new Layout({ type:"v", c: [ + {type:"h", fillx:1, bgCol:"#0f0", c: [ + { type:"img", src:getMessageImage(msg), pad:2 }, + { type:"v", fillx:1, c: [ + {type:"txt", font:"6x15", label:msg.src||"Message", bgCol:"#0f0", fillx:1, pad:2 }, + title?{type:"txt", font:titleFont, label:title, bgCol:"#0f0", fillx:1, pad:2 }:{}, + ]}, + ]}, + {type:"txt", font:"6x15", label:msg.body||"", wrap:true, fillx:1, filly:1, pad:2 }, + {type:"h",fillx:1, c: [ + {type:"btn", src:getBackImage(), cb:()=>checkMessages(true)}, // back + msg.new?{type:"btn", src:atob("HRiBAD///8D///wj///Fj//8bj//x3z//Hvx/8/fx/j+/x+Ad/B4AL8Rh+HxwH+PHwf+cf5/+x/n/PH/P8cf+cx5/84HwAB4fgAD5/AAD/8AAD/wAAD/AAAD8A=="), cb:()=>{ + msg.new = false; // read mail + saveMessages(); + checkMessages(); + }}:{} + ]} + ]}); + g.clearRect(Bangle.appRect); + layout.render(); } function checkMessages(forceShowMenu) { @@ -112,24 +172,35 @@ function checkMessages(forceShowMenu) { // Otherwise show a menu E.showScroller({ h : 48, - c : MESSAGES.length, + c : MESSAGES.length+1, draw : function(idx, r) {"ram" var msg = MESSAGES[idx-1]; if (msg && msg.new) g.setBgColor("#4F4"); else g.setBgColor((idx&1) ? "#CFC" : "#9F9"); g.clearRect(r.x,r.y,r.x+r.w-1,r.y+r.h-1).setColor(g.theme.fg); - if (idx==0) msg = {title:"< Back"}; + if (idx==0) msg = {id:"back", title:"< Back"}; + if (!msg) return; + var x = r.x+2, title = msg.title, body = msg.body; + var img = getMessageImage(msg); + if (msg.id=="music") { + title = msg.artist || "Music"; + body = msg.track; + } + if (img) { + g.drawImage(img, x+24, r.y+24, {rotate:0}); // force centering + x += 50; + } var m = msg.title+"\n"+msg.body; if (msg.src) g.setFontAlign(1,-1).drawString(msg.src, r.x+r.w-2, r.t+2); - if (msg.title) g.setFontAlign(-1,-1).setFont("12x20").drawString(msg.title, r.x+2,r.y+2); - if (msg.body) { + if (title) g.setFontAlign(-1,-1).setFont("12x20").drawString(title, x,r.y+2); + if (body) { g.setFontAlign(-1,-1).setFont("6x8"); - var l = g.wrapString(msg.body, r.w-14); + var l = g.wrapString(body, r.w-14); if (l.length>3) { l = l.slice(0,3); l[l.length-1]+="..."; } - g.drawString(l.join("\n"), r.x+12,r.y+20); + g.drawString(l.join("\n"), x+10,r.y+20); } }, select : idx => { diff --git a/apps/messages/boot.js b/apps/messages/boot.js deleted file mode 100644 index dce3979da..000000000 --- a/apps/messages/boot.js +++ /dev/null @@ -1,36 +0,0 @@ -(function() { - var _GB = global.GB; - global.GB = (event) => { - if (_GB) setTimeout(_GB,0,event); - // call handling? - if (!event.t.startsWith("notify")) return; - /* event is: - {t:"notify",id:int, src,title,subject,body,sender,tel:string} - {t:"notify~",id:int, title:string} // modified - {t:"notify-",id:int} // remove - */ - var messages, inApp = "undefined"!=typeof MESSAGES; - if (inApp) - messages = MESSAGES; // we're in an app that has already loaded messages - else // no app - load messages - messages = require("Storage").readJSON("messages.json",1)||[]; - // now modify/delete as appropriate - var mIdx = messages.findIndex(m=>m.id==event.id); - if (event.t=="notify-") { - if (mIdx>=0) messages.splice(mIdx, 1); // remove item - mIdx=-1; - } else { // add/modify - if (event.t=="notify") event.new=true; // new message - if (mIdx<0) mIdx=messages.push(event)-1; - else Object.assign(messages[mIdx], event); - } - require("Storage").writeJSON("messages.json",messages); - if (inApp) return onMessagesModified(mIdx<0 ? {id:event.id} : messages[mIdx]); - // ok, saved now - we only care if it's new - if (event.t!="notify") return; - // if we're in a clock, go straight to messages app - if (Bangle.CLOCK) return load("messages.app.js"); - if (!global.WIDGETS || !WIDGETS.messages) return Bangle.buzz(); // no widgets - just buzz to let someone know - WIDGETS.messages.newMessage(); - }; -})() diff --git a/apps/messages/lib.js b/apps/messages/lib.js index e69de29bb..f3ea242e5 100644 --- a/apps/messages/lib.js +++ b/apps/messages/lib.js @@ -0,0 +1,37 @@ +exports.pushMessage = function(event) { + /* event is: + {t:"add",id:int, src,title,subject,body,sender,tel, important:bool} // add new + {t:"add",id:int, id:"music", state, artist, track, etc} // add new + {t:"remove-",id:int} // remove + {t:"modify",id:int, title:string} // modified + */ + var messages, inApp = "undefined"!=typeof MESSAGES; + if (inApp) + messages = MESSAGES; // we're in an app that has already loaded messages + else // no app - load messages + messages = require("Storage").readJSON("messages.json",1)||[]; + // now modify/delete as appropriate + var mIdx = messages.findIndex(m=>m.id==event.id); + if (event.t=="remove") { + if (mIdx>=0) messages.splice(mIdx, 1); // remove item + mIdx=-1; + } else { // add/modify + if (event.t=="add") event.new=true; // new message + if (mIdx<0) mIdx=messages.push(event)-1; + else Object.assign(messages[mIdx], event); + } + require("Storage").writeJSON("messages.json",messages); + // if in app, process immediately + if (inApp) return onMessagesModified(mIdx<0 ? {id:event.id} : messages[mIdx]); + // ok, saved now - we only care if it's new + if (event.t!="add") return; + // otherwise load after a delay, to ensure we have all the messages + if (exports.messageTimeout) clearTimeout(exports.messageTimeout); + exports.messageTimeout = setTimeout(function() { + exports.messageTimeout = undefined; + // if we're in a clock or it's important, go straight to messages app + if (Bangle.CLOCK || event.important) return load("messages.app.js"); + if (!global.WIDGETS || !WIDGETS.messages) return Bangle.buzz(); // no widgets - just buzz to let someone know + WIDGETS.messages.newMessage(); + }, 500); +} diff --git a/core b/core index 5ef454a1a..59f80bb52 160000 --- a/core +++ b/core @@ -1 +1 @@ -Subproject commit 5ef454a1acce54f6420015b519a7ecf461f9bc37 +Subproject commit 59f80bb52a38da12cb272f9106cb3951b49dab2e diff --git a/modules/Layout.js b/modules/Layout.js index 8a5b0a0a5..c7d44ab9b 100644 --- a/modules/Layout.js +++ b/modules/Layout.js @@ -29,7 +29,9 @@ layoutObject has: * `undefined` - blank, can be used for padding * `"txt"` - a text label, with value `label` and `r` for text rotation. 'font' is required * `"btn"` - a button, with value `label` and callback `cb` - * `"img"` - an image where `src` is an image, or a function which is called to return an image to draw + optional `src` specifies an image (like img) in which case label is ignored + * `"img"` - an image where `src` is an image, or a function which is called to return an image to draw. + optional `scale` specifies if image should be scaled up or not * `"custom"` - a custom block where `render(layoutObj)` is called to render * `"h"` - Horizontal layout, `c` is an array of more `layoutObject` * `"v"` - Veritical layout, `c` is an array of more `layoutObject` @@ -85,6 +87,7 @@ function Layout(layout, options) { this.lazy = options.lazy || false; var btnList; + Bangle.setUI(); // remove all existing input handlers if (process.env.HWVERSION!=2) { // no touchscreen, find any buttons in 'layout' btnList = []; @@ -157,6 +160,7 @@ function Layout(layout, options) { } } if (process.env.HWVERSION==2) { + // Handler for touch events function touchHandler(l,e) { if (l.type=="btn" && l.cb && e.x>=l.x && e.y>=l.y && e.x<=l.x+l.w && e.y<=l.y+l.h) { @@ -245,10 +249,8 @@ Layout.prototype.render = function (l) { g.setFont(l.font,l.fsz).setFontAlign(0,0,l.r).drawString(l.label, l.x+(l.w>>1), l.y+(l.h>>1)); } }, "btn":function(l){ - var x = l.x+(0|l.pad); - var y = l.y+(0|l.pad); - var w = l.w-(l.pad<<1); - var h = l.h-(l.pad<<1); + var x = l.x+(0|l.pad), y = l.y+(0|l.pad), + w = l.w-(l.pad<<1), h = l.h-(l.pad<<1); var poly = [ x,y+4, x+4,y, @@ -259,10 +261,12 @@ Layout.prototype.render = function (l) { x+4,y+h-1, x,y+h-5, x,y+4 - ]; - g.setColor(l.selected?g.theme.bgH:g.theme.bg2).fillPoly(poly).setColor(l.selected ? g.theme.fgH : g.theme.fg2).drawPoly(poly).setFont("6x8",2).setFontAlign(0,0,l.r).drawString(l.label,l.x+l.w/2,l.y+l.h/2); + ], bg = l.selected?g.theme.bgH:g.theme.bg2; + g.setColor(bg).fillPoly(poly).setColor(l.selected ? g.theme.fgH : g.theme.fg2).drawPoly(poly); + if (l.src) g.setBgColor(bg).drawImage("function"==typeof l.src?l.src():l.src, l.x + 10 + (0|l.pad), l.y + 8 + (0|l.pad)); + else g.setFont("6x8",2).setFontAlign(0,0,l.r).drawString(l.label,l.x+l.w/2,l.y+l.h/2); }, "img":function(l){ - g.drawImage("function"==typeof l.src?l.src():l.src, l.x + (0|l.pad), l.y + (0|l.pad)); + g.drawImage("function"==typeof l.src?l.src():l.src, l.x + (0|l.pad), l.y + (0|l.pad), l.scale?{scale:l.scale}:undefined); }, "custom":function(l){ l.render(l); },"h":function(l) { l.c.forEach(render); }, @@ -363,12 +367,13 @@ Layout.prototype.update = function() { l._w = m.width; l._h = m.height; } }, "btn": function(l) { - l._h = 32; - l._w = 20 + l.label.length*12; + var m = l.src?g.imageMetrics("function"==typeof l.src?l.src():l.src):g.setFont("6x8",2).stringMetrics(l.label); + l._h = 16 + m.height; + l._w = 20 + m.width; }, "img": function(l) { - var m = g.imageMetrics("function"==typeof l.src?l.src():l.src); // get width and height out of image - l._w = m.width; - l._h = m.height; + var m = g.imageMetrics("function"==typeof l.src?l.src():l.src), s=l.scale||1; // get width and height out of image + l._w = m.width*s; + l._h = m.height*s; }, "": function(l) { // size should already be set up in width/height l._w = 0; From a530c7e391a27d3c47469dbcfa9e1dc4e3b51398 Mon Sep 17 00:00:00 2001 From: Gordon Williams Date: Thu, 4 Nov 2021 19:38:06 +0000 Subject: [PATCH 320/392] more icons --- apps/ios/boot.js | 4 +++- apps/messages/app.js | 1 + 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/apps/ios/boot.js b/apps/ios/boot.js index 69e5e2a26..c3ccb9275 100644 --- a/apps/ios/boot.js +++ b/apps/ios/boot.js @@ -56,7 +56,9 @@ E.on('notify',msg=>{ var appNames = { "com.netflix.Netflix" : "Netflix", "com.google.ios.youtube" : "YouTube", - "com.google.hangouts" : "Hangouts" + "com.google.hangouts" : "Hangouts", + "com.skype.SkypeForiPad": "Skype", + "com.atebits.Tweetie2": "Twitter" // could also use NRF.ancsGetAppInfo(msg.appId) here }; var unicodeRemap = { diff --git a/apps/messages/app.js b/apps/messages/app.js index 2fb0c613b..749cf3c73 100644 --- a/apps/messages/app.js +++ b/apps/messages/app.js @@ -41,6 +41,7 @@ function getMessageImage(msg) { if (s=="skype") return atob("GhoBB8AAB//AA//+Af//wH//+D///w/8D+P8Afz/DD8/j4/H4fP5/A/+f4B/n/gP5//B+fj8fj4/H8+DB/PwA/x/A/8P///B///gP//4B//8AD/+AAA+AA=="); if (s=="hangouts") return atob("FBaBAAH4AH/gD/8B//g//8P//H5n58Y+fGPnxj5+d+fmfj//4//8H//B//gH/4A/8AA+AAHAABgAAAA="); if (s=="whatsapp") return atob("GBiBAAB+AAP/wAf/4A//8B//+D///H9//n5//nw//vw///x///5///4///8e//+EP3/APn/wPn/+/j///H//+H//8H//4H//wMB+AA=="); + if (s=="twitter") return atob("GhYBAABgAAB+JgA/8cAf/ngH/5+B/8P8f+D///h///4f//+D///g///wD//8B//+AP//gD//wAP/8AB/+AB/+AH//AAf/AAAYAAA"); if (msg.id=="music") return atob("FhaBAH//+/////////////h/+AH/4Af/gB/+H3/7/f/v9/+/3/7+f/vB/w8H+Dwf4PD/x/////////////3//+A="); if (msg.id=="back") return getBackImage(); return atob("HBKBAD///8H///iP//8cf//j4//8f5//j/x/8//j/H//H4//4PB//EYj/44HH/Hw+P4//8fH//44///xH///g////A=="); From 0a527c08c60515bf7b1e0842179b4a22e0b65696 Mon Sep 17 00:00:00 2001 From: Gordon Williams Date: Thu, 4 Nov 2021 19:38:24 +0000 Subject: [PATCH 321/392] fix sanity check --- bin/sanitycheck.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/bin/sanitycheck.js b/bin/sanitycheck.js index 9c5f4c916..a84d26efd 100755 --- a/bin/sanitycheck.js +++ b/bin/sanitycheck.js @@ -121,8 +121,8 @@ apps.forEach((app,appIdx) => { if (app.dependencies) { if (("object"==typeof app.dependencies) && !Array.isArray(app.dependencies)) { Object.keys(app.dependencies).forEach(dependency => { - if (app.dependencies[dependency]!="type") - ERROR(`App ${app.id} 'dependencies' must all be tagged 'type' right now`); + if (!["type","app"].includes(app.dependencies[dependency])) + ERROR(`App ${app.id} 'dependencies' must all be tagged 'type' or 'app' right now`); }); } else ERROR(`App ${app.id} 'dependencies' must be an object`); From baa36bdd91b9e89e4eb8ae3d4febc8e296fac211 Mon Sep 17 00:00:00 2001 From: Gordon Williams Date: Mon, 8 Nov 2021 09:42:40 +0000 Subject: [PATCH 322/392] about --- apps.json | 2 +- apps/about/ChangeLog | 1 + apps/about/app-bangle2.js | 3 ++- apps/android/app.js | 2 +- apps/ios/app.js | 2 +- 5 files changed, 6 insertions(+), 4 deletions(-) diff --git a/apps.json b/apps.json index 156b6e5b0..eb7289153 100644 --- a/apps.json +++ b/apps.json @@ -132,7 +132,7 @@ { "id": "about", "name": "About", - "version": "0.10", + "version": "0.11", "description": "Bangle.js About page - showing software version, stats, and a collaborative mural from the Bangle.js KickStarter backers", "icon": "app.png", "tags": "tool,system", diff --git a/apps/about/ChangeLog b/apps/about/ChangeLog index 9557e448d..03e920a9a 100644 --- a/apps/about/ChangeLog +++ b/apps/about/ChangeLog @@ -8,3 +8,4 @@ 0.08: Make about (mostly) work on non-240px screens 0.09: Actual Bangle.js 1 pixels as of 13 Oct 2021 0.10: Added separate Bangle.js 2 file with Bangle.js 2 kickstarter pixels (as of 28 Oct 2021) +0.11: Bangle.js2: New pixels, btn1 to exit diff --git a/apps/about/app-bangle2.js b/apps/about/app-bangle2.js index 8a0be9f3d..32e5bafae 100644 --- a/apps/about/app-bangle2.js +++ b/apps/about/app-bangle2.js @@ -6,7 +6,7 @@ var ENV = process.env; var MEM = process.memory(); var s = require("Storage"); -var img = atob("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"); +var img = atob("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"); var imgHeight = g.imageMetrics(img).height; var imgScroll = Math.floor(Math.random()*imgHeight); @@ -69,3 +69,4 @@ function drawImage() { // TODO: a nice little animation before setTimeout(drawInfo, 1000); +setWatch(_=>load(), BTN1); diff --git a/apps/android/app.js b/apps/android/app.js index 5c5c7ddaf..b210886fd 100644 --- a/apps/android/app.js +++ b/apps/android/app.js @@ -1,2 +1,2 @@ // Config app not implemented yet -load("messages.app.js"); +setTimeout(()=>load("messages.app.js"),10); diff --git a/apps/ios/app.js b/apps/ios/app.js index 5c5c7ddaf..b210886fd 100644 --- a/apps/ios/app.js +++ b/apps/ios/app.js @@ -1,2 +1,2 @@ // Config app not implemented yet -load("messages.app.js"); +setTimeout(()=>load("messages.app.js"),10); From 4a3ef4829c8036394a21efc274c8d4484d21c82c Mon Sep 17 00:00:00 2001 From: Gordon Williams Date: Mon, 8 Nov 2021 10:03:33 +0000 Subject: [PATCH 323/392] alarm 0.14: Order of 'back' menu item --- apps.json | 8 ++++---- apps/alarm/ChangeLog | 1 + apps/alarm/app.js | 6 +++--- bin/firmwaremaker_c.js | 4 ++-- 4 files changed, 10 insertions(+), 9 deletions(-) diff --git a/apps.json b/apps.json index eb7289153..a700dc58c 100644 --- a/apps.json +++ b/apps.json @@ -94,8 +94,7 @@ {"name":"health.img","url":"app-icon.js","evaluate":true}, {"name":"health.boot.js","url":"boot.js"}, {"name":"health","url":"lib.js"} - ], - "sortorder": -2 + ] }, { "id": "launch", @@ -142,13 +141,14 @@ {"name":"about.app.js","url":"app-bangle1.js","supports": ["BANGLEJS"]}, {"name":"about.app.js","url":"app-bangle2.js","supports": ["BANGLEJS2"]}, {"name":"about.img","url":"app-icon.js","evaluate":true} - ] + ], + "sortorder": -4 }, { "id": "alarm", "name": "Default Alarm & Timer", "shortName": "Alarms", - "version": "0.13", + "version": "0.14", "description": "Set and respond to alarms and timers", "icon": "app.png", "tags": "tool,alarm,widget", diff --git a/apps/alarm/ChangeLog b/apps/alarm/ChangeLog index fce54f273..d129e9f9f 100644 --- a/apps/alarm/ChangeLog +++ b/apps/alarm/ChangeLog @@ -12,3 +12,4 @@ 0.12: Fix widget for bangle 2, now uses theme Widgets now shown on Alarm screen 0.13: Alarm widget state now updates when setting/resetting an alarm +0.14: Order of 'back' menu item diff --git a/apps/alarm/app.js b/apps/alarm/app.js index fdb7784f7..53c7154bc 100644 --- a/apps/alarm/app.js +++ b/apps/alarm/app.js @@ -33,6 +33,7 @@ function getCurrentHr() { function showMainMenu() { const menu = { '': { 'title': 'Alarm/Timer' }, + '< Back' : ()=>{load();}, 'New Alarm': ()=>editAlarm(-1), 'New Timer': ()=>editTimer(-1) }; @@ -48,7 +49,7 @@ function showMainMenu() { else editAlarm(idx); }; }); - menu['< Back'] = ()=>{load();}; + if (WIDGETS["alarm"]) WIDGETS["alarm"].reload(); return E.showMenu(menu); } @@ -70,6 +71,7 @@ function editAlarm(alarmIndex) { } const menu = { '': { 'title': 'Alarm' }, + '< Back' : showMainMenu, 'Hours': { value: hrs, onchange: function(v){if (v<0)v=23;if (v>23)v=0;hrs=v;this.value=v;} // no arrow fn -> preserve 'this' @@ -119,7 +121,6 @@ function editAlarm(alarmIndex) { showMainMenu(); }; } - menu['< Back'] = showMainMenu; return E.showMenu(menu); } @@ -174,7 +175,6 @@ function editTimer(alarmIndex) { showMainMenu(); }; } - menu['< Back'] = showMainMenu; return E.showMenu(menu); } diff --git a/bin/firmwaremaker_c.js b/bin/firmwaremaker_c.js index 28fbd2f05..eef54f226 100755 --- a/bin/firmwaremaker_c.js +++ b/bin/firmwaremaker_c.js @@ -29,8 +29,8 @@ if (DEVICE=="BANGLEJS") { } else if (DEVICE=="BANGLEJS2") { var OUTFILE = path.join(ROOTDIR, '../Espruino/libs/banglejs/banglejs2_storage_default.c'); var APPS = [ // IDs of apps to install - "boot","launch","antonclk","setting","health", - "about","alarm","widlock","widbat","widbt","widid" + "boot","launch","antonclk","setting", + "about","alarm","health","widlock","widbat","widbt","widid" ]; } else { console.log("USAGE:"); From ffc290cd6a6d7205a8ff32414fa68d94868148fe Mon Sep 17 00:00:00 2001 From: Gordon Williams Date: Tue, 9 Nov 2021 20:13:55 +0000 Subject: [PATCH 324/392] welcome as a default app --- bin/firmwaremaker_c.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bin/firmwaremaker_c.js b/bin/firmwaremaker_c.js index eef54f226..14ced9ef8 100755 --- a/bin/firmwaremaker_c.js +++ b/bin/firmwaremaker_c.js @@ -30,7 +30,7 @@ if (DEVICE=="BANGLEJS") { var OUTFILE = path.join(ROOTDIR, '../Espruino/libs/banglejs/banglejs2_storage_default.c'); var APPS = [ // IDs of apps to install "boot","launch","antonclk","setting", - "about","alarm","health","widlock","widbat","widbt","widid" + "about","alarm","health","widlock","widbat","widbt","widid","welcome" ]; } else { console.log("USAGE:"); From 8b987aa1f45bdccfbdcb27b0dbb705f0e03e6ae8 Mon Sep 17 00:00:00 2001 From: Gordon Williams Date: Tue, 9 Nov 2021 20:18:29 +0000 Subject: [PATCH 325/392] remove sortorder on apps that might confuse new users --- apps.json | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/apps.json b/apps.json index a700dc58c..6ef598255 100644 --- a/apps.json +++ b/apps.json @@ -1782,8 +1782,7 @@ {"name":"toucher.app.js","url":"app.js"}, {"name":"toucher.settings.js","url":"settings.js"} ], - "data": [{"name":"toucher.json"}], - "sortorder": -10 + "data": [{"name":"toucher.json"}] }, { "id": "balltastic", @@ -2060,8 +2059,7 @@ {"name":"dane_tcr.app.js","url":"app.js"}, {"name":"dane_tcr.settings.js","url":"settings.js"} ], - "data": [{"name":"dane_tcr.json"}], - "sortorder": -10 + "data": [{"name":"dane_tcr.json"}] }, { "id": "buffgym", From 779e550152b6c2f7a872824ffa4b1dd72707828b Mon Sep 17 00:00:00 2001 From: Gordon Williams Date: Wed, 10 Nov 2021 13:06:15 +0000 Subject: [PATCH 326/392] Fix issue where loader could forget apps if 'don't ask again' was clicked in the watch chooser --- loader.js | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/loader.js b/loader.js index 61e2b1880..a28f7fe78 100644 --- a/loader.js +++ b/loader.js @@ -55,7 +55,7 @@ function onFoundDeviceInfo(deviceId, deviceVersion) { var originalAppJSON = undefined; function filterAppsForDevice(deviceId) { - if (originalAppJSON===undefined) + if (originalAppJSON===undefined && appJSON.length) originalAppJSON = appJSON; var device = DEVICEINFO.find(d=>d.id==deviceId); @@ -97,8 +97,7 @@ function setSavedDeviceId(deviceId) { // At boot, show a window to choose which type of device you have... window.addEventListener('load', (event) => { let deviceId = getSavedDeviceId() - if (deviceId !== undefined) - return filterAppsForDevice(deviceId); + if (deviceId !== undefined) return; // already chosen var html = `
${DEVICEINFO.map(d=>` @@ -168,6 +167,10 @@ window.addEventListener('load', (event) => { }); function onAppJSONLoaded() { + let deviceId = getSavedDeviceId() + if (deviceId !== undefined) + filterAppsForDevice(deviceId); + return new Promise(resolve => { httpGet("screenshots.json").then(screenshotJSON=>{ var screenshots = []; From f4f40cee3a1c55eb50bd17319aec5f37f7ac134a Mon Sep 17 00:00:00 2001 From: Gordon Williams Date: Wed, 10 Nov 2021 13:41:58 +0000 Subject: [PATCH 327/392] Fixes for Bangle.js 1 --- apps.json | 4 +-- apps/boot/ChangeLog | 1 + apps/boot/bootupdate.js | 6 ++--- apps/messages/ChangeLog | 1 + apps/messages/app.js | 57 ++++++++++++++++++++++++++++------------- modules/Layout.js | 4 +-- 6 files changed, 47 insertions(+), 26 deletions(-) diff --git a/apps.json b/apps.json index 6ef598255..a09997f7d 100644 --- a/apps.json +++ b/apps.json @@ -16,7 +16,7 @@ { "id": "boot", "name": "Bootloader", - "version": "0.35", + "version": "0.36", "description": "This is needed by Bangle.js to automatically load the clock, menu, widgets and settings", "icon": "bootloader.png", "type": "bootloader", @@ -32,7 +32,7 @@ { "id": "messages", "name": "Messages", - "version": "0.02", + "version": "0.03", "description": "App to display notifications from iOS and Gadgetbridge", "icon": "app.png", "type": "app", diff --git a/apps/boot/ChangeLog b/apps/boot/ChangeLog index 6dc2a3577..98f80efd9 100644 --- a/apps/boot/ChangeLog +++ b/apps/boot/ChangeLog @@ -39,3 +39,4 @@ Rearrange NRF.setServices to allow .boot.js files to add services (eg ANCS) 0.35: Add Bangle.appRect polyfill Don't set beep vibration up on Bangle.js 2 (built in) +0.36: Add comments to .boot0 to make debugging a bit easier diff --git a/apps/boot/bootupdate.js b/apps/boot/bootupdate.js index 8ad61f763..5cb6421a5 100644 --- a/apps/boot/bootupdate.js +++ b/apps/boot/bootupdate.js @@ -142,8 +142,8 @@ else if (mode=="updown") { } delete E.showScroller; // deleting stops us getting confused by our own decl. builtins can't be deleted if (!E.showScroller) { // added in 2v11 - this is a limited functionality polyfill - boot += `E.showScroller = (function(a){function n(){g.reset();b>=l+c&&(c=1+b-l);bm||m>=a.c)break;var f=24+d*a.h;a.draw(m,{x:0,y:f,w:h,h:a.h});d+c==b&&g.setColor(g.theme.fgG).drawRect(0,f,h-1,f+a.h-1).drawRect(1,f+1,h-2,f+a.h-2)}g.setColor(c?g.theme.fg:g.theme.bg);g.fillPoly([e,6,e-14,20,e+14,20]);g.setColor(a.c>l+c?g.theme.fg:g.theme.bg);g.fillPoly([e,k-7,e-14,k-21,e+14,k-21])}if(!a)return Bangle.setUI();var b=0,c=0,h=g.getWidth(), -k=g.getHeight(),e=h/2,l=Math.floor((k-48)/a.h);g.clearRect(0,24,h-1,k-1);n();Bangle.setUI("updown",d=>{d?(b+=d,0>b&&(b=a.c-1),b>=a.c&&(b=0),n()):a.select(b)})});\n`; + boot += `E.showScroller = (function(a){function n(){g.reset();b>=l+c&&(c=1+b-l);bm||m>=a.c)break;var f=24+d*a.h;a.draw(m,{x:0,y:f,w:h,h:a.h});d+c==b&&g.setColor(g.theme.fg).drawRect(0,f,h-1,f+a.h-1).drawRect(1,f+1,h-2,f+a.h-2)}g.setColor(c?g.theme.fg:g.theme.bg);g.fillPoly([e,6,e-14,20,e+14,20]);g.setColor(a.c>l+c?g.theme.fg:g.theme.bg);g.fillPoly([e,k-7,e-14,k-21,e+14,k-21])}if(!a)return Bangle.setUI();var b=0,c=0,h=g.getWidth(), +k=g.getHeight(),e=h/2,l=Math.floor((k-48)/a.h);g.reset().clearRect(0,24,h-1,k-1);n();Bangle.setUI("updown",d=>{d?(b+=d,0>b&&(b=a.c-1),b>=a.c&&(b=0),n()):a.select(b)})});\n`; } delete g.imageMetrics; // deleting stops us getting confused by our own decl. builtins can't be deleted if (!g.imageMetrics) { // added in 2v11 - this is a limited functionality polyfill @@ -195,7 +195,7 @@ require('Storage').list(/\.boot\.js/).forEach(bootFile=>{ // we add a semicolon so if the file is wrapped in (function(){ ... }() // with no semicolon we don't end up with (function(){ ... }()(function(){ ... }() // which would cause an error! - boot += require('Storage').read(bootFile)+";\n"; + boot += "//"+bootFile+"\n"+require('Storage').read(bootFile)+";\n"; }); // update ble boot += `NRF.setServices(bleServices, bleServiceOptions);delete bleServices,bleServiceOptions;\n`; diff --git a/apps/messages/ChangeLog b/apps/messages/ChangeLog index bbeb8b717..4f7df3859 100644 --- a/apps/messages/ChangeLog +++ b/apps/messages/ChangeLog @@ -1,2 +1,3 @@ 0.01: New App! 0.02: Add 'messages' library +0.03: Fixes for Bangle.js 1 diff --git a/apps/messages/app.js b/apps/messages/app.js index 749cf3c73..6c7cf5fc9 100644 --- a/apps/messages/app.js +++ b/apps/messages/app.js @@ -20,6 +20,26 @@ */ var Layout = require("Layout"); +var fontMedium = g.getFonts().includes("6x15")?"6x15":"6x8:2"; +var fontBig = g.getFonts().includes("12x20")?"12x20":"6x8:2"; +var fontLarge = g.getFonts().includes("6x15")?"6x15:2":"6x8:4"; +var colBg = g.theme.dark ? "#141":"#4f4"; +var colSBg1 = g.theme.dark ? "#121":"#cFc"; +var colSBg2 = g.theme.dark ? "#242":"#9F9"; +// hack for 2v10 firmware's lack of ':size' font handling +try { + g.setFont("6x8:2"); +} catch (e) { + g._setFont = g.setFont; + g.setFont = function(f,s) { + if (f.includes(":")) { + f = f.split(":"); + return g._setFont(f[0],f[1]); + } + return g._setFont(f,s); + }; +} + var MESSAGES = require("Storage").readJSON("messages.json",1)||[]; if (!Array.isArray(MESSAGES)) MESSAGES=[]; @@ -62,15 +82,15 @@ function showMapMessage(msg) { eta = m[2]; } else target=msg.body; layout = new Layout({ type:"v", c: [ - {type:"txt", font:"6x15", label:target, bgCol:"#0f0", fillx:1, pad:2 }, - {type:"h", bgCol:"#0f0", fillx:1, c: [ + {type:"txt", font:fontMedium, label:target, bgCol:colBg, fillx:1, pad:2 }, + {type:"h", bgCol:colBg, fillx:1, c: [ {type:"txt", font:"6x8", label:"Towards" }, - {type:"txt", font:"6x15:2", label:street } + {type:"txt", font:fontLarge, label:street } ]}, {type:"h",fillx:1, filly:1, c: [ msg.img?{type:"img",src:atob(msg.img), scale:2}:{}, {type:"v", fillx:1, c: [ - {type:"txt", font:"6x15:2", label:distance||"" } + {type:"txt", font:fontLarge, label:distance||"" } ]}, ]}, {type:"txt", font:"6x8:2", label:eta } @@ -100,14 +120,14 @@ function showMusicMessage(msg) { checkMessages(); } layout = new Layout({ type:"v", c: [ - {type:"h", fillx:1, bgCol:"#0f0", c: [ + {type:"h", fillx:1, bgCol:colBg, c: [ { type:"btn", src:getBackImage, cb:back }, { type:"v", fillx:1, c: [ - { type:"txt", font:"6x15:2", label:msg.artist, pad:2 }, - { type:"txt", font:"6x15", label:msg.album, pad:2 } + { type:"txt", font:fontLarge, label:msg.artist, pad:2 }, + { type:"txt", font:fontMedium, label:msg.album, pad:2 } ]} ]}, - {type:"txt", font:"6x15:2", label:msg.track, fillx:1, filly:1, pad:2 }, + {type:"txt", font:fontLarge, label:msg.track, fillx:1, filly:1, pad:2 }, Bangle.musicControl?{type:"h",fillx:1, c: [ {type:"btn", pad:8, label:"\0"+atob("FhgBwAADwAAPwAA/wAD/gAP/gA//gD//gP//g///j///P//////////P//4//+D//gP/4A/+AD/gAP8AA/AADwAAMAAA"), cb:()=>Bangle.musicControl("play")}, // play {type:"btn", pad:8, label:"\0"+atob("EhaBAHgHvwP/wP/wP/wP/wP/wP/wP/wP/wP/wP/wP/wP/wP/wP/wP/wP/wP/wP/wP/wP3gHg"), cb:()=>Bangle.musicControl("pause")}, // pause @@ -125,23 +145,23 @@ function showMessage(msgid) { if (msg.src=="Maps") return showMapMessage(msg); if (msg.id=="music") return showMusicMessage(msg); // Normal text message display - var title=msg.title, titleFont = "6x15:2"; + var title=msg.title, titleFont = fontLarge; if (title) { var w = g.getWidth()-40; if (g.setFont(titleFont).stringWidth(title) > w) - titleFont = "6x15"; + titleFont = fontMedium; if (g.setFont(titleFont).stringWidth(title) > w) title = g.wrapString(title, w).join("\n"); } layout = new Layout({ type:"v", c: [ - {type:"h", fillx:1, bgCol:"#0f0", c: [ + {type:"h", fillx:1, bgCol:colBg, c: [ { type:"img", src:getMessageImage(msg), pad:2 }, { type:"v", fillx:1, c: [ - {type:"txt", font:"6x15", label:msg.src||"Message", bgCol:"#0f0", fillx:1, pad:2 }, - title?{type:"txt", font:titleFont, label:title, bgCol:"#0f0", fillx:1, pad:2 }:{}, + {type:"txt", font:fontMedium, label:msg.src||"Message", bgCol:colBg, fillx:1, pad:2 }, + title?{type:"txt", font:titleFont, label:title, bgCol:colBg, fillx:1, pad:2 }:{}, ]}, ]}, - {type:"txt", font:"6x15", label:msg.body||"", wrap:true, fillx:1, filly:1, pad:2 }, + {type:"txt", font:fontMedium, label:msg.body||"", wrap:true, fillx:1, filly:1, pad:2 }, {type:"h",fillx:1, c: [ {type:"btn", src:getBackImage(), cb:()=>checkMessages(true)}, // back msg.new?{type:"btn", src:atob("HRiBAD///8D///wj///Fj//8bj//x3z//Hvx/8/fx/j+/x+Ad/B4AL8Rh+HxwH+PHwf+cf5/+x/n/PH/P8cf+cx5/84HwAB4fgAD5/AAD/8AAD/wAAD/AAAD8A=="), cb:()=>{ @@ -176,8 +196,8 @@ function checkMessages(forceShowMenu) { c : MESSAGES.length+1, draw : function(idx, r) {"ram" var msg = MESSAGES[idx-1]; - if (msg && msg.new) g.setBgColor("#4F4"); - else g.setBgColor((idx&1) ? "#CFC" : "#9F9"); + if (msg && msg.new) g.setBgColor(colBg); + else g.setBgColor((idx&1) ? colSBg1 : colSBg2); g.clearRect(r.x,r.y,r.x+r.w-1,r.y+r.h-1).setColor(g.theme.fg); if (idx==0) msg = {id:"back", title:"< Back"}; if (!msg) return; @@ -192,8 +212,8 @@ function checkMessages(forceShowMenu) { x += 50; } var m = msg.title+"\n"+msg.body; - if (msg.src) g.setFontAlign(1,-1).drawString(msg.src, r.x+r.w-2, r.t+2); - if (title) g.setFontAlign(-1,-1).setFont("12x20").drawString(title, x,r.y+2); + if (msg.src) g.setFontAlign(1,-1).setFont("6x8").drawString(msg.src, r.x+r.w-2, r.y+2); + if (title) g.setFontAlign(-1,-1).setFont(fontBig).drawString(title, x,r.y+2); if (body) { g.setFontAlign(-1,-1).setFont("6x8"); var l = g.wrapString(body, r.w-14); @@ -211,6 +231,7 @@ function checkMessages(forceShowMenu) { }); } +g.clear(); Bangle.loadWidgets(); Bangle.drawWidgets(); checkMessages(); diff --git a/modules/Layout.js b/modules/Layout.js index c7d44ab9b..6dc4b6368 100644 --- a/modules/Layout.js +++ b/modules/Layout.js @@ -109,9 +109,7 @@ function Layout(layout, options) { delete this.buttons[s].selected; this.render(this.buttons[s]); } - s += dir; - if (s<0) s+=lh; - if (s>=l) s-=l; + s = (s+l+dir) % l; if (this.buttons[s]) { this.buttons[s].selected = 1; this.render(this.buttons[s]); From 81252d1dc6bf056b52d92d07f19a3088b29f2a46 Mon Sep 17 00:00:00 2001 From: Gordon Williams Date: Wed, 10 Nov 2021 14:55:08 +0000 Subject: [PATCH 328/392] recorder 0.03: Fix theme and maps/graphing if no GPS --- apps.json | 2 +- apps/recorder/ChangeLog | 1 + apps/recorder/app.js | 64 ++++++++++++++++++++---------------- apps/recorder/interface.html | 8 ++--- 4 files changed, 40 insertions(+), 35 deletions(-) diff --git a/apps.json b/apps.json index a09997f7d..89d06093a 100644 --- a/apps.json +++ b/apps.json @@ -657,7 +657,7 @@ "id": "recorder", "name": "Recorder (BETA)", "shortName": "Recorder", - "version": "0.02", + "version": "0.03", "description": "Record GPS position, heart rate and more in the background, then download to your PC.", "icon": "app.png", "tags": "tool,outdoors,gps,widget", diff --git a/apps/recorder/ChangeLog b/apps/recorder/ChangeLog index bf90d0384..2ea6e9fa8 100644 --- a/apps/recorder/ChangeLog +++ b/apps/recorder/ChangeLog @@ -1,3 +1,4 @@ 0.01: New App! 0.02: Use 'recorder.log..' rather than 'record.log..' Fix interface.html +0.03: Fix theme and maps/graphing if no GPS diff --git a/apps/recorder/app.js b/apps/recorder/app.js index ac3e391fc..d29959e25 100644 --- a/apps/recorder/app.js +++ b/apps/recorder/app.js @@ -140,10 +140,10 @@ function getTrackInfo(filename) { } // pushed this loop together to try and bump loading speed a little while(l!==undefined) { - ++nl;c=l.split(","); + ++nl;c=l.split(",");l = f.readLine(f); + if (c[latIdx]=="")continue; n = +c[latIdx];if(n>maxLat)maxLat=n;if(nmaxLong)maxLong=n;if(n 100) { g.flip();i=0; } } - g.setColor(1,0,0); + g.setColor("#f00"); g.fillCircle(ox,oy,5); - if (info.qOSTM) g.setColor(0, 0, 0); - else g.setColor(1,1,1); + if (info.qOSTM) g.setColor("#000"); + else g.setColor(g.theme.fg); g.drawString(require("locale").distance(dist),120,220); g.setFont("6x8",2); g.setFontAlign(0,0,3); @@ -340,16 +340,22 @@ function plotGraph(info, style) { title = "Altitude (m)"; var altIdx = info.fields.indexOf("Altitude"); while(l!==undefined) { - ++nl;c=l.split(","); + ++nl;c=l.split(",");l = f.readLine(f); + if (c[altIdx]=="") continue; i = Math.round(80*(c[timeIdx] - strt)/dur); infn[i]+=+c[altIdx]; infc[i]++; - l = f.readLine(f); } } else if (style=="Speed") { title = "Speed (m/s)"; var latIdx = info.fields.indexOf("Latitude"); var lonIdx = info.fields.indexOf("Longitude"); + // skip until we find our first data + while(l!==undefined && c[latIdx]=="") { + c = l.split(","); + l = f.readLine(f); + } + // now iterate var p,lp = Bangle.project({lat:c[1],lon:c[2]}); var t,dx,dy,d,lt = c[timeIdx]; while(l!==undefined) { diff --git a/apps/recorder/interface.html b/apps/recorder/interface.html index eca13d263..ad0de4887 100644 --- a/apps/recorder/interface.html +++ b/apps/recorder/interface.html @@ -62,7 +62,7 @@ function saveGPX(track, title) { - + ${title} @@ -74,9 +74,7 @@ function saveGPX(track, title) { - ${pt.Heartrate ? `${pt.Heartrate}`:``} - ${""/*...*/} - ${""/* 65 */} + ${pt.Heartrate ? `${pt.Heartrate}`:``}${""/*...65*/} `; @@ -189,7 +187,7 @@ ${trackData.Latitude ? ` width="100%" height="250" frameborder="0" style="border:0" - src="https://www.google.com/maps/embed/v1/place?key=AIzaSyBxTcwrrVOh2piz7EmIs1Xn4FsRxJWeVH4&q=${track.lat},${track.lon}&zoom=10" allowfullscreen> + src="https://www.google.com/maps/embed/v1/place?key=AIzaSyBxTcwrrVOh2piz7EmIs1Xn4FsRxJWeVH4&q=${trackData.Latitude},${trackData.Longitude}&zoom=10" allowfullscreen>
` : `
No GPS info
`}

THIS IS CURRENTLY BETA - PLEASE USE THE NORMAL FIRMWARE UPDATE + INSTRUCTIONS FOR BANGLE.JS 1 AND BANGLE.JS 2