From 785ce647793568fd9d1ee038303a3e552235a801 Mon Sep 17 00:00:00 2001 From: Noah Howard <3317164+nh-99@users.noreply.github.com> Date: Fri, 18 Mar 2022 18:35:44 -0400 Subject: [PATCH 001/509] Add disc golf score tracking app --- apps/discgolf/ChangeLog | 1 + apps/discgolf/README.md | 14 +++ apps/discgolf/app-icon.js | 1 + apps/discgolf/app.js | 171 +++++++++++++++++++++++++++++++ apps/discgolf/app.png | Bin 0 -> 10687 bytes apps/discgolf/metadata.json | 14 +++ apps/discgolf/summary_screen.png | Bin 0 -> 3025 bytes apps/discgolf/throw_screen.png | Bin 0 -> 2459 bytes 8 files changed, 201 insertions(+) create mode 100644 apps/discgolf/ChangeLog create mode 100644 apps/discgolf/README.md create mode 100644 apps/discgolf/app-icon.js create mode 100644 apps/discgolf/app.js create mode 100644 apps/discgolf/app.png create mode 100644 apps/discgolf/metadata.json create mode 100644 apps/discgolf/summary_screen.png create mode 100644 apps/discgolf/throw_screen.png diff --git a/apps/discgolf/ChangeLog b/apps/discgolf/ChangeLog new file mode 100644 index 000000000..220e1d1c2 --- /dev/null +++ b/apps/discgolf/ChangeLog @@ -0,0 +1 @@ +0.01: Initial version of disc golf app. Has throw and hole counter, along with summary screen. Uses buttons for holes & throws. \ No newline at end of file diff --git a/apps/discgolf/README.md b/apps/discgolf/README.md new file mode 100644 index 000000000..34a9dfe90 --- /dev/null +++ b/apps/discgolf/README.md @@ -0,0 +1,14 @@ +# Disc Golf + +Individual score tracking for disc golf on your wrist. + +![](throw_screen.png) +![](summary_screen.png) + +## Usage + +Press the side button once to increment throws. Double-tap the side button to increment holes. View your game summary with the button in the upper right of the screen. + +## Creator + +Made by [Noah Howard](https://github.com/nh-99) diff --git a/apps/discgolf/app-icon.js b/apps/discgolf/app-icon.js new file mode 100644 index 000000000..cfc07a2fa --- /dev/null +++ b/apps/discgolf/app-icon.js @@ -0,0 +1 @@ +require("heatshrink").decompress(atob("mEwxH+AH4A/ABFzudsAAImmABIppAAIQBFcYMBzwMDFbP+y5RJHYiHdLJYADG5AATzxaNFotszwuXFp5sFLq4tIVpANNF0D4FRqobFJ5peaFxKtJXgi9VzxdSLwwvUFyYvaFxIhKOYwvSFxoAEzyjJF7I/VFyzRjU5QICuYiNBxBJTQp7lFF7byQGQYwSOwovSOpJsFdpwvTao4voMQ4vQOQQwmX4oQCBAwwgCxAvWDIwvPGD4vIy4WJSSzcFMCCpGMC+eGChiUYJwjJPIRiTF5xULBxwvVEJgQQCIQOEF5X+zwfLSoY0HBYg9FF5a2QDSQvNWqJbBAQTaOMTY9PF6DFNAB4uRGLguUYygucfKwubGQgzLFsAAHFYV6Fc4A/AAw=")) \ No newline at end of file diff --git a/apps/discgolf/app.js b/apps/discgolf/app.js new file mode 100644 index 000000000..68bbd817d --- /dev/null +++ b/apps/discgolf/app.js @@ -0,0 +1,171 @@ +Bangle.loadWidgets(); + +// +// App imports +// +var Layout = require("Layout"); + +// +// App variables +// +var holeCount = 1; +var throwCount = 0; +var drawTimeout; +var currentScreen = 'throw'; +var redraw = true; +var update = true; +var holeSummary = { + "< Back" : () => { update = true; redraw = true; currentScreen = 'throw'; E.showMenu(); createThrowLayout(); }, + "Hole #1": { value: 0 }, + "Hole #2": { value: 0 }, + "Hole #3": { value: 0 }, + "Hole #4": { value: 0 }, + "Hole #5": { value: 0 }, + "Hole #6": { value: 0 }, + "Hole #7": { value: 0 }, + "Hole #8": { value: 0 }, + "Hole #9": { value: 0 }, + "Front": { value: 0 }, + "Hole #10": { value: 0 }, + "Hole #11": { value: 0 }, + "Hole #12": { value: 0 }, + "Hole #13": { value: 0 }, + "Hole #14": { value: 0 }, + "Hole #15": { value: 0 }, + "Hole #16": { value: 0 }, + "Hole #17": { value: 0 }, + "Hole #18": { value: 0 }, + "Back": { value: 0 }, +}; + +// Images +function getBackImage() { + return atob("FhYBAAAAEAAAwAAHAAA//wH//wf//g///BwB+DAB4EAHwAAPAAA8AADwAAPAAB4AAHgAB+AH/wA/+AD/wAH8AA=="); +} +function getMenuImage() { + return { + width : 20, height : 20, bpp : 1, + buffer : require("heatshrink").decompress(atob("AAk///D//8CBcDBwITB4AiVA")) + }; +} +function getBasketIcon() { + return { + width : 20, height : 20, bpp : 1, + buffer : require("heatshrink").decompress(atob("gFggF/8EH/0AiWAgtogEW0EDt0Am3ggfsgEf4EB/EA//4j//wEChEP/8AgwnDAgw")) + }; +} +function getFrisbeeIcon() { + return { + width : 20, height : 20, bpp : 1, + buffer : require("heatshrink").decompress(atob("AAf+gF/wE+uEPx0B+PAn0cgf/4F3/0G/1g9/7g1/7AJB4+f/k+v3B/Hcg4WBj/4E4ItC")) + }; +} + +var throwLayout; + +function createThrowLayout() { + throwLayout = new Layout( { + type:"v", c: [ + // Title & menu button + { + type:"h", fillx:1, valign:-1, bgCol:g.theme.bg2, col: g.theme.fg2, c: [ + {type:"img", src:getBasketIcon()}, + {type:"txt", pad:4, font:"15%", label:holeCount, id: "holeCount"}, + {type:"txt", pad:4, font:"15%", label: '', fillx:1}, + {type:"btn", src:getMenuImage(), halign:1, cb: l=>{ currentScreen = 'summary'; update = true; redraw = true; }} + ] + }, + // Throw count + { + type:"h", filly:1, c: [ + {type:"img", pad:4, src:getFrisbeeIcon() }, + {type:"txt", fillx:1, font:"6x8:2", label:"Throws: "+throwCount, id:"throwCount"} + ] + } + ] + }, {lazy:true}); +} + +function incrementHole() { + if (holeCount > 18) return; + resetThrow(); + holeCount += 1; + holeSummary["Hole #" + holeCount] = {value: 0}; +} +function incrementThrow() { + throwCount += 1; + holeSummary["Hole #" + holeCount] = {value: throwCount}; +} +function decrementThrow() { + throwCount -= 1; + holeSummary["Hole #" + holeCount] = {value: throwCount}; +} +function resetThrow() { + throwCount = 0; +} +function computeFrontScore() { + var scoreSum = 0; + for (var i = 1; i < 10; i++) { + scoreSum += holeSummary["Hole #" + i].value; + } + holeSummary.Front = {value: scoreSum}; +} +function computeBackScore() { + var scoreSum = 0; + for (var i = 1; i < 19; i++) { + scoreSum += holeSummary["Hole #" + i].value; + } + holeSummary.Back = {value: scoreSum}; +} + +// update the app state/variables +function updateApp() { + throwLayout.holeCount.label = holeCount; + throwLayout.throwCount.label = "Throws: " + throwCount; +} + +// update the screen +function draw() { + updateApp(); + if (redraw) { + throwLayout.forgetLazyState(); + redraw = false; + } + if (update) { + if (currentScreen == 'throw') { + throwLayout.render(); + } else if (currentScreen == 'summary') { + E.showMenu(holeSummary); + } + update = false; + } + // schedule a draw for the next 500ms + if (drawTimeout) clearTimeout(drawTimeout); + drawTimeout = setTimeout(function() { + drawTimeout = undefined; + draw(); + }, 500 - (Date.now() % 500)); +} + +// +// button press events +// +setWatch((p) => { + if (p.time - p.lastTime < 0.2) { + decrementThrow(); + incrementHole(); + } else { + incrementThrow(); + } + computeFrontScore(); + computeBackScore(); + update = true; +}, BTN, {edge:"rising", debounce:50, repeat:true}); + +// +// main app function start +// +g.clear(); +Bangle.drawWidgets(); +createThrowLayout(); +draw(); \ No newline at end of file diff --git a/apps/discgolf/app.png b/apps/discgolf/app.png new file mode 100644 index 0000000000000000000000000000000000000000..6aba5e54816571474aae74f0db98b39a7db7933a GIT binary patch literal 10687 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 literal 0 HcmV?d00001 diff --git a/apps/discgolf/metadata.json b/apps/discgolf/metadata.json new file mode 100644 index 000000000..6d56f05e4 --- /dev/null +++ b/apps/discgolf/metadata.json @@ -0,0 +1,14 @@ +{ "id": "discgolf", + "name": "Disc Golf", + "shortName":"Disc Golf", + "version":"0.01", + "description": "A personal disc golf score tracker", + "icon": "app.png", + "tags": "", + "supports" : ["BANGLEJS2"], + "readme": "README.md", + "storage": [ + {"name":"discgolf.app.js","url":"app.js"}, + {"name":"discgolf.img","url":"app-icon.js","evaluate":true} + ] +} diff --git a/apps/discgolf/summary_screen.png b/apps/discgolf/summary_screen.png new file mode 100644 index 0000000000000000000000000000000000000000..480d36eddfa8646b874e96458520979ac2de4ad6 GIT binary patch literal 3025 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 literal 0 HcmV?d00001 From 45cde94a2641e5a6476c43f9f4a15f5434b9f780 Mon Sep 17 00:00:00 2001 From: Gordon Williams Date: Fri, 1 Apr 2022 09:49:57 +0100 Subject: [PATCH 002/509] messages 0.29: Support for the setUI 'back' icon in the top left --- apps/messages/ChangeLog | 1 + apps/messages/app.js | 58 +++++++++++++------------------------ apps/messages/metadata.json | 2 +- modules/Layout.js | 2 +- 4 files changed, 23 insertions(+), 40 deletions(-) diff --git a/apps/messages/ChangeLog b/apps/messages/ChangeLog index 416cb1694..d1782a0ee 100644 --- a/apps/messages/ChangeLog +++ b/apps/messages/ChangeLog @@ -41,3 +41,4 @@ 0.26: Setting to auto-open music 0.27: Add 'mark all read' option to popup menu (fix #1624) 0.28: Option to auto-unlock the watch when a new message arrives +0.29: Support for the setUI 'back' icon in the top left diff --git a/apps/messages/app.js b/apps/messages/app.js index 655fc7122..1e6ab2cd4 100644 --- a/apps/messages/app.js +++ b/apps/messages/app.js @@ -13,11 +13,11 @@ /* For example for maps: // a message -{"t":"add","id":1575479849,"src":"Hangouts","title":"A Name","body":"message contents"} +require("messages").pushMessage({"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="} +require("messages").pushMessage({"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="}); // call -{"t":"add","id":"call","src":"Phone","name":"Bob","number":"12421312",positive:true,negative:true} +require("messages").pushMessage({"t":"add","id":"call","src":"Phone","title":"Bob","body":"12421312",positive:true,negative:true}) */ var Layout = require("Layout"); @@ -66,9 +66,6 @@ function saveMessages() { require("Storage").writeJSON("messages.json",MESSAGES) } -function getBackImage() { - return atob("FhYBAAAAEAAAwAAHAAA//wH//wf//g///BwB+DAB4EAHwAAPAAA8AADwAAPAAB4AAHgAB+AH/wA/+AD/wAH8AA=="); -} function getNotificationImage() { return atob("HBKBAD///8H///iP//8cf//j4//8f5//j/x/8//j/H//H4//4PB//EYj/44HH/Hw+P4//8fH//44///xH///g////A=="); } @@ -108,7 +105,6 @@ function getMessageImage(msg) { 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=="wordfeud") return atob("GBgCWqqqqqqlf//////9v//////+v/////++v/////++v8///Lu+v8///L++v8///P/+v8v//P/+v9v//P/+v+fx/P/+v+Pk+P/+v/PN+f/+v/POuv/+v/Ofdv/+v/NvM//+v/I/Y//+v/k/k//+v/i/w//+v/7/6//+v//////+v//////+f//////9Wqqqqqql"); 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 getNotificationImage(); } function getMessageImageCol(msg,def) { @@ -170,13 +166,13 @@ function showMapMessage(msg) { ]}); g.clearRect(Bangle.appRect); layout.render(); - Bangle.setUI("updown",function() { - // any input to mark as not new and return to menu + function back() { // mark as not new and return to menu msg.new = false; saveMessages(); layout = undefined; checkMessages({clockIfNoMsg:1,clockIfAllRead:1,showMsgIfUnread:1,openMusic:0}); - }); + } + Bangle.setUI({mode:"updown", back: back}, back); // any input takes us back } var updateLabelsInterval; @@ -199,8 +195,6 @@ function showMusicMessage(msg) { var sliceLength = offset + maxLen > text.length ? text.length - offset : maxLen; return text.substr(offset, sliceLength).padEnd(maxLen, " "); } - - function back() { clearInterval(updateLabelsInterval); updateLabelsInterval = undefined; @@ -229,7 +223,6 @@ function showMusicMessage(msg) { layout = new Layout({ type:"v", c: [ {type:"h", fillx:1, bgCol:g.theme.bg2, col: g.theme.fg2, c: [ - { type:"btn", src:getBackImage, cb:back }, { type:"v", fillx:1, c: [ { type:"txt", font:fontMedium, bgCol:g.theme.bg2, label:artistName, pad:2, id:"artist" }, { type:"txt", font:fontMedium, bgCol:g.theme.bg2, label:albumName, pad:2, id:"album" } @@ -242,7 +235,7 @@ function showMusicMessage(msg) { {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):"--:--" } - ]}); + ]}, { back : back }); g.clearRect(Bangle.appRect); layout.render(); @@ -277,12 +270,9 @@ function showMessageScroller(msg) { }, select : function(idx) { if (idx>=lines.length-2) showMessage(msg.id); - } + }, + back : () => showMessage(msg.id) }); - // ensure button-press on Bangle.js 2 takes us back - if (process.env.HWVERSION>1) Bangle.btnWatches = [ - setWatch(() => showMessage(msg.id), BTN1, {repeat:1,edge:"falling"}) - ]; } function showMessageSettings(msg) { @@ -370,10 +360,8 @@ function showMessage(msgid) { checkMessages({clockIfNoMsg:1,clockIfAllRead:0,showMsgIfUnread:0,openMusic:openMusic}); } var buttons = [ - {type:"btn", src:getBackImage(), cb:goBack} // back ]; if (msg.positive) { - buttons.push({fillx:1}); buttons.push({type:"btn", src:getPosImage(), cb:()=>{ msg.new = false; saveMessages(); cancelReloadTimeout(); // don't auto-reload to clock now @@ -382,7 +370,7 @@ function showMessage(msgid) { }}); } if (msg.negative) { - buttons.push({fillx:1}); + if (buttons.length) buttons.push({width:32}); // nasty hack... buttons.push({type:"btn", src:getNegImage(), cb:()=>{ msg.new = false; saveMessages(); cancelReloadTimeout(); // don't auto-reload to clock now @@ -394,27 +382,23 @@ function showMessage(msgid) { layout = new Layout({ type:"v", c: [ {type:"h", fillx:1, bgCol:g.theme.bg2, col: g.theme.fg2, c: [ - { type:"btn", src:getMessageImage(msg), col:getMessageImageCol(msg), pad: 3, cb:()=>{ - cancelReloadTimeout(); // don't auto-reload to clock now - showMessageSettings(msg); - }}, { type:"v", fillx:1, c: [ {type:"txt", font:fontSmall, label:msg.src||/*LANG*/"Message", bgCol:g.theme.bg2, col: g.theme.fg2, fillx:1, pad:2, halign:1 }, title?{type:"txt", font:titleFont, label:title, bgCol:g.theme.bg2, col: g.theme.fg2, fillx:1, pad:2 }:{}, ]}, + { type:"btn", src:getMessageImage(msg), col:getMessageImageCol(msg), pad: 3, cb:()=>{ + cancelReloadTimeout(); // don't auto-reload to clock now + showMessageSettings(msg); + }}, ]}, {type:"txt", font:bodyFont, label:body, fillx:1, filly:1, pad:2, cb:()=>{ // allow tapping to show a larger version showMessageScroller(msg); } }, {type:"h",fillx:1, c: buttons} - ]}); + ]},{back:goBack}); g.clearRect(Bangle.appRect); layout.render(); - // ensure button-press on Bangle.js 2 takes us back - if (process.env.HWVERSION>1) Bangle.btnWatches = [ - setWatch(goBack, BTN1, {repeat:1,edge:"falling"}) - ]; } @@ -452,12 +436,11 @@ function checkMessages(options) { // Otherwise show a menu E.showScroller({ h : 48, - c : Math.max(MESSAGES.length+1,3), // workaround for 2v10.219 firmware (min 3 not needed for 2v11) + c : Math.max(MESSAGES.length,3), // workaround for 2v10.219 firmware (min 3 not needed for 2v11) draw : function(idx, r) {"ram" - var msg = MESSAGES[idx-1]; + var msg = MESSAGES[idx]; if (msg && msg.new) g.setBgColor(g.theme.bgH).setColor(g.theme.fgH); else g.setColor(g.theme.fg); - 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); @@ -486,13 +469,12 @@ function checkMessages(options) { if (!longBody && msg.src) g.setFontAlign(1,1).setFont("6x8").drawString(msg.src, r.x+r.w-2, r.y+r.h-2); g.setColor("#888").fillRect(r.x,r.y+r.h-1,r.x+r.w-1,r.y+r.h-1); // dividing line between items }, - select : idx => { - if (idx==0) load(); - else showMessage(MESSAGES[idx-1].id); - } + select : idx => showMessage(MESSAGES[idx].id), + back : () => load() }); } + function cancelReloadTimeout() { if (!unreadTimeout) return; clearTimeout(unreadTimeout); diff --git a/apps/messages/metadata.json b/apps/messages/metadata.json index 6f35f39b0..edc072714 100644 --- a/apps/messages/metadata.json +++ b/apps/messages/metadata.json @@ -1,7 +1,7 @@ { "id": "messages", "name": "Messages", - "version": "0.28", + "version": "0.29", "description": "App to display notifications from iOS and Gadgetbridge/Android", "icon": "app.png", "type": "app", diff --git a/modules/Layout.js b/modules/Layout.js index 0bfbc28ad..561b90f5d 100644 --- a/modules/Layout.js +++ b/modules/Layout.js @@ -59,7 +59,7 @@ options is an object containing: * `label` - the text on the button * `cb` - a callback function * `cbl` - a callback function for long presses -* `back` - a callback function, passed as `back` into Bangle.setUI +* `back` - a callback function, passed as `back` into Bangle.setUI (which usually adds an icon in the top left) 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. From 123d4814696eafc50062b774a62b7fdc90b80518 Mon Sep 17 00:00:00 2001 From: Salim Blume Date: Mon, 4 Apr 2022 12:22:04 -0500 Subject: [PATCH 003/509] Running setScan with active: true --- apps/bthrm/settings.js | 2 +- apps/health/README.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/bthrm/settings.js b/apps/bthrm/settings.js index 4b564d670..9f409880a 100644 --- a/apps/bthrm/settings.js +++ b/apps/bthrm/settings.js @@ -127,7 +127,7 @@ }); }; } - }, { filters: [{services: [ "180d" ]}]}); + }, { active: true, filters: [{services: [ "180d" ]}]}); } diff --git a/apps/health/README.md b/apps/health/README.md index f44854e3e..e3a84068b 100644 --- a/apps/health/README.md +++ b/apps/health/README.md @@ -2,7 +2,7 @@ Logs health data to a file every 10 minutes, and provides an app to view it -**BETA - requires firmware 2v11** +**BETA - requires firmware 2v11 or later** ## Usage From d27deac8aadfa6f9393e31aa26c4c69bb4f39dd2 Mon Sep 17 00:00:00 2001 From: Salim Blume Date: Mon, 4 Apr 2022 14:47:17 -0500 Subject: [PATCH 004/509] Adding 'active: true' to NRF.requestDevice call made when btname is set --- apps/bthrm/boot.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/bthrm/boot.js b/apps/bthrm/boot.js index 3a1f1cc4c..93e72b83b 100644 --- a/apps/bthrm/boot.js +++ b/apps/bthrm/boot.js @@ -370,7 +370,7 @@ filters = [{name: settings.btname}]; } log("Requesting device with filters", filters); - promise = NRF.requestDevice({ filters: filters }); + promise = NRF.requestDevice({ filters: filters, active: true }); if (settings.gracePeriodRequest){ log("Add " + settings.gracePeriodRequest + "ms grace period after request"); From d89db8f7d7f680c11aa73780c50483364972059b Mon Sep 17 00:00:00 2001 From: Salim Blume Date: Mon, 4 Apr 2022 15:55:14 -0500 Subject: [PATCH 005/509] Removing call to function that doesn't exist --- apps/bthrm/boot.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/bthrm/boot.js b/apps/bthrm/boot.js index 93e72b83b..227f78c1a 100644 --- a/apps/bthrm/boot.js +++ b/apps/bthrm/boot.js @@ -108,7 +108,7 @@ var sensorContact; if (flags & 2){ - sensorContact = (flags & 4) ? true : false; + sensorContact = !!(flags & 4); } var idx = 2 + (flags&1); @@ -297,7 +297,7 @@ }); } else if (newCharacteristic.read){ result = result.then(()=>{ - readData(newCharacteristic); + // readData(newCharacteristic); log("Reading data for " + newCharacteristic); return newCharacteristic.read().then((data)=>{ supportedCharacteristics[newCharacteristic.uuid].handler(data); From 75c4e5b54b54181c054bbb2a68603435f02761cf Mon Sep 17 00:00:00 2001 From: Salim Blume Date: Mon, 4 Apr 2022 16:48:15 -0500 Subject: [PATCH 006/509] bthrm fixes for reading characteristics generally and displaying location --- apps/bthrm/boot.js | 17 +++++++++-------- apps/bthrm/bthrm.js | 13 +++++++++++-- typescript/types/globals.d.ts | 6 +++--- 3 files changed, 23 insertions(+), 13 deletions(-) diff --git a/apps/bthrm/boot.js b/apps/bthrm/boot.js index 227f78c1a..dd25634e5 100644 --- a/apps/bthrm/boot.js +++ b/apps/bthrm/boot.js @@ -168,14 +168,14 @@ //Body sensor location handler: function(data){ if (!lastReceivedData["0x180d"]) lastReceivedData["0x180d"] = {}; - if (!lastReceivedData["0x180d"]["0x2a38"]) lastReceivedData["0x180d"]["0x2a38"] = data.target.value; + lastReceivedData["0x180d"]["0x2a38"] = parseInt(data.buffer, 10); } }, "0x2a19": { //Battery handler: function (event){ - if (!lastReceivedData["0x180f"]) lastReceivedData["0x180f"] = {}; - if (!lastReceivedData["0x180f"]["0x2a19"]) lastReceivedData["0x180f"]["0x2a19"] = event.target.value.getUint8(0); + if (!lastReceivedData["0x180f"]) lastReceivedData["0x180f"] = { "0x2a19": null }; + lastReceivedData["0x180f"]["0x2a19"] = event.target.value.getUint8(0); } } @@ -295,12 +295,13 @@ } return startPromise; }); - } else if (newCharacteristic.read){ + } else if (newCharacteristic.readValue){ result = result.then(()=>{ - // readData(newCharacteristic); - log("Reading data for " + newCharacteristic); - return newCharacteristic.read().then((data)=>{ - supportedCharacteristics[newCharacteristic.uuid].handler(data); + log("Reading data for " + JSON.stringify(newCharacteristic)); + return newCharacteristic.readValue().then((data)=>{ + if (supportedCharacteristics[newCharacteristic.uuid] && supportedCharacteristics[newCharacteristic.uuid].handler) { + supportedCharacteristics[newCharacteristic.uuid].handler(data); + } }); }); } diff --git a/apps/bthrm/bthrm.js b/apps/bthrm/bthrm.js index cc533eedd..5ab3b0018 100644 --- a/apps/bthrm/bthrm.js +++ b/apps/bthrm/bthrm.js @@ -1,7 +1,16 @@ -var btm = g.getHeight()-1; var intervalInt; var intervalBt; +var BODY_LOCS = { + 0: 'Other', + 1: 'Chest', + 2: 'Wrist', + 3: 'Finger', + 4: 'Hand', + 5: 'Ear Lobe', + 6: 'Foot', +} + function clear(y){ g.reset(); g.clearRect(0,y,g.getWidth(),y+75); @@ -25,7 +34,7 @@ function draw(y, type, event) { if (event.battery) str += " Bat: " + (event.battery ? event.battery : ""); g.setFontVector(12).drawString(str,px,y+40); str= ""; - if (event.location) str += "Loc: " + event.location.toFixed(0) + "ms"; + if (event.location) str += "Loc: " + BODY_LOCS[event.location]; if (event.rr && event.rr.length > 0) str += " RR: " + event.rr.join(","); g.setFontVector(12).drawString(str,px,y+50); str= ""; diff --git a/typescript/types/globals.d.ts b/typescript/types/globals.d.ts index 2ef52dcdf..442140e70 100644 --- a/typescript/types/globals.d.ts +++ b/typescript/types/globals.d.ts @@ -158,9 +158,9 @@ declare type Image = { }; declare type GraphicsApi = { - reset: () => void; + reset: () => GraphicsApi; flip: () => void; - setColor: (color: string) => void; // TODO we can most likely type color more usefully than this + setColor: (color: string) => GraphicsApi; // TODO we can most likely type color more usefully than this drawImage: ( image: string | Image | ArrayBuffer, xOffset: number, @@ -169,7 +169,7 @@ declare type GraphicsApi = { rotate?: number; scale?: number; } - ) => void; + ) => GraphicsApi; // TODO add more }; From d19a68e5117904689b9a35706fceeb64f3bd04fc Mon Sep 17 00:00:00 2001 From: Salim Blume Date: Mon, 4 Apr 2022 17:29:20 -0500 Subject: [PATCH 007/509] Fix how events and reads were handled differently --- apps/bthrm/boot.js | 55 +++++++++++++++++++++++----------------------- 1 file changed, 28 insertions(+), 27 deletions(-) diff --git a/apps/bthrm/boot.js b/apps/bthrm/boot.js index dd25634e5..0a6af55b6 100644 --- a/apps/bthrm/boot.js +++ b/apps/bthrm/boot.js @@ -31,7 +31,7 @@ function addNotificationHandler(characteristic){ log("Setting notification handler: " + supportedCharacteristics[characteristic.uuid].handler); - characteristic.on('characteristicvaluechanged', supportedCharacteristics[characteristic.uuid].handler); + characteristic.on('characteristicvaluechanged', (ev) => supportedCharacteristics[characteristic.uuid].handler(ev.target.value)); } function writeCache(cache){ @@ -92,15 +92,14 @@ services: [ "180d" ] }]; - supportedServices = [ + var supportedServices = [ "0x180d", "0x180f" ]; var supportedCharacteristics = { "0x2a37": { //Heart rate measurement - handler: function (event){ - var dv = event.target.value; + handler: function (dv){ var flags = dv.getUint8(0); var bpm = (flags & 1) ? (dv.getUint16(1) / 100 /* ? */ ) : dv.getUint8(1); // 8 or 16 bit @@ -121,7 +120,7 @@ var interval; if (flags & 16) { interval = []; - maxIntervalBytes = (dv.byteLength - idx); + var maxIntervalBytes = (dv.byteLength - idx); log("Found " + (maxIntervalBytes / 2) + " rr data fields"); for(var i = 0 ; i < maxIntervalBytes / 2; i++){ interval[i] = dv.getUint16(idx,1); // in milliseconds @@ -140,14 +139,14 @@ } if (settings.replace){ - var newEvent = { + var repEvent = { bpm: bpm, confidence: (sensorContact || sensorContact === undefined)? 100 : 0, src: "bthrm" }; - log("Emitting HRM: ", newEvent); - Bangle.emit("HRM", newEvent); + log("Emitting HRM: ", repEvent); + Bangle.emit("HRM", repEvent); } var newEvent = { @@ -159,23 +158,23 @@ if (energyExpended) newEvent.energy = energyExpended; if (battery) newEvent.battery = battery; if (sensorContact) newEvent.contact = sensorContact; - + log("Emitting BTHRM: ", newEvent); Bangle.emit("BTHRM", newEvent); } }, "0x2a38": { //Body sensor location - handler: function(data){ + handler: function(dv){ if (!lastReceivedData["0x180d"]) lastReceivedData["0x180d"] = {}; - lastReceivedData["0x180d"]["0x2a38"] = parseInt(data.buffer, 10); + lastReceivedData["0x180d"]["0x2a38"] = parseInt(dv.buffer, 10); } }, "0x2a19": { //Battery - handler: function (event){ - if (!lastReceivedData["0x180f"]) lastReceivedData["0x180f"] = { "0x2a19": null }; - lastReceivedData["0x180f"]["0x2a19"] = event.target.value.getUint8(0); + handler: function (dv){ + if (!lastReceivedData["0x180f"]) lastReceivedData["0x180f"] = {}; + lastReceivedData["0x180f"]["0x2a19"] = dv.getUint8(0); } } @@ -282,6 +281,18 @@ function createCharacteristicPromise(newCharacteristic){ log("Create characteristic promise: ", newCharacteristic); var result = Promise.resolve(); + // For values that can be read, go ahead and read them, even if we might be notified in the future + // Allows for getting initial state of infrequently updating characteristics, like battery + if (newCharacteristic.readValue){ + result = result.then(()=>{ + log("Reading data for " + JSON.stringify(newCharacteristic)); + return newCharacteristic.readValue().then((data)=>{ + if (supportedCharacteristics[newCharacteristic.uuid] && supportedCharacteristics[newCharacteristic.uuid].handler) { + supportedCharacteristics[newCharacteristic.uuid].handler(data); + } + }); + }); + } if (newCharacteristic.properties.notify){ result = result.then(()=>{ log("Starting notifications for: ", newCharacteristic); @@ -295,15 +306,6 @@ } return startPromise; }); - } else if (newCharacteristic.readValue){ - result = result.then(()=>{ - log("Reading data for " + JSON.stringify(newCharacteristic)); - return newCharacteristic.readValue().then((data)=>{ - if (supportedCharacteristics[newCharacteristic.uuid] && supportedCharacteristics[newCharacteristic.uuid].handler) { - supportedCharacteristics[newCharacteristic.uuid].handler(data); - } - }); - }); } return result.then(()=>log("Handled characteristic: ", newCharacteristic)); } @@ -526,10 +528,9 @@ } }; } - - + var fallbackInterval; - + function switchInternalHrm(){ if (settings.allowFallback && !fallbackInterval){ log("Fallback to HRM enabled"); @@ -558,7 +559,7 @@ } switchInternalHrm(); } - + E.on("kill", ()=>{ if (gatt && gatt.connected){ log("Got killed, trying to disconnect"); From d9908ee6a2a77eab3b6371ade461a1ea449eec87 Mon Sep 17 00:00:00 2001 From: Salim Blume Date: Tue, 5 Apr 2022 09:53:52 -0500 Subject: [PATCH 008/509] Switch from setScan to findDevices --- apps/bthrm/boot.js | 8 +-- apps/bthrm/settings.js | 110 +++++++++++++---------------------------- 2 files changed, 38 insertions(+), 80 deletions(-) diff --git a/apps/bthrm/boot.js b/apps/bthrm/boot.js index 0a6af55b6..ad3c85591 100644 --- a/apps/bthrm/boot.js +++ b/apps/bthrm/boot.js @@ -24,7 +24,7 @@ function getCache(){ var cache = require('Storage').readJSON("bthrm.cache.json", true) || {}; - if (settings.btname && settings.btname == cache.name) return cache; + if (settings.btid && settings.btid == cache.id) return cache; clearCache(); return {}; } @@ -368,9 +368,9 @@ if (!device){ var filters = serviceFilters; - if (settings.btname){ - log("Configured device name", settings.btname); - filters = [{name: settings.btname}]; + if (settings.btid){ + log("Configured device id", settings.btid); + filters = [{id: settings.btid }]; } log("Requesting device with filters", filters); promise = NRF.requestDevice({ filters: filters, active: true }); diff --git a/apps/bthrm/settings.js b/apps/bthrm/settings.js index 9f409880a..b376d6a2d 100644 --- a/apps/bthrm/settings.js +++ b/apps/bthrm/settings.js @@ -5,14 +5,14 @@ require('Storage').writeJSON(FILE, s); readSettings(); } - + function readSettings(){ settings = Object.assign( require('Storage').readJSON("bthrm.default.json", true) || {}, require('Storage').readJSON(FILE, true) || {} ); } - + var FILE="bthrm.json"; var settings; readSettings(); @@ -61,12 +61,13 @@ } }; - if (settings.btname){ - var name = "Clear " + settings.btname; + if (settings.btname || settings.btid){ + var name = "Clear " + (settings.btname || settings.btid); mainmenu[name] = function() { - E.showPrompt("Clear current device name?").then((r)=>{ + E.showPrompt("Clear current device?").then((r)=>{ if (r) { writeSettings("btname",undefined); + writeSettings("btid",undefined); } E.showMenu(buildMainMenu()); }); @@ -78,9 +79,7 @@ mainmenu.Debug = function() { E.showMenu(submenu_debug); }; return mainmenu; } - - var submenu_debug = { '' : { title: "Debug"}, '< Back': function() { E.showMenu(buildMainMenu()); }, @@ -103,35 +102,39 @@ function createMenuFromScan(){ E.showMenu(); - E.showMessage("Scanning"); + E.showMessage("Scanning for 4 seconds"); var submenu_scan = { - '' : { title: "Scan"}, '< Back': function() { E.showMenu(buildMainMenu()); } }; - var packets=10; - var scanStart=Date.now(); - NRF.setScan(function(d) { - packets--; - if (packets<=0 || Date.now() - scanStart > 5000){ - NRF.setScan(); - E.showMenu(submenu_scan); - } else if (d.name){ - print("Found device", d); - submenu_scan[d.name] = function(){ - E.showPrompt("Set "+d.name+"?").then((r)=>{ - if (r) { - writeSettings("btname",d.name); - } - E.showMenu(buildMainMenu()); + NRF.findDevices(function(devices) { + submenu_scan[''] = { title: `Scan (${devices.length} found)`}; + if (devices.length === 0) { + E.showAlert("No devices found") + .then(() => E.showMenu(buildMainMenu())); + return; + } else { + devices.forEach((d) => { + print("Found device", d); + var shown = (d.name || d.id.substr(0, 17)); + submenu_scan[shown] = function () { + E.showPrompt("Set " + shown + "?").then((r) => { + if (r) { + writeSettings("btid", d.id); + // Store the name for displaying later. Will connect by ID + if (d.name) { + writeSettings("btname", d.name); + } + } + E.showMenu(buildMainMenu()); + }); + }; }); - }; } - }, { active: true, filters: [{services: [ "180d" ]}]}); + E.showMenu(submenu_scan); + }, { timeout: 4000, active: true, filters: [{services: [ "180d" ]}]}); } - - var submenu_custom = { '' : { title: "Custom mode"}, '< Back': function() { E.showMenu(buildMainMenu()); }, @@ -167,7 +170,7 @@ } }, }; - + var submenu_grace = { '' : { title: "Grace periods"}, '< Back': function() { E.showMenu(submenu_debug); }, @@ -212,51 +215,6 @@ } } }; - - var submenu = { - '' : { title: "Grace periods"}, - '< Back': function() { E.showMenu(buildMainMenu()); }, - 'Request': { - value: settings.gracePeriodRequest, - min: 0, - max: 3000, - step: 100, - format: v=>v+"ms", - onchange: v => { - writeSettings("gracePeriodRequest",v); - } - }, - 'Connect': { - value: settings.gracePeriodConnect, - min: 0, - max: 3000, - step: 100, - format: v=>v+"ms", - onchange: v => { - writeSettings("gracePeriodConnect",v); - } - }, - 'Notification': { - value: settings.gracePeriodNotification, - min: 0, - max: 3000, - step: 100, - format: v=>v+"ms", - onchange: v => { - writeSettings("gracePeriodNotification",v); - } - }, - 'Service': { - value: settings.gracePeriodService, - min: 0, - max: 3000, - step: 100, - format: v=>v+"ms", - onchange: v => { - writeSettings("gracePeriodService",v); - } - } - }; - + E.showMenu(buildMainMenu()); -}) +}); From 88a785df7f7d0e05023fbcd69b7ae71e85a6fb8b Mon Sep 17 00:00:00 2001 From: Salim Blume Date: Tue, 5 Apr 2022 20:58:33 -0500 Subject: [PATCH 009/509] Update some types --- typescript/types/globals.d.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/typescript/types/globals.d.ts b/typescript/types/globals.d.ts index 442140e70..7af19700b 100644 --- a/typescript/types/globals.d.ts +++ b/typescript/types/globals.d.ts @@ -140,7 +140,7 @@ declare const require: ((module: 'heatshrink') => { declare const Bangle: { // functions - buzz: () => void; + buzz: (duration: number, intensity: number) => Promise; drawWidgets: () => void; isCharging: () => boolean; // events From 908a41d5237f2b6e30eca2c2bfd00954dd329051 Mon Sep 17 00:00:00 2001 From: Salim Blume Date: Tue, 5 Apr 2022 20:58:47 -0500 Subject: [PATCH 010/509] Try to bond --- apps/bthrm/boot.js | 79 ++++++++++++++++++++++++--------------------- apps/bthrm/bthrm.js | 6 ++-- 2 files changed, 46 insertions(+), 39 deletions(-) diff --git a/apps/bthrm/boot.js b/apps/bthrm/boot.js index ad3c85591..8e18b3e34 100644 --- a/apps/bthrm/boot.js +++ b/apps/bthrm/boot.js @@ -3,7 +3,7 @@ require('Storage').readJSON("bthrm.default.json", true) || {}, require('Storage').readJSON("bthrm.json", true) || {} ); - + var log = function(text, param){ if (settings.debuglog){ var logline = new Date().toISOString() + " - " + text; @@ -13,9 +13,9 @@ print(logline); } }; - + log("Settings: ", settings); - + if (settings.enabled){ function clearCache(){ @@ -24,25 +24,24 @@ function getCache(){ var cache = require('Storage').readJSON("bthrm.cache.json", true) || {}; - if (settings.btid && settings.btid == cache.id) return cache; + if (settings.btid && settings.btid === cache.id) return cache; clearCache(); return {}; } - + function addNotificationHandler(characteristic){ log("Setting notification handler: " + supportedCharacteristics[characteristic.uuid].handler); characteristic.on('characteristicvaluechanged', (ev) => supportedCharacteristics[characteristic.uuid].handler(ev.target.value)); } - + function writeCache(cache){ var oldCache = getCache(); - if (oldCache != cache) { + if (oldCache !== cache) { log("Writing cache"); require('Storage').writeJSON("bthrm.cache.json", cache) } else { log("No changes, don't write cache"); } - } function characteristicsToCache(characteristics){ @@ -177,7 +176,6 @@ lastReceivedData["0x180f"]["0x2a19"] = dv.getUint8(0); } } - }; var device; @@ -185,7 +183,7 @@ var characteristics = []; var blockInit = false; var currentRetryTimeout; - var initialRetryTime = 40; + var initialRetryTime = 1000; var maxRetryTime = 60000; var retryTime = initialRetryTime; @@ -214,7 +212,6 @@ }; } - if (settings.replace){ var origIsHRMOn = Bangle.isHRMOn; @@ -309,14 +306,14 @@ } return result.then(()=>log("Handled characteristic: ", newCharacteristic)); } - + function attachCharacteristicPromise(promise, characteristic){ return promise.then(()=>{ log("Handling characteristic:", characteristic); return createCharacteristicPromise(characteristic); }); } - + function createCharacteristicsPromise(newCharacteristics){ log("Create characteristics promise: ", newCharacteristics); var result = Promise.resolve(); @@ -327,12 +324,12 @@ if (c.properties.notify){ addNotificationHandler(c); } - + result = attachCharacteristicPromise(result, c); } return result.then(()=>log("Handled characteristics")); } - + function createServicePromise(service){ log("Create service promise: ", service); var result = Promise.resolve(); @@ -342,11 +339,11 @@ }); return result.then(()=>log("Handled service" + service.uuid)); } - + function attachServicePromise(promise, service){ return promise.then(()=>createServicePromise(service)); } - + var reUseCounter = 0; function initBt() { @@ -363,9 +360,9 @@ gatt=undefined; reUseCounter = 0; } - + var promise; - + if (!device){ var filters = serviceFilters; if (settings.btid){ @@ -374,27 +371,26 @@ } log("Requesting device with filters", filters); promise = NRF.requestDevice({ filters: filters, active: true }); - + if (settings.gracePeriodRequest){ log("Add " + settings.gracePeriodRequest + "ms grace period after request"); } - + promise = promise.then((d)=>{ log("Got device: ", d); d.on('gattserverdisconnected', onDisconnect); device = d; }); - + promise = promise.then(()=>{ log("Wait after request"); return waitingPromise(settings.gracePeriodRequest); }); - } else { promise = Promise.resolve(); log("Reuse device: ", device); } - + promise = promise.then(()=>{ if (gatt){ log("Reuse GATT: ", gatt); @@ -402,7 +398,7 @@ log("GATT is new: ", gatt); characteristics = []; var cachedName = getCache().name; - if (device.name != cachedName){ + if (device.name !== cachedName){ log("Device name changed from " + cachedName + " to " + device.name + ", clearing cache"); clearCache(); } @@ -411,10 +407,10 @@ writeCache(newCache); gatt = device.gatt; } - + return Promise.resolve(gatt); }); - + promise = promise.then((gatt)=>{ if (!gatt.connected){ var connectPromise = gatt.connect(connectSettings); @@ -430,16 +426,28 @@ return Promise.resolve(); } }); - + + promise = promise.then(() => { + log(JSON.stringify(gatt.getSecurityStatus())); + if (gatt.getSecurityStatus()['bonded']) { + log("Already bonded"); + return Promise.resolve(); + } else { + log("Start bonding"); + return gatt.startBonding() + .then(() => console.log(gatt.getSecurityStatus())); + } + }); + promise = promise.then(()=>{ - if (!characteristics || characteristics.length == 0){ + if (!characteristics || characteristics.length === 0){ characteristics = characteristicsFromCache(); } }); promise = promise.then(()=>{ var characteristicsPromise = Promise.resolve(); - if (characteristics.length == 0){ + if (characteristics.length === 0){ characteristicsPromise = characteristicsPromise.then(()=>{ log("Getting services"); return gatt.getPrimaryServices(); @@ -462,17 +470,16 @@ } return result; }); - } else { for (var characteristic of characteristics){ characteristicsPromise = attachCharacteristicPromise(characteristicsPromise, characteristic, true); } } - + return characteristicsPromise; }); - promise = promise.then(()=>{ + return promise.then(()=>{ log("Connection established, waiting for notifications"); reUseCounter = 0; characteristicsToCache(characteristics); @@ -490,7 +497,7 @@ if (Bangle._PWR===undefined) Bangle._PWR={}; if (Bangle._PWR.BTHRM===undefined) Bangle._PWR.BTHRM=[]; if (isOn && !Bangle._PWR.BTHRM.includes(app)) Bangle._PWR.BTHRM.push(app); - if (!isOn && Bangle._PWR.BTHRM.includes(app)) Bangle._PWR.BTHRM = Bangle._PWR.BTHRM.filter(a=>a!=app); + if (!isOn && Bangle._PWR.BTHRM.includes(app)) Bangle._PWR.BTHRM = Bangle._PWR.BTHRM.filter(a=>a!==app); isOn = Bangle._PWR.BTHRM.length; // so now we know if we're really on if (isOn) { @@ -513,7 +520,7 @@ } } }; - + var origSetHRMPower = Bangle.setHRMPower; if (settings.startWithHrm){ @@ -563,7 +570,7 @@ E.on("kill", ()=>{ if (gatt && gatt.connected){ log("Got killed, trying to disconnect"); - var promise = gatt.disconnect().then(()=>log("Disconnected on kill")).catch((e)=>log("Error during disconnnect on kill", e)); + gatt.disconnect().then(()=>log("Disconnected on kill")).catch((e)=>log("Error during disconnnect on kill", e)); } }); } diff --git a/apps/bthrm/bthrm.js b/apps/bthrm/bthrm.js index 5ab3b0018..dd9230386 100644 --- a/apps/bthrm/bthrm.js +++ b/apps/bthrm/bthrm.js @@ -24,13 +24,13 @@ function draw(y, type, event) { g.setFontAlign(0,0); g.setFontVector(40).drawString(str,px,y+20); str = "Event: " + type; - if (type == "HRM") { + if (type === "HRM") { str += " Confidence: " + event.confidence; g.setFontVector(12).drawString(str,px,y+40); str = " Source: " + (event.src ? event.src : "internal"); g.setFontVector(12).drawString(str,px,y+50); } - if (type == "BTHRM"){ + if (type === "BTHRM"){ if (event.battery) str += " Bat: " + (event.battery ? event.battery : ""); g.setFontVector(12).drawString(str,px,y+40); str= ""; @@ -54,7 +54,7 @@ function onBtHrm(e) { firstEventBt = false; } draw(100, "BTHRM", e); - if (e.bpm == 0){ + if (e.bpm === 0){ Bangle.buzz(100,0.2); } if (intervalBt){ From 31fd2344a8ffb7e9ec9bf97635a155e8f75bf429 Mon Sep 17 00:00:00 2001 From: Salim Blume Date: Tue, 5 Apr 2022 21:05:03 -0500 Subject: [PATCH 011/509] Fix for buzz type updated in previous commit --- typescript/types/globals.d.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/typescript/types/globals.d.ts b/typescript/types/globals.d.ts index 7af19700b..e82c3da3d 100644 --- a/typescript/types/globals.d.ts +++ b/typescript/types/globals.d.ts @@ -140,7 +140,7 @@ declare const require: ((module: 'heatshrink') => { declare const Bangle: { // functions - buzz: (duration: number, intensity: number) => Promise; + buzz: (duration?: number, intensity?: number) => Promise; drawWidgets: () => void; isCharging: () => boolean; // events From 9eb4d8eb73684eca9ee4d0eadc8aec94bf467d6c Mon Sep 17 00:00:00 2001 From: Salim Blume Date: Thu, 7 Apr 2022 15:58:39 -0500 Subject: [PATCH 012/509] Remove bonding for now --- apps/bthrm/boot.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/bthrm/boot.js b/apps/bthrm/boot.js index 8e18b3e34..f9de2ee5d 100644 --- a/apps/bthrm/boot.js +++ b/apps/bthrm/boot.js @@ -427,7 +427,7 @@ } }); - promise = promise.then(() => { +/* promise = promise.then(() => { log(JSON.stringify(gatt.getSecurityStatus())); if (gatt.getSecurityStatus()['bonded']) { log("Already bonded"); @@ -437,7 +437,7 @@ return gatt.startBonding() .then(() => console.log(gatt.getSecurityStatus())); } - }); + });*/ promise = promise.then(()=>{ if (!characteristics || characteristics.length === 0){ From 7eeeca52ca25b2c633aed8a99c7fa12701e6d69c Mon Sep 17 00:00:00 2001 From: Salim Blume Date: Thu, 7 Apr 2022 22:04:47 -0500 Subject: [PATCH 013/509] Update README and follow linting instructions --- apps/bthrm/README.md | 13 ++-- apps/bthrm/boot.js | 124 ++++++++++++++++++--------------------- apps/bthrm/metadata.json | 2 +- 3 files changed, 66 insertions(+), 73 deletions(-) diff --git a/apps/bthrm/README.md b/apps/bthrm/README.md index 42ad619bd..8d5872670 100644 --- a/apps/bthrm/README.md +++ b/apps/bthrm/README.md @@ -2,7 +2,7 @@ When this app is installed it overrides Bangle.js's build in heart rate monitor with an external Bluetooth one. -HRM is requested it searches on Bluetooth for a heart rate monitor, connects, and sends data back using the `Bangle.on('HRM'` event as if it came from the on board monitor. +HRM is requested it searches on Bluetooth for a heart rate monitor, connects, and sends data back using the `Bangle.on('HRM')` event as if it came from the on board monitor. This means it's compatible with many Bangle.js apps including: @@ -16,19 +16,23 @@ as that requires live sensor data (rather than just BPM readings). Just install the app, then install an app that uses the heart rate monitor. -Once installed it'll automatically try and connect to the first bluetooth -heart rate monitor it finds. +Once installed you will have to go into this app's settings while your heart rate monitor + is available for bluetooth pairing and scan for devices. **To disable this and return to normal HRM, uninstall the app** ## Compatible Heart Rate Monitors This works with any heart rate monitor providing the standard Bluetooth -Heart Rate Service (`180D`) and characteristic (`2A37`). +Heart Rate Service (`180D`) and characteristic (`2A37`). It additionally supports +the location (`2A38`) characteristic and the Battery Service (`180F`), reporting +that information in the `BTHRM` event when they are available. So far it has been tested on: * CooSpo Bluetooth Heart Rate Monitor +* Polar H10 +* Polar OH1 * Wahoo TICKR X 2 ## Internals @@ -38,7 +42,6 @@ This replaces `Bangle.setHRMPower` with its own implementation. ## TODO * A widget to show connection state? -* Specify a specific device by address? ## Creator diff --git a/apps/bthrm/boot.js b/apps/bthrm/boot.js index f9de2ee5d..064f65eac 100644 --- a/apps/bthrm/boot.js +++ b/apps/bthrm/boot.js @@ -18,33 +18,33 @@ if (settings.enabled){ - function clearCache(){ + var clearCache = function() { return require('Storage').erase("bthrm.cache.json"); - } + }; - function getCache(){ + var getCache = function() { var cache = require('Storage').readJSON("bthrm.cache.json", true) || {}; if (settings.btid && settings.btid === cache.id) return cache; clearCache(); return {}; - } + }; - function addNotificationHandler(characteristic){ + var addNotificationHandler = function(characteristic) { log("Setting notification handler: " + supportedCharacteristics[characteristic.uuid].handler); characteristic.on('characteristicvaluechanged', (ev) => supportedCharacteristics[characteristic.uuid].handler(ev.target.value)); - } + }; - function writeCache(cache){ + var writeCache = function(cache) { var oldCache = getCache(); if (oldCache !== cache) { log("Writing cache"); - require('Storage').writeJSON("bthrm.cache.json", cache) + require('Storage').writeJSON("bthrm.cache.json", cache); } else { log("No changes, don't write cache"); } - } + }; - function characteristicsToCache(characteristics){ + var characteristicsToCache = function(characteristics) { log("Cache characteristics"); var cache = getCache(); if (!cache.characteristics) cache.characteristics = {}; @@ -59,9 +59,9 @@ }; } writeCache(cache); - } + }; - function characteristicsFromCache(){ + var characteristicsFromCache = function() { log("Read cached characteristics"); var cache = getCache(); if (!cache.characteristics) return []; @@ -80,19 +80,16 @@ restored.push(r); } return restored; - } + }; log("Start"); var lastReceivedData={ }; - var serviceFilters = [{ - services: [ "180d" ] - }]; - var supportedServices = [ - "0x180d", "0x180f" + "0x180d", // Heart Rate + "0x180f", // Battery ]; var supportedCharacteristics = { @@ -100,17 +97,17 @@ //Heart rate measurement handler: function (dv){ var flags = dv.getUint8(0); - + var bpm = (flags & 1) ? (dv.getUint16(1) / 100 /* ? */ ) : dv.getUint8(1); // 8 or 16 bit - + var sensorContact; - + if (flags & 2){ sensorContact = !!(flags & 4); } - + var idx = 2 + (flags&1); - + var energyExpended; if (flags & 8){ energyExpended = dv.getUint16(idx,1); @@ -123,7 +120,7 @@ log("Found " + (maxIntervalBytes / 2) + " rr data fields"); for(var i = 0 ; i < maxIntervalBytes / 2; i++){ interval[i] = dv.getUint16(idx,1); // in milliseconds - idx += 2 + idx += 2; } } @@ -143,7 +140,7 @@ confidence: (sensorContact || sensorContact === undefined)? 100 : 0, src: "bthrm" }; - + log("Emitting HRM: ", repEvent); Bangle.emit("HRM", repEvent); } @@ -151,7 +148,7 @@ var newEvent = { bpm: bpm }; - + if (location) newEvent.location = location; if (interval) newEvent.rr = interval; if (energyExpended) newEvent.energy = energyExpended; @@ -183,7 +180,7 @@ var characteristics = []; var blockInit = false; var currentRetryTimeout; - var initialRetryTime = 1000; + var initialRetryTime = 40; var maxRetryTime = 60000; var retryTime = initialRetryTime; @@ -192,7 +189,7 @@ maxInterval: 1500 }; - function waitingPromise(timeout) { + var waitingPromise = function(timeout) { return new Promise(function(resolve){ log("Start waiting for " + timeout); setTimeout(()=>{ @@ -200,7 +197,7 @@ resolve(); }, timeout); }); - } + }; if (settings.enabled){ Bangle.isBTHRMOn = function(){ @@ -225,15 +222,15 @@ }; } - function clearRetryTimeout(){ + var clearRetryTimeout = function() { if (currentRetryTimeout){ log("Clearing timeout " + currentRetryTimeout); clearTimeout(currentRetryTimeout); currentRetryTimeout = undefined; } - } + }; - function retry(){ + var retry = function() { log("Retry"); if (!currentRetryTimeout){ @@ -255,10 +252,10 @@ } else { log("Already in retry..."); } - } + }; var buzzing = false; - function onDisconnect(reason) { + var onDisconnect = function(reason) { log("Disconnect: " + reason); log("GATT: ", gatt); log("Characteristics: ", characteristics); @@ -273,9 +270,9 @@ if (Bangle.isBTHRMOn()){ retry(); } - } + }; - function createCharacteristicPromise(newCharacteristic){ + var createCharacteristicPromise = function(newCharacteristic) { log("Create characteristic promise: ", newCharacteristic); var result = Promise.resolve(); // For values that can be read, go ahead and read them, even if we might be notified in the future @@ -298,23 +295,23 @@ log("Add " + settings.gracePeriodNotification + "ms grace period after starting notifications"); startPromise = startPromise.then(()=>{ log("Wait after connect"); - waitingPromise(settings.gracePeriodNotification) + return waitingPromise(settings.gracePeriodNotification); }); } return startPromise; }); } return result.then(()=>log("Handled characteristic: ", newCharacteristic)); - } + }; - function attachCharacteristicPromise(promise, characteristic){ + var attachCharacteristicPromise = function(promise, characteristic) { return promise.then(()=>{ log("Handling characteristic:", characteristic); return createCharacteristicPromise(characteristic); }); - } + }; - function createCharacteristicsPromise(newCharacteristics){ + var createCharacteristicsPromise = function(newCharacteristics) { log("Create characteristics promise: ", newCharacteristics); var result = Promise.resolve(); for (var c of newCharacteristics){ @@ -328,9 +325,9 @@ result = attachCharacteristicPromise(result, c); } return result.then(()=>log("Handled characteristics")); - } + }; - function createServicePromise(service){ + var createServicePromise = function(service) { log("Create service promise: ", service); var result = Promise.resolve(); result = result.then(()=>{ @@ -338,15 +335,13 @@ return service.getCharacteristics().then((c)=>createCharacteristicsPromise(c)); }); return result.then(()=>log("Handled service" + service.uuid)); - } + }; - function attachServicePromise(promise, service){ + var attachServicePromise = function(promise, service) { return promise.then(()=>createServicePromise(service)); - } + }; - var reUseCounter = 0; - - function initBt() { + var initBt = function () { log("initBt with blockInit: " + blockInit); if (blockInit){ retry(); @@ -355,19 +350,15 @@ blockInit = true; - if (reUseCounter > 10){ - log("Reuse counter to high"); - gatt=undefined; - reUseCounter = 0; - } - var promise; + var filters; if (!device){ - var filters = serviceFilters; if (settings.btid){ log("Configured device id", settings.btid); - filters = [{id: settings.btid }]; + filters = [{ id: settings.btid }]; + } else { + return; } log("Requesting device with filters", filters); promise = NRF.requestDevice({ filters: filters, active: true }); @@ -397,13 +388,13 @@ } else { log("GATT is new: ", gatt); characteristics = []; - var cachedName = getCache().name; - if (device.name !== cachedName){ - log("Device name changed from " + cachedName + " to " + device.name + ", clearing cache"); + var cachedId = getCache().id; + if (device.id !== cachedId){ + log("Device ID changed from " + cachedId + " to " + device.id + ", clearing cache"); clearCache(); } var newCache = getCache(); - newCache.name = device.name; + newCache.id = device.id; writeCache(newCache); gatt = device.gatt; } @@ -465,7 +456,7 @@ log("Add " + settings.gracePeriodService + "ms grace period after services"); result = result.then(()=>{ log("Wait after services"); - return waitingPromise(settings.gracePeriodService) + return waitingPromise(settings.gracePeriodService); }); } return result; @@ -478,10 +469,9 @@ return characteristicsPromise; }); - + return promise.then(()=>{ log("Connection established, waiting for notifications"); - reUseCounter = 0; characteristicsToCache(characteristics); clearRetryTimeout(); }).catch((e) => { @@ -489,7 +479,7 @@ log("Error:", e); onDisconnect(e); }); - } + }; Bangle.setBTHRMPower = function(isOn, app) { // Do app power handling @@ -538,7 +528,7 @@ var fallbackInterval; - function switchInternalHrm(){ + var switchInternalHrm = function() { if (settings.allowFallback && !fallbackInterval){ log("Fallback to HRM enabled"); origSetHRMPower(1, "bthrm_fallback"); @@ -551,7 +541,7 @@ } }, settings.fallbackTimeout); } - } + }; if (settings.replace){ log("Replace HRM event"); diff --git a/apps/bthrm/metadata.json b/apps/bthrm/metadata.json index b35ebd6af..faff72d0f 100644 --- a/apps/bthrm/metadata.json +++ b/apps/bthrm/metadata.json @@ -6,7 +6,7 @@ "description": "Overrides Bangle.js's build in heart rate monitor with an external Bluetooth one.", "icon": "app.png", "type": "app", - "tags": "health,bluetooth", + "tags": "health,bluetooth,hrm", "supports": ["BANGLEJS","BANGLEJS2"], "readme": "README.md", "storage": [ From ab11b7068115b6678d69e70c21b7787bba778ece Mon Sep 17 00:00:00 2001 From: Salim Blume Date: Tue, 19 Apr 2022 16:54:27 -0500 Subject: [PATCH 014/509] Default custom values to the same as default mode so you can choose which pieces to change knowing the rest is the same --- apps/bthrm/default.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/apps/bthrm/default.json b/apps/bthrm/default.json index 64e638b8a..fb284bcd2 100644 --- a/apps/bthrm/default.json +++ b/apps/bthrm/default.json @@ -7,10 +7,10 @@ "allowFallback": true, "warnDisconnect": false, "fallbackTimeout": 10, - "custom_replace": false, + "custom_replace": true, "custom_debuglog": false, - "custom_startWithHrm": false, - "custom_allowFallback": false, + "custom_startWithHrm": true, + "custom_allowFallback": true, "custom_warnDisconnect": false, "custom_fallbackTimeout": 10, "gracePeriodNotification": 0, From dbecd1ae6f009220f84b989d2bfc3666ebf27ca2 Mon Sep 17 00:00:00 2001 From: Salim Blume Date: Tue, 19 Apr 2022 16:54:50 -0500 Subject: [PATCH 015/509] Adding tag to find 'hrm' more easily --- apps/bthrm/metadata.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/bthrm/metadata.json b/apps/bthrm/metadata.json index faff72d0f..85c19ab33 100644 --- a/apps/bthrm/metadata.json +++ b/apps/bthrm/metadata.json @@ -6,7 +6,7 @@ "description": "Overrides Bangle.js's build in heart rate monitor with an external Bluetooth one.", "icon": "app.png", "type": "app", - "tags": "health,bluetooth,hrm", + "tags": "health,bluetooth,hrm,bthrm", "supports": ["BANGLEJS","BANGLEJS2"], "readme": "README.md", "storage": [ From 650d2bd288e47bbf95f94aef62949ad22aefdd32 Mon Sep 17 00:00:00 2001 From: Salim Blume Date: Tue, 19 Apr 2022 16:55:04 -0500 Subject: [PATCH 016/509] Scaled retryTime for clampedTime instead of itself --- apps/bthrm/boot.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/bthrm/boot.js b/apps/bthrm/boot.js index 064f65eac..e9e640563 100644 --- a/apps/bthrm/boot.js +++ b/apps/bthrm/boot.js @@ -245,7 +245,7 @@ initBt(); }, clampedTime); - retryTime = Math.pow(retryTime, 1.1); + retryTime = Math.pow(clampedTime, 1.1); if (retryTime > maxRetryTime){ retryTime = maxRetryTime; } From 02c4a1b9b70d5f650ea84e08a76025a295e4580d Mon Sep 17 00:00:00 2001 From: Erik Andresen Date: Fri, 22 Apr 2022 13:06:42 +0200 Subject: [PATCH 017/509] sleepphasealarm add logging, display with chart.js --- apps/sleepphasealarm/ChangeLog | 1 + apps/sleepphasealarm/app.js | 26 ++++++- apps/sleepphasealarm/interface.html | 103 ++++++++++++++++++++++++++++ apps/sleepphasealarm/metadata.json | 6 +- 4 files changed, 131 insertions(+), 5 deletions(-) create mode 100644 apps/sleepphasealarm/interface.html diff --git a/apps/sleepphasealarm/ChangeLog b/apps/sleepphasealarm/ChangeLog index 875b3c1da..94ad5852e 100644 --- a/apps/sleepphasealarm/ChangeLog +++ b/apps/sleepphasealarm/ChangeLog @@ -3,3 +3,4 @@ 0.03: Add compatibility for Bangle.js 2 and new firmware, added "Alarm at " for the alarm time 0.04: Read alarms from new scheduling library, account for higher acceleration sensor noise on Bangle.js 2 0.05: Refactor decodeTime() to scheduling library +0.06: Add logging diff --git a/apps/sleepphasealarm/app.js b/apps/sleepphasealarm/app.js index 236b71c0b..0a8e83a08 100644 --- a/apps/sleepphasealarm/app.js +++ b/apps/sleepphasealarm/app.js @@ -1,6 +1,8 @@ const BANGLEJS2 = process.env.HWVERSION == 2; //# check for bangle 2 -const alarms = require("Storage").readJSON("sched.json",1)||[]; +const alarms = require("Storage").readJSON("sched.json",1) || []; +const config = require("Storage").readJSON("sleepphasealarm.json",1) || {logs: []}; const active = alarms.filter(a=>a.on); +let logs = []; // Sleep/Wake detection with Estimation of Stationary Sleep-segments (ESS): // Marko Borazio, Eugen Berlin, Nagihan Kücükyildiz, Philipp M. Scholl and Kristof Van Laerhoven, "Towards a Benchmark for Wearable Sleep Analysis with Inertial Wrist-worn Sensing Units", ICHI 2014, Verona, Italy, IEEE Press, 2014. @@ -108,12 +110,20 @@ function buzz() { }); } +function addLog(time, type) { + logs.push({time: time, type: type}); + require("Storage").writeJSON("sleepphasealarm.json", config); +} + // run var minAlarm = new Date(); var measure = true; if (nextAlarm !== undefined) { - Bangle.loadWidgets(); //# correct widget load draw order + config.logs[nextAlarm.getDate()] = []; // overwrite log on each day of month + logs = config.logs[nextAlarm.getDate()]; + Bangle.loadWidgets(); Bangle.drawWidgets(); + let swest_last; // minimum alert 30 minutes early minAlarm.setTime(nextAlarm.getTime() - (30*60*1000)); @@ -124,7 +134,16 @@ if (nextAlarm !== undefined) { if (swest !== undefined) { if (Bangle.isLCDOn()) { - drawString(swest ? "Sleep" : "Awake", BANGLEJS2 ? 150 : 180); //# remove x, adjust height + drawString(swest ? "Sleep" : "Awake", BANGLEJS2 ? 150 : 180); + } + // log + if (swest_last != swest) { + if (swest) { + addLog(new Date(Date.now() - sleepthresh*13/12.5*1000), "sleep"); // calculate begin of no motion phase, 13 values/second at 12.5Hz + } else { + addLog(new Date(), "awake"); + } + swest_last = swest; } } @@ -132,6 +151,7 @@ if (nextAlarm !== undefined) { // The alarm widget should handle this one setTimeout(load, 1000); } else if (measure && now >= minAlarm && swest === false) { + addLog(new Date(), "alarm"); buzz(); measure = false; } diff --git a/apps/sleepphasealarm/interface.html b/apps/sleepphasealarm/interface.html new file mode 100644 index 000000000..d9e5a2504 --- /dev/null +++ b/apps/sleepphasealarm/interface.html @@ -0,0 +1,103 @@ + + + + + + +

Please select a wakeup day:

+
+ +
+
+ +
+ + + + + + + diff --git a/apps/sleepphasealarm/metadata.json b/apps/sleepphasealarm/metadata.json index aecfa36e4..aba240e37 100644 --- a/apps/sleepphasealarm/metadata.json +++ b/apps/sleepphasealarm/metadata.json @@ -2,7 +2,7 @@ "id": "sleepphasealarm", "name": "SleepPhaseAlarm", "shortName": "SleepPhaseAlarm", - "version": "0.05", + "version": "0.06", "description": "Uses the accelerometer to estimate sleep and wake states with the principle of Estimation of Stationary Sleep-segments (ESS, see https://ubicomp.eti.uni-siegen.de/home/datasets/ichi14/index.html.en). This app will read the next alarm from the alarm application and will wake you up to 30 minutes early at the best guessed time when you are almost already awake.", "icon": "app.png", "tags": "alarm", @@ -11,5 +11,7 @@ "storage": [ {"name":"sleepphasealarm.app.js","url":"app.js"}, {"name":"sleepphasealarm.img","url":"app-icon.js","evaluate":true} - ] + ], + "data": [{"name":"sleepphasealarm.json","storageFile":true}], + "interface": "interface.html" } From a4ae39ca48140ef956438218a848ebe9fe88bb95 Mon Sep 17 00:00:00 2001 From: nomusictuesdays <104293511+nomusictuesdays@users.noreply.github.com> Date: Mon, 25 Apr 2022 17:05:04 -0700 Subject: [PATCH 018/509] Set theme jekyll-theme-slate --- _config.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/_config.yml b/_config.yml index 2f7efbeab..c74188174 100644 --- a/_config.yml +++ b/_config.yml @@ -1 +1 @@ -theme: jekyll-theme-minimal \ No newline at end of file +theme: jekyll-theme-slate \ No newline at end of file From 7621a14276a796ecca531ac065072ff199239bc9 Mon Sep 17 00:00:00 2001 From: nomusictuesdays <104293511+nomusictuesdays@users.noreply.github.com> Date: Mon, 25 Apr 2022 17:30:38 -0700 Subject: [PATCH 019/509] Create brabury A watch face based on the classic Seiko model worn by one of my favorite authors. I didn't follow the original lcd layout exactly, opting for larger font for more easily readable time, and adding date, battery level, and step count read from the device. --- apps/brabury | 99 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 99 insertions(+) create mode 100644 apps/brabury diff --git a/apps/brabury b/apps/brabury new file mode 100644 index 000000000..dfaa3485c --- /dev/null +++ b/apps/brabury @@ -0,0 +1,99 @@ +require("Font7x11Numeric7Seg").add(Graphics); +require("Font5x9Numeric7Seg").add(Graphics); +require("Font8x12").add(Graphics); +require("FontDylex7x13").add(Graphics); +const X = 98, Y = 46; + +function draw() { + var d = new Date(); + var h = d.getHours() % 12 || 12, m = d.getMinutes(), yyyy = d.getFullYear(), mm = d.getMonth(), dd = d.getDate(); + var time = (""+h).substr(-2) + ":" + ("0"+m).substr(-2); + g.reset(); // Reset the state of the graphics library + g.clear(); + g.drawImage(require("Storage").read("Tigger4.gif")); + //TIME + g.setFont("7x11Numeric7Seg",2); + g.setFontAlign(1,1); + g.setColor(0,0,1); + g.drawString(time, 97, 53, false /*clear background*/); + g.setColor(0,0,0); + g.drawString(time, 96, 52, false /*clear background*/); + //SECONDS + g.setFont("7x11Numeric7Seg",1); + //g.setFont("5x9Numeric7Seg"); + g.setFontAlign(-1,1); // align right bottom + g.setColor(0,0,1); + g.drawString(("0"+d.getSeconds()).substr(-2), 100, 42, 0); + g.setColor(0,0,0); + g.drawString(("0"+d.getSeconds()).substr(-2), 99, 41, 0); + //DATE + g.setFont("5x9Numeric7Seg",1); + g.setFontAlign(1,1); + g.setColor(0,0,1); + g.drawString(yyyy+" "+("0"+mm)+" "+dd, 100, 65, 0); + g.setColor(0,0,0); + g.drawString(yyyy+" "+("0"+mm)+" "+dd, 99, 64, 0); + //BATTERY + g.setColor(0,0,1); + g.drawString(E.getBattery(), 137, 53, 0); + g.setColor(0,0,0); + g.drawString(E.getBattery(), 136, 52, 0); + //STEPS + g.setColor(0,0,1); + g.drawString(Bangle.getHealthStatus("day").steps, 137, 65, 0); + g.setColor(0,0,0); + g.drawString(Bangle.getHealthStatus("day").steps, 136, 64, 0); + //WEEK DAY + g.setFont("8x12"); + g.setColor(0,0,1); + if (d.getDay()==0) { + g.drawString("Su", 137, 43, 0); + g.setColor(0,0,0); + g.drawString("Su", 136, 42, 0); + } else if (d.getDay()==1) { + g.drawString("M", 137, 43, 0); + g.setColor(0,0,0); + g.drawString("M", 136, 42, 0); + } else if (d.getDay()==2) { + g.drawString("Tu", 137, 43, 0); + g.setColor(0,0,0); + g.drawString("Tu", 136, 42, 0); + } else if (d.getDay()==3) { + g.drawString("W", 137, 43, 0); + g.setColor(0,0,0); + g.drawString("W", 136, 42, 0); + } else if (d.getDay()==4) { + g.setFont("Dylex7x13"); + g.drawString("Th", 137, 43, 0); + g.setColor(0,0,0); + g.drawString("Th", 136, 42, 0); + } else if (d.getDay()==5) { + g.drawString("F", 137, 43, 0); + g.setColor(0,0,0); + g.drawString("F", 136, 42, 0); + } else { + g.drawString("Sa", 137, 43, 0); + g.setColor(0,0,0); + g.drawString("Sa", 136, 42, 0); + } +} + +// Clear the screen once, at startup +g.clear(); +// draw immediately at first +draw(); +var secondInterval = setInterval(draw, 1000); +// Stop updates when LCD is off, restart when on +Bangle.on('lcdPower',on=>{ + if (secondInterval) clearInterval(secondInterval); + secondInterval = undefined; + if (on) { + secondInterval = setInterval(draw, 1000); + draw(); // draw immediately + } +}); +// Show launcher when middle button pressed +Bangle.setUI("clock"); +// Load widgets +//Bangle.loadWidgets(); +//Bangle.drawWidgets(); From 876d842c80cb3bc2e2bb1c53d0c7e1f6a7952025 Mon Sep 17 00:00:00 2001 From: nomusictuesdays <104293511+nomusictuesdays@users.noreply.github.com> Date: Mon, 25 Apr 2022 17:33:44 -0700 Subject: [PATCH 020/509] Delete brabury let's try again... --- apps/brabury | 99 ---------------------------------------------------- 1 file changed, 99 deletions(-) delete mode 100644 apps/brabury diff --git a/apps/brabury b/apps/brabury deleted file mode 100644 index dfaa3485c..000000000 --- a/apps/brabury +++ /dev/null @@ -1,99 +0,0 @@ -require("Font7x11Numeric7Seg").add(Graphics); -require("Font5x9Numeric7Seg").add(Graphics); -require("Font8x12").add(Graphics); -require("FontDylex7x13").add(Graphics); -const X = 98, Y = 46; - -function draw() { - var d = new Date(); - var h = d.getHours() % 12 || 12, m = d.getMinutes(), yyyy = d.getFullYear(), mm = d.getMonth(), dd = d.getDate(); - var time = (""+h).substr(-2) + ":" + ("0"+m).substr(-2); - g.reset(); // Reset the state of the graphics library - g.clear(); - g.drawImage(require("Storage").read("Tigger4.gif")); - //TIME - g.setFont("7x11Numeric7Seg",2); - g.setFontAlign(1,1); - g.setColor(0,0,1); - g.drawString(time, 97, 53, false /*clear background*/); - g.setColor(0,0,0); - g.drawString(time, 96, 52, false /*clear background*/); - //SECONDS - g.setFont("7x11Numeric7Seg",1); - //g.setFont("5x9Numeric7Seg"); - g.setFontAlign(-1,1); // align right bottom - g.setColor(0,0,1); - g.drawString(("0"+d.getSeconds()).substr(-2), 100, 42, 0); - g.setColor(0,0,0); - g.drawString(("0"+d.getSeconds()).substr(-2), 99, 41, 0); - //DATE - g.setFont("5x9Numeric7Seg",1); - g.setFontAlign(1,1); - g.setColor(0,0,1); - g.drawString(yyyy+" "+("0"+mm)+" "+dd, 100, 65, 0); - g.setColor(0,0,0); - g.drawString(yyyy+" "+("0"+mm)+" "+dd, 99, 64, 0); - //BATTERY - g.setColor(0,0,1); - g.drawString(E.getBattery(), 137, 53, 0); - g.setColor(0,0,0); - g.drawString(E.getBattery(), 136, 52, 0); - //STEPS - g.setColor(0,0,1); - g.drawString(Bangle.getHealthStatus("day").steps, 137, 65, 0); - g.setColor(0,0,0); - g.drawString(Bangle.getHealthStatus("day").steps, 136, 64, 0); - //WEEK DAY - g.setFont("8x12"); - g.setColor(0,0,1); - if (d.getDay()==0) { - g.drawString("Su", 137, 43, 0); - g.setColor(0,0,0); - g.drawString("Su", 136, 42, 0); - } else if (d.getDay()==1) { - g.drawString("M", 137, 43, 0); - g.setColor(0,0,0); - g.drawString("M", 136, 42, 0); - } else if (d.getDay()==2) { - g.drawString("Tu", 137, 43, 0); - g.setColor(0,0,0); - g.drawString("Tu", 136, 42, 0); - } else if (d.getDay()==3) { - g.drawString("W", 137, 43, 0); - g.setColor(0,0,0); - g.drawString("W", 136, 42, 0); - } else if (d.getDay()==4) { - g.setFont("Dylex7x13"); - g.drawString("Th", 137, 43, 0); - g.setColor(0,0,0); - g.drawString("Th", 136, 42, 0); - } else if (d.getDay()==5) { - g.drawString("F", 137, 43, 0); - g.setColor(0,0,0); - g.drawString("F", 136, 42, 0); - } else { - g.drawString("Sa", 137, 43, 0); - g.setColor(0,0,0); - g.drawString("Sa", 136, 42, 0); - } -} - -// Clear the screen once, at startup -g.clear(); -// draw immediately at first -draw(); -var secondInterval = setInterval(draw, 1000); -// Stop updates when LCD is off, restart when on -Bangle.on('lcdPower',on=>{ - if (secondInterval) clearInterval(secondInterval); - secondInterval = undefined; - if (on) { - secondInterval = setInterval(draw, 1000); - draw(); // draw immediately - } -}); -// Show launcher when middle button pressed -Bangle.setUI("clock"); -// Load widgets -//Bangle.loadWidgets(); -//Bangle.drawWidgets(); From 87e72910952a8b491553f2ed9d3b8350d76cc774 Mon Sep 17 00:00:00 2001 From: nomusictuesdays <104293511+nomusictuesdays@users.noreply.github.com> Date: Mon, 25 Apr 2022 17:34:25 -0700 Subject: [PATCH 021/509] Create app.js A watch face based on the classic Seiko model worn by one of my favorite authors. I didn't follow the original lcd layout exactly, opting for larger font for more easily readable time, and adding date, battery level, and step count read from the device. --- apps/bradbury/app.js | 1 + 1 file changed, 1 insertion(+) create mode 100644 apps/bradbury/app.js diff --git a/apps/bradbury/app.js b/apps/bradbury/app.js new file mode 100644 index 000000000..c8b1f747c --- /dev/null +++ b/apps/bradbury/app.js @@ -0,0 +1 @@ +A watch face based on the classic Seiko model worn by one of my favorite authors. I didn't follow the original lcd layout exactly, opting for larger font for more easily readable time, and adding date, battery level, and step count read from the device. From 4a8247c433cce38d3b13602faaa42089f1174bb2 Mon Sep 17 00:00:00 2001 From: nomusictuesdays <104293511+nomusictuesdays@users.noreply.github.com> Date: Mon, 25 Apr 2022 17:35:06 -0700 Subject: [PATCH 022/509] Add files via upload --- apps/bradbury/Tigger4.gif | Bin 0 -> 3443 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 apps/bradbury/Tigger4.gif diff --git a/apps/bradbury/Tigger4.gif b/apps/bradbury/Tigger4.gif new file mode 100644 index 0000000000000000000000000000000000000000..8e75e767704da66d551e56c1406856e96a9ba35c GIT binary patch literal 3443 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 literal 0 HcmV?d00001 From 93d8a2e17dc63a7561734f03ca7a5b60f5854cf9 Mon Sep 17 00:00:00 2001 From: nomusictuesdays <104293511+nomusictuesdays@users.noreply.github.com> Date: Mon, 25 Apr 2022 17:37:32 -0700 Subject: [PATCH 023/509] Add files via upload --- apps/bradbury/app.js | Bin 254 -> 4121 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/apps/bradbury/app.js b/apps/bradbury/app.js index c8b1f747cea88aed3bce518b7629671550135846..f7141d15e964468848906f3be563e6bd7fa0f624 100644 GIT binary patch literal 4121 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 W9`Zu5J=-oDv)lIhhvle6?q6?9Kw8uQ From 51e569b22c353e2481e10eeda94c05f229ac2b59 Mon Sep 17 00:00:00 2001 From: nomusictuesdays <104293511+nomusictuesdays@users.noreply.github.com> Date: Mon, 25 Apr 2022 17:44:06 -0700 Subject: [PATCH 024/509] Delete Tigger4.gif --- apps/bradbury/Tigger4.gif | Bin 3443 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 apps/bradbury/Tigger4.gif diff --git a/apps/bradbury/Tigger4.gif b/apps/bradbury/Tigger4.gif deleted file mode 100644 index 8e75e767704da66d551e56c1406856e96a9ba35c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3443 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 From 3bd52a4ed6dedc3ea712c60734f906aa63bca8cc Mon Sep 17 00:00:00 2001 From: nomusictuesdays <104293511+nomusictuesdays@users.noreply.github.com> Date: Mon, 25 Apr 2022 17:57:56 -0700 Subject: [PATCH 025/509] Delete app.js --- apps/bradbury/app.js | Bin 4121 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 apps/bradbury/app.js diff --git a/apps/bradbury/app.js b/apps/bradbury/app.js deleted file mode 100644 index f7141d15e964468848906f3be563e6bd7fa0f624..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4121 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 Date: Mon, 25 Apr 2022 17:58:33 -0700 Subject: [PATCH 026/509] Create app.js --- apps/bradbury/app.js | 99 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 99 insertions(+) create mode 100644 apps/bradbury/app.js diff --git a/apps/bradbury/app.js b/apps/bradbury/app.js new file mode 100644 index 000000000..dfaa3485c --- /dev/null +++ b/apps/bradbury/app.js @@ -0,0 +1,99 @@ +require("Font7x11Numeric7Seg").add(Graphics); +require("Font5x9Numeric7Seg").add(Graphics); +require("Font8x12").add(Graphics); +require("FontDylex7x13").add(Graphics); +const X = 98, Y = 46; + +function draw() { + var d = new Date(); + var h = d.getHours() % 12 || 12, m = d.getMinutes(), yyyy = d.getFullYear(), mm = d.getMonth(), dd = d.getDate(); + var time = (""+h).substr(-2) + ":" + ("0"+m).substr(-2); + g.reset(); // Reset the state of the graphics library + g.clear(); + g.drawImage(require("Storage").read("Tigger4.gif")); + //TIME + g.setFont("7x11Numeric7Seg",2); + g.setFontAlign(1,1); + g.setColor(0,0,1); + g.drawString(time, 97, 53, false /*clear background*/); + g.setColor(0,0,0); + g.drawString(time, 96, 52, false /*clear background*/); + //SECONDS + g.setFont("7x11Numeric7Seg",1); + //g.setFont("5x9Numeric7Seg"); + g.setFontAlign(-1,1); // align right bottom + g.setColor(0,0,1); + g.drawString(("0"+d.getSeconds()).substr(-2), 100, 42, 0); + g.setColor(0,0,0); + g.drawString(("0"+d.getSeconds()).substr(-2), 99, 41, 0); + //DATE + g.setFont("5x9Numeric7Seg",1); + g.setFontAlign(1,1); + g.setColor(0,0,1); + g.drawString(yyyy+" "+("0"+mm)+" "+dd, 100, 65, 0); + g.setColor(0,0,0); + g.drawString(yyyy+" "+("0"+mm)+" "+dd, 99, 64, 0); + //BATTERY + g.setColor(0,0,1); + g.drawString(E.getBattery(), 137, 53, 0); + g.setColor(0,0,0); + g.drawString(E.getBattery(), 136, 52, 0); + //STEPS + g.setColor(0,0,1); + g.drawString(Bangle.getHealthStatus("day").steps, 137, 65, 0); + g.setColor(0,0,0); + g.drawString(Bangle.getHealthStatus("day").steps, 136, 64, 0); + //WEEK DAY + g.setFont("8x12"); + g.setColor(0,0,1); + if (d.getDay()==0) { + g.drawString("Su", 137, 43, 0); + g.setColor(0,0,0); + g.drawString("Su", 136, 42, 0); + } else if (d.getDay()==1) { + g.drawString("M", 137, 43, 0); + g.setColor(0,0,0); + g.drawString("M", 136, 42, 0); + } else if (d.getDay()==2) { + g.drawString("Tu", 137, 43, 0); + g.setColor(0,0,0); + g.drawString("Tu", 136, 42, 0); + } else if (d.getDay()==3) { + g.drawString("W", 137, 43, 0); + g.setColor(0,0,0); + g.drawString("W", 136, 42, 0); + } else if (d.getDay()==4) { + g.setFont("Dylex7x13"); + g.drawString("Th", 137, 43, 0); + g.setColor(0,0,0); + g.drawString("Th", 136, 42, 0); + } else if (d.getDay()==5) { + g.drawString("F", 137, 43, 0); + g.setColor(0,0,0); + g.drawString("F", 136, 42, 0); + } else { + g.drawString("Sa", 137, 43, 0); + g.setColor(0,0,0); + g.drawString("Sa", 136, 42, 0); + } +} + +// Clear the screen once, at startup +g.clear(); +// draw immediately at first +draw(); +var secondInterval = setInterval(draw, 1000); +// Stop updates when LCD is off, restart when on +Bangle.on('lcdPower',on=>{ + if (secondInterval) clearInterval(secondInterval); + secondInterval = undefined; + if (on) { + secondInterval = setInterval(draw, 1000); + draw(); // draw immediately + } +}); +// Show launcher when middle button pressed +Bangle.setUI("clock"); +// Load widgets +//Bangle.loadWidgets(); +//Bangle.drawWidgets(); From 3fc8f407ff34cf5ea8ad601c2d96c52dc21e3087 Mon Sep 17 00:00:00 2001 From: nomusictuesdays <104293511+nomusictuesdays@users.noreply.github.com> Date: Mon, 25 Apr 2022 18:03:07 -0700 Subject: [PATCH 027/509] Create app-icon.js --- apps/bradbury/app-icon.js | 1 + 1 file changed, 1 insertion(+) create mode 100644 apps/bradbury/app-icon.js diff --git a/apps/bradbury/app-icon.js b/apps/bradbury/app-icon.js new file mode 100644 index 000000000..d5bcdbd6d --- /dev/null +++ b/apps/bradbury/app-icon.js @@ -0,0 +1 @@ +require("heatshrink").decompress(atob("mEwwcCkGSpEgwQCChICFkgCBgkQoMEyFJAoICByVBkgLBkkSpIaDEwWShEkFgcIBAIdCEYQCBAoQdBAoYsBC4Q7BpICBEYQCDF4Q7CEYYCCEYUSKYYUDyRlCJQQIBNYYvBMoQCBkgjBFgxxCL4REDFgaPEHYgmCIgosCNYZEEDoZ0CNwY7CIIYgDEYtB9+e/dg/4AB2EJkYEB/mC/fn33Ivvz598v4MB/0BgoRCyVHvmW7Mg2EA8uD/EAh/IkGP/8AgVLtkA5El+FJvoRBgmf4Mkh0HkEQo9kyEfkeQofsgf4kmPCIP+h/gwULkkCncEu/ZsmRI4cEv0H8ESpdgEwMjwXI9kTCIOANYkSEYOCncF+UAjuR/ED+FBg/3/f8RgNgiVPkYdBtkT/Egv0Il+AoMfI4PgyX7vkW799F4Nl//4//woH/+0Ztvx7Fs335sk//5EB/IRBhACB77CBpEkgEIgGQoDRBgEggVBgDdBgGAgPv317ku+5cj334t+OSoI+B8gCBtlx7dkuFfgvx4N8yPbvgOB8ACBR4MA9mf4Egz3IgeChEDwDOBx/AjuCoN8y/JgkX4ME2FBjuQn65BgMtwELkGOEYOO4Mh2EJh+Sh/jOIMd+3fskRcwMTEwOWo98gCSBwFJkm2pfgx3II4PBk++/aABhEfwEInpZBvkX7MkJQMl2FHfANBjgCBlmQhHsgwjB33IkeyBAOChMcEwM9+/ZsBHBboMJtv2hd9+FHZANBVoM7kGC/fv2FJ9+GEYOAh//+UIaIMBkkQpEAHwIIBoMgiFJBANJEAMIkGShEkwQIChIIBhIIBhIaCkmQpIFCgmSEwYpDEYwCCpAICBwUEiQdFEwIICyAIDHwQ7CEYYpCEYWSpA7FDocSEwojBCgIaDIgYCBNwR0BNYYjFEwZTDLgQjGOgYvBEYQ7ENYlJFgQCCDohuGTYpBFkhoCSoQICEYIA=")+strPostfix From e3ca5d217aa94e85972b403b72bc120832af6f14 Mon Sep 17 00:00:00 2001 From: nomusictuesdays <104293511+nomusictuesdays@users.noreply.github.com> Date: Mon, 25 Apr 2022 18:11:02 -0700 Subject: [PATCH 028/509] Update app.js --- apps/bradbury/app.js | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/apps/bradbury/app.js b/apps/bradbury/app.js index dfaa3485c..f5cf0f411 100644 --- a/apps/bradbury/app.js +++ b/apps/bradbury/app.js @@ -4,13 +4,18 @@ require("Font8x12").add(Graphics); require("FontDylex7x13").add(Graphics); const X = 98, Y = 46; +function getImg() { + return require("heatshrink").decompress(atob("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")); +} + function draw() { var d = new Date(); var h = d.getHours() % 12 || 12, m = d.getMinutes(), yyyy = d.getFullYear(), mm = d.getMonth(), dd = d.getDate(); var time = (""+h).substr(-2) + ":" + ("0"+m).substr(-2); g.reset(); // Reset the state of the graphics library g.clear(); - g.drawImage(require("Storage").read("Tigger4.gif")); + g.drawImage(getImg()); + //g.drawImage(require("Storage").read("Tigger4.gif")); //TIME g.setFont("7x11Numeric7Seg",2); g.setFontAlign(1,1); From 5347b4c5e5a5cea29886af3e7a4041627f5ec2bb Mon Sep 17 00:00:00 2001 From: nomusictuesdays <104293511+nomusictuesdays@users.noreply.github.com> Date: Mon, 25 Apr 2022 18:17:23 -0700 Subject: [PATCH 029/509] Create metadata.json --- apps/bradbury/metadata.json | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 apps/bradbury/metadata.json diff --git a/apps/bradbury/metadata.json b/apps/bradbury/metadata.json new file mode 100644 index 000000000..35b306219 --- /dev/null +++ b/apps/bradbury/metadata.json @@ -0,0 +1,12 @@ +{ "id": "bradbury", + "name": "Bradbury Digital Watch", + "shortName":"Bradbury Watch", + "icon": "app.png", + "version":"0.01", + "description": "A watch face based on the classic Seiko model worn by one of my favorite authors. I didn't follow the original lcd layout exactly, opting for larger font for more easily readable time, and adding date, battery level, and step count read from the device. For now the only mode excludes widgets to maintain aesthetics.", + "tags": "Seiko", "Ray", "Sci-Fi", "Digital", "Watch", "Clock", "Vintage", "80s", "Ghostbusters", + "storage": [ + {"name":"bradbury.app.js","url":"app.js"}, + {"name":"bradbury_icon.png","url":"app-icon.js","evaluate":true} + ] +} From 801ffed177c2938b8f09ed3042b6ecf189f94436 Mon Sep 17 00:00:00 2001 From: nomusictuesdays <104293511+nomusictuesdays@users.noreply.github.com> Date: Mon, 25 Apr 2022 18:39:23 -0700 Subject: [PATCH 030/509] Delete metadata.json --- apps/bradbury/metadata.json | 12 ------------ 1 file changed, 12 deletions(-) delete mode 100644 apps/bradbury/metadata.json diff --git a/apps/bradbury/metadata.json b/apps/bradbury/metadata.json deleted file mode 100644 index 35b306219..000000000 --- a/apps/bradbury/metadata.json +++ /dev/null @@ -1,12 +0,0 @@ -{ "id": "bradbury", - "name": "Bradbury Digital Watch", - "shortName":"Bradbury Watch", - "icon": "app.png", - "version":"0.01", - "description": "A watch face based on the classic Seiko model worn by one of my favorite authors. I didn't follow the original lcd layout exactly, opting for larger font for more easily readable time, and adding date, battery level, and step count read from the device. For now the only mode excludes widgets to maintain aesthetics.", - "tags": "Seiko", "Ray", "Sci-Fi", "Digital", "Watch", "Clock", "Vintage", "80s", "Ghostbusters", - "storage": [ - {"name":"bradbury.app.js","url":"app.js"}, - {"name":"bradbury_icon.png","url":"app-icon.js","evaluate":true} - ] -} From f90e2b878719a9975d5e84e3f471f2e4b1d9e9c9 Mon Sep 17 00:00:00 2001 From: nomusictuesdays <104293511+nomusictuesdays@users.noreply.github.com> Date: Mon, 25 Apr 2022 18:42:41 -0700 Subject: [PATCH 031/509] Create metadata.json --- apps/bradbury/metadata.json | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 apps/bradbury/metadata.json diff --git a/apps/bradbury/metadata.json b/apps/bradbury/metadata.json new file mode 100644 index 000000000..f6d2a7a0c --- /dev/null +++ b/apps/bradbury/metadata.json @@ -0,0 +1,12 @@ +{ "id": "bradbury", + "name": "Bradbury Digital Watch", + "shortName":"Bradbury Watch", + "icon": "app.png", + "version":"0.01", + "description": "A watch face based on the classic Seiko model worn by one of my favorite authors. I didn't follow the original lcd layout exactly, opting for larger font for more easily readable time, and adding date, battery level, and step count read from the device. For now the only mode excludes widgets to maintain aesthetics.", + "tags": "", + "storage": [ + {"name":"bradbury.app.js","url":"app.js"}, + {"name":"bradbury_icon.png","url":"app-icon.js","evaluate":true} + ] +} From 103b800dc096cfe3a692aaeb2d7682aa8732f052 Mon Sep 17 00:00:00 2001 From: nomusictuesdays <104293511+nomusictuesdays@users.noreply.github.com> Date: Mon, 25 Apr 2022 18:45:20 -0700 Subject: [PATCH 032/509] Update metadata.json --- apps/bradbury/metadata.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/bradbury/metadata.json b/apps/bradbury/metadata.json index f6d2a7a0c..f064df9df 100644 --- a/apps/bradbury/metadata.json +++ b/apps/bradbury/metadata.json @@ -6,7 +6,7 @@ "description": "A watch face based on the classic Seiko model worn by one of my favorite authors. I didn't follow the original lcd layout exactly, opting for larger font for more easily readable time, and adding date, battery level, and step count read from the device. For now the only mode excludes widgets to maintain aesthetics.", "tags": "", "storage": [ - {"name":"bradbury.app.js","url":"app.js"}, - {"name":"bradbury_icon.png","url":"app-icon.js","evaluate":true} + {"name":"app.js","url":"app.js"}, + {"name":"app-icon.js","url":"app-icon.js","evaluate":true} ] } From 79136c502756d499f0c572107d2ba9c77a6e797d Mon Sep 17 00:00:00 2001 From: nomusictuesdays <104293511+nomusictuesdays@users.noreply.github.com> Date: Mon, 25 Apr 2022 18:47:19 -0700 Subject: [PATCH 033/509] Update metadata.json --- apps/bradbury/metadata.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/bradbury/metadata.json b/apps/bradbury/metadata.json index f064df9df..f7e634341 100644 --- a/apps/bradbury/metadata.json +++ b/apps/bradbury/metadata.json @@ -6,7 +6,7 @@ "description": "A watch face based on the classic Seiko model worn by one of my favorite authors. I didn't follow the original lcd layout exactly, opting for larger font for more easily readable time, and adding date, battery level, and step count read from the device. For now the only mode excludes widgets to maintain aesthetics.", "tags": "", "storage": [ - {"name":"app.js","url":"app.js"}, - {"name":"app-icon.js","url":"app-icon.js","evaluate":true} + {"name":"bradbury.app.js","url":"app.js"}, + {"name":"bradbury.img","url":"app-icon.js","evaluate":true} ] } From 88f263aec548e9779e354cf81b117de430611b7a Mon Sep 17 00:00:00 2001 From: nomusictuesdays <104293511+nomusictuesdays@users.noreply.github.com> Date: Mon, 25 Apr 2022 18:55:46 -0700 Subject: [PATCH 034/509] Update metadata.json --- apps/bradbury/metadata.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/apps/bradbury/metadata.json b/apps/bradbury/metadata.json index f7e634341..cf7e26e83 100644 --- a/apps/bradbury/metadata.json +++ b/apps/bradbury/metadata.json @@ -4,7 +4,8 @@ "icon": "app.png", "version":"0.01", "description": "A watch face based on the classic Seiko model worn by one of my favorite authors. I didn't follow the original lcd layout exactly, opting for larger font for more easily readable time, and adding date, battery level, and step count read from the device. For now the only mode excludes widgets to maintain aesthetics.", - "tags": "", + "tags": "Seiko," "Voice," "Note," "M516," "4009," "Ray," "Sci-Fi," "Digital" "Watch, "Clock," "Vintage," "80s," "Ghostbusters," + "supports": ["BANGLEJS2"], "storage": [ {"name":"bradbury.app.js","url":"app.js"}, {"name":"bradbury.img","url":"app-icon.js","evaluate":true} From 001cbe87fece95cc020e8918237808eba95cb373 Mon Sep 17 00:00:00 2001 From: nomusictuesdays <104293511+nomusictuesdays@users.noreply.github.com> Date: Mon, 25 Apr 2022 19:01:08 -0700 Subject: [PATCH 035/509] Add files via upload --- apps/bradbury/bradbury_icon.png | Bin 0 -> 4121 bytes apps/bradbury/screenshot.png | Bin 0 -> 7588 bytes 2 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 apps/bradbury/bradbury_icon.png create mode 100644 apps/bradbury/screenshot.png diff --git a/apps/bradbury/bradbury_icon.png b/apps/bradbury/bradbury_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..f7141d15e964468848906f3be563e6bd7fa0f624 GIT binary patch literal 4121 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 Date: Mon, 25 Apr 2022 19:02:22 -0700 Subject: [PATCH 036/509] Delete bradbury_icon.png --- apps/bradbury/bradbury_icon.png | Bin 4121 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 apps/bradbury/bradbury_icon.png diff --git a/apps/bradbury/bradbury_icon.png b/apps/bradbury/bradbury_icon.png deleted file mode 100644 index f7141d15e964468848906f3be563e6bd7fa0f624..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4121 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 Date: Mon, 25 Apr 2022 19:02:47 -0700 Subject: [PATCH 037/509] Update metadata.json --- apps/bradbury/metadata.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/bradbury/metadata.json b/apps/bradbury/metadata.json index cf7e26e83..fa9d477c4 100644 --- a/apps/bradbury/metadata.json +++ b/apps/bradbury/metadata.json @@ -8,6 +8,6 @@ "supports": ["BANGLEJS2"], "storage": [ {"name":"bradbury.app.js","url":"app.js"}, - {"name":"bradbury.img","url":"app-icon.js","evaluate":true} + {"name":"bradbury_icon.png","url":"app-icon.js","evaluate":true} ] } From 62f9b9cb81727b16688bc90d425ac9b766a23894 Mon Sep 17 00:00:00 2001 From: nomusictuesdays <104293511+nomusictuesdays@users.noreply.github.com> Date: Mon, 25 Apr 2022 19:02:58 -0700 Subject: [PATCH 038/509] Add files via upload --- apps/bradbury/bradbury_icon.png | Bin 0 -> 4121 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 apps/bradbury/bradbury_icon.png diff --git a/apps/bradbury/bradbury_icon.png b/apps/bradbury/bradbury_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..f7141d15e964468848906f3be563e6bd7fa0f624 GIT binary patch literal 4121 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 Date: Mon, 25 Apr 2022 19:05:26 -0700 Subject: [PATCH 039/509] Update metadata.json --- apps/bradbury/metadata.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/bradbury/metadata.json b/apps/bradbury/metadata.json index fa9d477c4..67d91d687 100644 --- a/apps/bradbury/metadata.json +++ b/apps/bradbury/metadata.json @@ -4,7 +4,7 @@ "icon": "app.png", "version":"0.01", "description": "A watch face based on the classic Seiko model worn by one of my favorite authors. I didn't follow the original lcd layout exactly, opting for larger font for more easily readable time, and adding date, battery level, and step count read from the device. For now the only mode excludes widgets to maintain aesthetics.", - "tags": "Seiko," "Voice," "Note," "M516," "4009," "Ray," "Sci-Fi," "Digital" "Watch, "Clock," "Vintage," "80s," "Ghostbusters," + "tags": "Seiko", "Voice", "Note ", "M516", "4009", "Ray", "Sci-Fi", "Digital", "Watch", "Clock", "Vintage", "80s", "Ghostbusters", "supports": ["BANGLEJS2"], "storage": [ {"name":"bradbury.app.js","url":"app.js"}, From ad93ac191bfb999819fa3b805ee5053311444331 Mon Sep 17 00:00:00 2001 From: nomusictuesdays <104293511+nomusictuesdays@users.noreply.github.com> Date: Mon, 25 Apr 2022 19:06:29 -0700 Subject: [PATCH 040/509] Update metadata.json --- apps/bradbury/metadata.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/bradbury/metadata.json b/apps/bradbury/metadata.json index 67d91d687..3dbf56f02 100644 --- a/apps/bradbury/metadata.json +++ b/apps/bradbury/metadata.json @@ -8,6 +8,6 @@ "supports": ["BANGLEJS2"], "storage": [ {"name":"bradbury.app.js","url":"app.js"}, - {"name":"bradbury_icon.png","url":"app-icon.js","evaluate":true} + {"name":"bradbury.img","url":"app-icon.js","evaluate":true} ] } From 8fbd6fb23313c7c4d6d96e4b0090f6ca17cb12af Mon Sep 17 00:00:00 2001 From: nomusictuesdays <104293511+nomusictuesdays@users.noreply.github.com> Date: Mon, 25 Apr 2022 19:07:02 -0700 Subject: [PATCH 041/509] Delete bradbury_icon.png --- apps/bradbury/bradbury_icon.png | Bin 4121 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 apps/bradbury/bradbury_icon.png diff --git a/apps/bradbury/bradbury_icon.png b/apps/bradbury/bradbury_icon.png deleted file mode 100644 index f7141d15e964468848906f3be563e6bd7fa0f624..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4121 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 Date: Mon, 25 Apr 2022 19:24:54 -0700 Subject: [PATCH 043/509] Update metadata.json --- apps/bradbury/metadata.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/bradbury/metadata.json b/apps/bradbury/metadata.json index 3dbf56f02..c736cbac1 100644 --- a/apps/bradbury/metadata.json +++ b/apps/bradbury/metadata.json @@ -4,7 +4,7 @@ "icon": "app.png", "version":"0.01", "description": "A watch face based on the classic Seiko model worn by one of my favorite authors. I didn't follow the original lcd layout exactly, opting for larger font for more easily readable time, and adding date, battery level, and step count read from the device. For now the only mode excludes widgets to maintain aesthetics.", - "tags": "Seiko", "Voice", "Note ", "M516", "4009", "Ray", "Sci-Fi", "Digital", "Watch", "Clock", "Vintage", "80s", "Ghostbusters", + "tags": "", "supports": ["BANGLEJS2"], "storage": [ {"name":"bradbury.app.js","url":"app.js"}, From 730d9a0e8b3a7f331db1431d04e45aee4a92fe61 Mon Sep 17 00:00:00 2001 From: nomusictuesdays <104293511+nomusictuesdays@users.noreply.github.com> Date: Mon, 25 Apr 2022 19:28:04 -0700 Subject: [PATCH 044/509] Add files via upload --- apps/bradbury/app.png | Bin 0 -> 4121 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 apps/bradbury/app.png diff --git a/apps/bradbury/app.png b/apps/bradbury/app.png new file mode 100644 index 0000000000000000000000000000000000000000..f7141d15e964468848906f3be563e6bd7fa0f624 GIT binary patch literal 4121 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 Date: Mon, 25 Apr 2022 19:28:23 -0700 Subject: [PATCH 045/509] Update metadata.json --- apps/bradbury/metadata.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/bradbury/metadata.json b/apps/bradbury/metadata.json index c736cbac1..862c5c575 100644 --- a/apps/bradbury/metadata.json +++ b/apps/bradbury/metadata.json @@ -1,5 +1,5 @@ { "id": "bradbury", - "name": "Bradbury Digital Watch", + "name": "Bradbury Watch App", "shortName":"Bradbury Watch", "icon": "app.png", "version":"0.01", From 0a73ca53dae1cd86a80d34275c1da22d9d97bc37 Mon Sep 17 00:00:00 2001 From: nomusictuesdays <104293511+nomusictuesdays@users.noreply.github.com> Date: Mon, 25 Apr 2022 19:47:07 -0700 Subject: [PATCH 047/509] Update metadata.json --- apps/bradbury/metadata.json | 25 ++++++++++++++----------- 1 file changed, 14 insertions(+), 11 deletions(-) diff --git a/apps/bradbury/metadata.json b/apps/bradbury/metadata.json index 862c5c575..375fe95f8 100644 --- a/apps/bradbury/metadata.json +++ b/apps/bradbury/metadata.json @@ -1,13 +1,16 @@ { "id": "bradbury", - "name": "Bradbury Watch App", - "shortName":"Bradbury Watch", - "icon": "app.png", - "version":"0.01", - "description": "A watch face based on the classic Seiko model worn by one of my favorite authors. I didn't follow the original lcd layout exactly, opting for larger font for more easily readable time, and adding date, battery level, and step count read from the device. For now the only mode excludes widgets to maintain aesthetics.", - "tags": "", - "supports": ["BANGLEJS2"], - "storage": [ - {"name":"bradbury.app.js","url":"app.js"}, - {"name":"bradbury.img","url":"app-icon.js","evaluate":true} - ] + "name": "Bradbury Watch", + "shortName":"Bradbury", + "icon": "app.png", + "screenshots": [{"url":"screenshot.png"}], + "version":"0.01", + "description": "A watch face based on the classic Seiko model worn by one of my favorite authors. I didn't follow the original lcd layout exactly, opting for larger font for more easily readable time, and adding date, battery level, and step count read from the device. For now the only mode excludes widgets to maintain aesthetics.", + "tags": "Seiko", "Voice", "Note ", "M516", "4009", "Ray", "Sci-Fi", "Digital", "Watch", "Clock", "Vintage", "80s", + "type": "clock", + "supports": ["BANGLEJS2"], + "allow_emulator": true, + "storage": [ + {"name":"bradbury.app.js","url":"app.js"}, + {"name":"bradbury.img","url":"app-icon.js","evaluate":true} + ] } From 0530caa755dd37a148bb7c5819dd0966ee418c46 Mon Sep 17 00:00:00 2001 From: nomusictuesdays <104293511+nomusictuesdays@users.noreply.github.com> Date: Mon, 25 Apr 2022 19:52:21 -0700 Subject: [PATCH 048/509] Update metadata.json --- apps/bradbury/metadata.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/bradbury/metadata.json b/apps/bradbury/metadata.json index 375fe95f8..09418166c 100644 --- a/apps/bradbury/metadata.json +++ b/apps/bradbury/metadata.json @@ -5,7 +5,7 @@ "screenshots": [{"url":"screenshot.png"}], "version":"0.01", "description": "A watch face based on the classic Seiko model worn by one of my favorite authors. I didn't follow the original lcd layout exactly, opting for larger font for more easily readable time, and adding date, battery level, and step count read from the device. For now the only mode excludes widgets to maintain aesthetics.", - "tags": "Seiko", "Voice", "Note ", "M516", "4009", "Ray", "Sci-Fi", "Digital", "Watch", "Clock", "Vintage", "80s", + "tags": "Seiko", "type": "clock", "supports": ["BANGLEJS2"], "allow_emulator": true, From 471b2db4d2f1c95a1bd4b5f77fe7c0115c09d31d Mon Sep 17 00:00:00 2001 From: nomusictuesdays <104293511+nomusictuesdays@users.noreply.github.com> Date: Mon, 25 Apr 2022 19:53:45 -0700 Subject: [PATCH 049/509] Update metadata.json --- apps/bradbury/metadata.json | 1 - 1 file changed, 1 deletion(-) diff --git a/apps/bradbury/metadata.json b/apps/bradbury/metadata.json index 09418166c..8611bb3cf 100644 --- a/apps/bradbury/metadata.json +++ b/apps/bradbury/metadata.json @@ -8,7 +8,6 @@ "tags": "Seiko", "type": "clock", "supports": ["BANGLEJS2"], - "allow_emulator": true, "storage": [ {"name":"bradbury.app.js","url":"app.js"}, {"name":"bradbury.img","url":"app-icon.js","evaluate":true} From 11165dd2e780949d58e6602d9793b02a21e164b1 Mon Sep 17 00:00:00 2001 From: nomusictuesdays <104293511+nomusictuesdays@users.noreply.github.com> Date: Mon, 25 Apr 2022 19:55:06 -0700 Subject: [PATCH 050/509] Update metadata.json --- apps/bradbury/metadata.json | 1 - 1 file changed, 1 deletion(-) diff --git a/apps/bradbury/metadata.json b/apps/bradbury/metadata.json index 8611bb3cf..bce143037 100644 --- a/apps/bradbury/metadata.json +++ b/apps/bradbury/metadata.json @@ -6,7 +6,6 @@ "version":"0.01", "description": "A watch face based on the classic Seiko model worn by one of my favorite authors. I didn't follow the original lcd layout exactly, opting for larger font for more easily readable time, and adding date, battery level, and step count read from the device. For now the only mode excludes widgets to maintain aesthetics.", "tags": "Seiko", - "type": "clock", "supports": ["BANGLEJS2"], "storage": [ {"name":"bradbury.app.js","url":"app.js"}, From 7ec8ff4fdb9eadb3fe40848cac40390e4cdaaed6 Mon Sep 17 00:00:00 2001 From: nomusictuesdays <104293511+nomusictuesdays@users.noreply.github.com> Date: Mon, 25 Apr 2022 19:56:04 -0700 Subject: [PATCH 051/509] Update metadata.json --- apps/bradbury/metadata.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/bradbury/metadata.json b/apps/bradbury/metadata.json index bce143037..6a4211914 100644 --- a/apps/bradbury/metadata.json +++ b/apps/bradbury/metadata.json @@ -5,7 +5,7 @@ "screenshots": [{"url":"screenshot.png"}], "version":"0.01", "description": "A watch face based on the classic Seiko model worn by one of my favorite authors. I didn't follow the original lcd layout exactly, opting for larger font for more easily readable time, and adding date, battery level, and step count read from the device. For now the only mode excludes widgets to maintain aesthetics.", - "tags": "Seiko", + "tags": "", "supports": ["BANGLEJS2"], "storage": [ {"name":"bradbury.app.js","url":"app.js"}, From ce773d6f158aa47d2eedeeb140c146f46750b971 Mon Sep 17 00:00:00 2001 From: nomusictuesdays <104293511+nomusictuesdays@users.noreply.github.com> Date: Mon, 25 Apr 2022 19:56:22 -0700 Subject: [PATCH 052/509] Update metadata.json --- apps/bradbury/metadata.json | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/apps/bradbury/metadata.json b/apps/bradbury/metadata.json index 6a4211914..1110f0948 100644 --- a/apps/bradbury/metadata.json +++ b/apps/bradbury/metadata.json @@ -2,10 +2,9 @@ "name": "Bradbury Watch", "shortName":"Bradbury", "icon": "app.png", - "screenshots": [{"url":"screenshot.png"}], "version":"0.01", "description": "A watch face based on the classic Seiko model worn by one of my favorite authors. I didn't follow the original lcd layout exactly, opting for larger font for more easily readable time, and adding date, battery level, and step count read from the device. For now the only mode excludes widgets to maintain aesthetics.", - "tags": "", + "tags": "Seiko", "supports": ["BANGLEJS2"], "storage": [ {"name":"bradbury.app.js","url":"app.js"}, From e9bf15f66a02e4e211e3bb0ac62e5b45246b93b9 Mon Sep 17 00:00:00 2001 From: nomusictuesdays <104293511+nomusictuesdays@users.noreply.github.com> Date: Mon, 25 Apr 2022 19:58:13 -0700 Subject: [PATCH 053/509] Update metadata.json --- apps/bradbury/metadata.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/apps/bradbury/metadata.json b/apps/bradbury/metadata.json index 1110f0948..6e98beb02 100644 --- a/apps/bradbury/metadata.json +++ b/apps/bradbury/metadata.json @@ -2,8 +2,9 @@ "name": "Bradbury Watch", "shortName":"Bradbury", "icon": "app.png", + "screenshots": [{"url":"screenshot.png"}], "version":"0.01", - "description": "A watch face based on the classic Seiko model worn by one of my favorite authors. I didn't follow the original lcd layout exactly, opting for larger font for more easily readable time, and adding date, battery level, and step count read from the device. For now the only mode excludes widgets to maintain aesthetics.", + "description": "A watch face based on the classic Seiko model worn by one of my favorite authors. I didn't follow the original lcd layout exactly, opting for larger font for more easily readable time, and adding date, battery level, and step count; read from the device. For now the only mode excludes widgets to maintain aesthetics.", "tags": "Seiko", "supports": ["BANGLEJS2"], "storage": [ From 210c55e214c709cbf38131b5ac1253b0cd808415 Mon Sep 17 00:00:00 2001 From: nomusictuesdays <104293511+nomusictuesdays@users.noreply.github.com> Date: Mon, 25 Apr 2022 19:59:36 -0700 Subject: [PATCH 054/509] Update metadata.json --- apps/bradbury/metadata.json | 2 -- 1 file changed, 2 deletions(-) diff --git a/apps/bradbury/metadata.json b/apps/bradbury/metadata.json index 6e98beb02..a4e8c451d 100644 --- a/apps/bradbury/metadata.json +++ b/apps/bradbury/metadata.json @@ -2,11 +2,9 @@ "name": "Bradbury Watch", "shortName":"Bradbury", "icon": "app.png", - "screenshots": [{"url":"screenshot.png"}], "version":"0.01", "description": "A watch face based on the classic Seiko model worn by one of my favorite authors. I didn't follow the original lcd layout exactly, opting for larger font for more easily readable time, and adding date, battery level, and step count; read from the device. For now the only mode excludes widgets to maintain aesthetics.", "tags": "Seiko", - "supports": ["BANGLEJS2"], "storage": [ {"name":"bradbury.app.js","url":"app.js"}, {"name":"bradbury.img","url":"app-icon.js","evaluate":true} From 1718a5a985ffdd15ab23bfbef780baa270754949 Mon Sep 17 00:00:00 2001 From: nomusictuesdays <104293511+nomusictuesdays@users.noreply.github.com> Date: Mon, 25 Apr 2022 20:01:06 -0700 Subject: [PATCH 055/509] Update metadata.json --- apps/bradbury/metadata.json | 1 - 1 file changed, 1 deletion(-) diff --git a/apps/bradbury/metadata.json b/apps/bradbury/metadata.json index a4e8c451d..e3fdd1beb 100644 --- a/apps/bradbury/metadata.json +++ b/apps/bradbury/metadata.json @@ -4,7 +4,6 @@ "icon": "app.png", "version":"0.01", "description": "A watch face based on the classic Seiko model worn by one of my favorite authors. I didn't follow the original lcd layout exactly, opting for larger font for more easily readable time, and adding date, battery level, and step count; read from the device. For now the only mode excludes widgets to maintain aesthetics.", - "tags": "Seiko", "storage": [ {"name":"bradbury.app.js","url":"app.js"}, {"name":"bradbury.img","url":"app-icon.js","evaluate":true} From 0bd4950018939b562dd80c8f2860c37dd71bdb96 Mon Sep 17 00:00:00 2001 From: nomusictuesdays <104293511+nomusictuesdays@users.noreply.github.com> Date: Mon, 25 Apr 2022 20:01:53 -0700 Subject: [PATCH 056/509] Update metadata.json --- apps/bradbury/metadata.json | 1 + 1 file changed, 1 insertion(+) diff --git a/apps/bradbury/metadata.json b/apps/bradbury/metadata.json index e3fdd1beb..e07e2f0ec 100644 --- a/apps/bradbury/metadata.json +++ b/apps/bradbury/metadata.json @@ -4,6 +4,7 @@ "icon": "app.png", "version":"0.01", "description": "A watch face based on the classic Seiko model worn by one of my favorite authors. I didn't follow the original lcd layout exactly, opting for larger font for more easily readable time, and adding date, battery level, and step count; read from the device. For now the only mode excludes widgets to maintain aesthetics.", + "supports":["BANGLEJS2"], "storage": [ {"name":"bradbury.app.js","url":"app.js"}, {"name":"bradbury.img","url":"app-icon.js","evaluate":true} From b0dcbb0b0b0728420b2c438a3b795f33385c8814 Mon Sep 17 00:00:00 2001 From: nomusictuesdays <104293511+nomusictuesdays@users.noreply.github.com> Date: Mon, 25 Apr 2022 20:03:29 -0700 Subject: [PATCH 057/509] Update metadata.json --- apps/bradbury/metadata.json | 1 - 1 file changed, 1 deletion(-) diff --git a/apps/bradbury/metadata.json b/apps/bradbury/metadata.json index e07e2f0ec..e3fdd1beb 100644 --- a/apps/bradbury/metadata.json +++ b/apps/bradbury/metadata.json @@ -4,7 +4,6 @@ "icon": "app.png", "version":"0.01", "description": "A watch face based on the classic Seiko model worn by one of my favorite authors. I didn't follow the original lcd layout exactly, opting for larger font for more easily readable time, and adding date, battery level, and step count; read from the device. For now the only mode excludes widgets to maintain aesthetics.", - "supports":["BANGLEJS2"], "storage": [ {"name":"bradbury.app.js","url":"app.js"}, {"name":"bradbury.img","url":"app-icon.js","evaluate":true} From f6c9e782770ef8c1b139e55f2c1fd2b13088d06e Mon Sep 17 00:00:00 2001 From: nomusictuesdays <104293511+nomusictuesdays@users.noreply.github.com> Date: Mon, 25 Apr 2022 20:04:21 -0700 Subject: [PATCH 058/509] Update metadata.json --- apps/bradbury/metadata.json | 1 + 1 file changed, 1 insertion(+) diff --git a/apps/bradbury/metadata.json b/apps/bradbury/metadata.json index e3fdd1beb..e07e2f0ec 100644 --- a/apps/bradbury/metadata.json +++ b/apps/bradbury/metadata.json @@ -4,6 +4,7 @@ "icon": "app.png", "version":"0.01", "description": "A watch face based on the classic Seiko model worn by one of my favorite authors. I didn't follow the original lcd layout exactly, opting for larger font for more easily readable time, and adding date, battery level, and step count; read from the device. For now the only mode excludes widgets to maintain aesthetics.", + "supports":["BANGLEJS2"], "storage": [ {"name":"bradbury.app.js","url":"app.js"}, {"name":"bradbury.img","url":"app-icon.js","evaluate":true} From 5e59d3c225ab0e9aac8989666ae7f7bac321b772 Mon Sep 17 00:00:00 2001 From: nomusictuesdays <104293511+nomusictuesdays@users.noreply.github.com> Date: Mon, 25 Apr 2022 20:04:51 -0700 Subject: [PATCH 059/509] Update metadata.json --- apps/bradbury/metadata.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/bradbury/metadata.json b/apps/bradbury/metadata.json index e07e2f0ec..2680c192a 100644 --- a/apps/bradbury/metadata.json +++ b/apps/bradbury/metadata.json @@ -3,7 +3,7 @@ "shortName":"Bradbury", "icon": "app.png", "version":"0.01", - "description": "A watch face based on the classic Seiko model worn by one of my favorite authors. I didn't follow the original lcd layout exactly, opting for larger font for more easily readable time, and adding date, battery level, and step count; read from the device. For now the only mode excludes widgets to maintain aesthetics.", + "description": "EE - A watch face based on the classic Seiko model worn by one of my favorite authors. I didn't follow the original lcd layout exactly, opting for larger font for more easily readable time, and adding date, battery level, and step count; read from the device. For now the only mode excludes widgets to maintain aesthetics.", "supports":["BANGLEJS2"], "storage": [ {"name":"bradbury.app.js","url":"app.js"}, From 6624b61b872acebfabc81ee0a70ae5602345d546 Mon Sep 17 00:00:00 2001 From: nomusictuesdays <104293511+nomusictuesdays@users.noreply.github.com> Date: Mon, 25 Apr 2022 20:05:48 -0700 Subject: [PATCH 060/509] Update metadata.json --- apps/bradbury/metadata.json | 1 - 1 file changed, 1 deletion(-) diff --git a/apps/bradbury/metadata.json b/apps/bradbury/metadata.json index 2680c192a..cb2e29876 100644 --- a/apps/bradbury/metadata.json +++ b/apps/bradbury/metadata.json @@ -4,7 +4,6 @@ "icon": "app.png", "version":"0.01", "description": "EE - A watch face based on the classic Seiko model worn by one of my favorite authors. I didn't follow the original lcd layout exactly, opting for larger font for more easily readable time, and adding date, battery level, and step count; read from the device. For now the only mode excludes widgets to maintain aesthetics.", - "supports":["BANGLEJS2"], "storage": [ {"name":"bradbury.app.js","url":"app.js"}, {"name":"bradbury.img","url":"app-icon.js","evaluate":true} From f80bfaaf05216854cc9dcb7e12779de9dbc54bb1 Mon Sep 17 00:00:00 2001 From: nomusictuesdays <104293511+nomusictuesdays@users.noreply.github.com> Date: Mon, 25 Apr 2022 20:06:06 -0700 Subject: [PATCH 061/509] Update metadata.json --- apps/bradbury/metadata.json | 1 + 1 file changed, 1 insertion(+) diff --git a/apps/bradbury/metadata.json b/apps/bradbury/metadata.json index cb2e29876..2680c192a 100644 --- a/apps/bradbury/metadata.json +++ b/apps/bradbury/metadata.json @@ -4,6 +4,7 @@ "icon": "app.png", "version":"0.01", "description": "EE - A watch face based on the classic Seiko model worn by one of my favorite authors. I didn't follow the original lcd layout exactly, opting for larger font for more easily readable time, and adding date, battery level, and step count; read from the device. For now the only mode excludes widgets to maintain aesthetics.", + "supports":["BANGLEJS2"], "storage": [ {"name":"bradbury.app.js","url":"app.js"}, {"name":"bradbury.img","url":"app-icon.js","evaluate":true} From 045f97faa9603e821ffbfa0031c29b5f984eaa96 Mon Sep 17 00:00:00 2001 From: nomusictuesdays <104293511+nomusictuesdays@users.noreply.github.com> Date: Mon, 25 Apr 2022 20:14:48 -0700 Subject: [PATCH 062/509] Update metadata.json --- apps/bradbury/metadata.json | 1 + 1 file changed, 1 insertion(+) diff --git a/apps/bradbury/metadata.json b/apps/bradbury/metadata.json index 2680c192a..f836f7429 100644 --- a/apps/bradbury/metadata.json +++ b/apps/bradbury/metadata.json @@ -2,6 +2,7 @@ "name": "Bradbury Watch", "shortName":"Bradbury", "icon": "app.png", + "screenshots": [{"url":"screenshot.png"}], "version":"0.01", "description": "EE - A watch face based on the classic Seiko model worn by one of my favorite authors. I didn't follow the original lcd layout exactly, opting for larger font for more easily readable time, and adding date, battery level, and step count; read from the device. For now the only mode excludes widgets to maintain aesthetics.", "supports":["BANGLEJS2"], From 1214ac4c6cf4597df83d148b6878280fa61de655 Mon Sep 17 00:00:00 2001 From: nomusictuesdays <104293511+nomusictuesdays@users.noreply.github.com> Date: Mon, 25 Apr 2022 20:15:16 -0700 Subject: [PATCH 063/509] Update metadata.json --- apps/bradbury/metadata.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/bradbury/metadata.json b/apps/bradbury/metadata.json index f836f7429..ec1f7ae15 100644 --- a/apps/bradbury/metadata.json +++ b/apps/bradbury/metadata.json @@ -4,7 +4,7 @@ "icon": "app.png", "screenshots": [{"url":"screenshot.png"}], "version":"0.01", - "description": "EE - A watch face based on the classic Seiko model worn by one of my favorite authors. I didn't follow the original lcd layout exactly, opting for larger font for more easily readable time, and adding date, battery level, and step count; read from the device. For now the only mode excludes widgets to maintain aesthetics.", + "description": "A watch face based on the classic Seiko model worn by one of my favorite authors. I didn't follow the original lcd layout exactly, opting for larger font for more easily readable time, and adding date, battery level, and step count; read from the device. For now the only mode excludes widgets to maintain aesthetics.", "supports":["BANGLEJS2"], "storage": [ {"name":"bradbury.app.js","url":"app.js"}, From fa448837b8703bd44d5536cf74bc0f4e5b5b196f Mon Sep 17 00:00:00 2001 From: Jason Dekarske Date: Mon, 25 Apr 2022 22:55:58 -0700 Subject: [PATCH 064/509] prototype course search --- apps/golfview/custom.html | 92 ++++++++++++++++++++++++++++++--------- 1 file changed, 72 insertions(+), 20 deletions(-) diff --git a/apps/golfview/custom.html b/apps/golfview/custom.html index 94bc551c0..48bfce5bc 100644 --- a/apps/golfview/custom.html +++ b/apps/golfview/custom.html @@ -7,30 +7,56 @@ integrity="sha256-/xUj+3OJU5yExlq6GSYGSHk7tPXikynS7ogEvDej/m4=" crossorigin="anonymous"> + +
- + -

+
    +

    No course loaded.

    -

    A course needs a few things to be parsed correctly by this tool.

    -
      -
    • See official mapping guidelines here.
    • -
    • All holes and features must be within the target course's area.
    • -
    • Supported features are greens, fairways, tees, bunkers, water hazards and holes.
    • -
    • All features for a given hole should have the "ref" tag with the hole number as value. Shared features should - list ref values separated by ';'. example.
    • -
    • There must be 18 holes and they must have the following tags: handicap, par, ref, dist
    • -
    • For any mapping assistance or issues, please file in the official - repo
    • -
    - Example Course - © OpenStreetMap contributors

    +
    +

    A course needs a few things to be parsed correctly by this tool.

    +
      +
    • See official mapping guidelines here.
    • +
    • All holes and features must be within the target course's area.
    • +
    • Supported features are greens, fairways, tees, bunkers, water hazards and holes.
    • +
    • All features for a given hole should have the "ref" tag with the hole number as value. Shared features + should + list ref values separated by ';'. example.
    • +
    • There must be 18 holes and they must have the following tags: handicap, par, ref, dist
    • +
    • For any mapping assistance or issues, please file in the official + repo
    • +
    + Example Course +
    +
    @@ -38,13 +64,21 @@ @@ -67,6 +63,7 @@ const search_url = "https://nominatim.openstreetmap.org/search"; let search_query = null; let course_input = null; + let current_course = null; let search_results = $("#searchresults"); function courseSearch() { @@ -76,9 +73,6 @@ "q": inputVal, }; doSearch(); - - // query = `[out:json][timeout:5];way(${inputVal});map_to_area ->.golfcourse;way["golf"="hole"](area.golfcourse)->.holes;(relation["golf"="fairway"](area.golfcourse);way["golf"~"^(green|tee|water_hazard|bunker|fairway)"](area.golfcourse);)->.features;.holes out geom;.features out geom;`; - // doQuery(); } function processFeatures(course_verbose) { @@ -150,7 +144,6 @@ } var courses = []; - var course_name = "Davis"; $("#upload").click(function () { sendCustomizedApp({ storage: courses, @@ -158,9 +151,13 @@ }); $("#download").click(function () { - downloadObjectAsJSON(courses[0].content, "golfcourse-" + course_name); + downloadObjectAsJSON(courses[0].content, "golfcourse-download"); }); + function testfunc(params) { + console.log(params); + } + // download info from the course function doSearch() { $.get(search_url, search_query, function (result) { @@ -173,25 +170,35 @@ for (let index = 0; index < result.length; index++) { const element = result[index]; if (element.type != "golf_course") continue; - search_results.append($("
  • ").append($("").attr('href', 'google.com').text(element.display_name))); + search_results.append($("
  • ") + .append($("

    ").text(element.display_name) + .append($("

    ") + .append($(' +
    +
    + +
    + + +
    +
    +
    +
      +
      +
      +

      No course loaded.

      + + +
      +
      +

      A course needs a few things to be parsed correctly by this tool.

      +
        +
      • See official mapping guidelines here.
      • +
      • All holes and features must be within the target course's area.
      • +
      • Supported features are greens, fairways, tees, bunkers, water hazards and holes.
      • +
      • All features for a given hole should have the "ref" tag with the hole number as value. Shared features + should + list ref values separated by ';'. example.
      • +
      • There must be 18 holes and they must have the following tags: handicap, par, ref, dist
      • +
      • For any mapping assistance or issues, please file in the official + repo
      • +
      + Example Course +
      +
      -
      -
        -
        -
        -

        No course loaded.

        - - -
        -
        -

        A course needs a few things to be parsed correctly by this tool.

        -
          -
        • See official mapping guidelines here.
        • -
        • All holes and features must be within the target course's area.
        • -
        • Supported features are greens, fairways, tees, bunkers, water hazards and holes.
        • -
        • All features for a given hole should have the "ref" tag with the hole number as value. Shared features - should - list ref values separated by ';'. example.
        • -
        • There must be 18 holes and they must have the following tags: handicap, par, ref, dist
        • -
        • For any mapping assistance or issues, please file in the official - repo
        • -
        - Example Course -
        - From 2e8744ca22f42d699792a786e58eb3ed532caa94 Mon Sep 17 00:00:00 2001 From: sir-indy <53864146+sir-indy@users.noreply.github.com> Date: Sun, 1 May 2022 18:02:15 +0100 Subject: [PATCH 124/509] Move changes to smpltmr --- apps/smpltmr/ChangeLog | 3 +- apps/smpltmr/README.md | 15 +- apps/smpltmr/app.js | 255 ++++++++++++++--------- apps/smpltmr/description.png | Bin 7771 -> 0 bytes apps/smpltmr/metadata.json | 4 +- apps/timersimple/ChangeLog | 1 - apps/timersimple/README.md | 12 -- apps/timersimple/icons8-time-span-48.png | Bin 1933 -> 0 bytes apps/timersimple/metadata.json | 18 -- apps/timersimple/timersimple-scr1.png | Bin 3232 -> 0 bytes apps/timersimple/timersimple-scr2.png | Bin 3017 -> 0 bytes apps/timersimple/timersimple.app.js | 185 ---------------- apps/timersimple/timersimple.icon.js | 1 - 13 files changed, 159 insertions(+), 335 deletions(-) delete mode 100644 apps/smpltmr/description.png delete mode 100644 apps/timersimple/ChangeLog delete mode 100644 apps/timersimple/README.md delete mode 100644 apps/timersimple/icons8-time-span-48.png delete mode 100644 apps/timersimple/metadata.json delete mode 100644 apps/timersimple/timersimple-scr1.png delete mode 100644 apps/timersimple/timersimple-scr2.png delete mode 100644 apps/timersimple/timersimple.app.js delete mode 100644 apps/timersimple/timersimple.icon.js diff --git a/apps/smpltmr/ChangeLog b/apps/smpltmr/ChangeLog index 07afedd21..bf128e2fb 100644 --- a/apps/smpltmr/ChangeLog +++ b/apps/smpltmr/ChangeLog @@ -1 +1,2 @@ -0.01: Release \ No newline at end of file +0.01: Release +0.02: Rewrite with new interface \ No newline at end of file diff --git a/apps/smpltmr/README.md b/apps/smpltmr/README.md index 1296166e2..2c6e6f9ab 100644 --- a/apps/smpltmr/README.md +++ b/apps/smpltmr/README.md @@ -1,21 +1,12 @@ # Simple Timer -A simple app to set a timer quickly. Simply tab on top/bottom/left/right -to select the minutes and tab in the middle of the screen to start/stop -the timer. Note that this timer depends on qalarm. - -# Overview -If you open the app, you can simply control the timer -by clicking on top, bottom, left or right of the screen. -If you tab at the middle of the screen, the timer is -started / stopped. - -![](description.png) +A simple app to set a timer quickly. Drag or tap on the up and down buttons over the hour, minute or second to set the time. +This app uses the `sched` library, which allows the timer to continue to run in the background when this app is closed. # Creator [David Peer](https://github.com/peerdavid) - +[Sir Indy](https://github.com/sir-indy) # Thanks to... Time icon created by CreativeCons - Flaticon \ No newline at end of file diff --git a/apps/smpltmr/app.js b/apps/smpltmr/app.js index eb01e27d0..5f893b054 100644 --- a/apps/smpltmr/app.js +++ b/apps/smpltmr/app.js @@ -1,124 +1,173 @@ -/* - * SIMPLE TIMER - * - * Creator: David Peer - * Date: 02/2022 - */ +const secondsToTime = (s) => new Object({h:Math.floor((s/3600) % 24), m:Math.floor((s/60) % 60), s:Math.floor(s % 60)}); +const clamp = (num, min, max) => Math.min(Math.max(num, min), max); +function formatTime(s) { + var t = secondsToTime(s); + if (t.h) { + return t.h + ':' + ("0" + t.m).substr(-2) + ':' + ("0" + t.s).substr(-2); + } else { + return t.m + ':' + ("0" + t.s).substr(-2); + } +} +const timerID = "simpletimer"; Bangle.loadWidgets(); +Bangle.drawWidgets(); +var Layout = require("Layout"); +var seconds = 5 * 60; // Default to 5 minutes +var drawTimeout; +var imgArrow = Graphics.createImage(` + x + xxx + xxx + xxxxx + xxxxx + xxx xxx + xxx xxx +xxx xxx +xxx xxx +`); -const alarm = require("sched"); +const imgPause = atob("GBiBAP+B//+B//+B//+B//+B//+B//+B//+B//+B//+B//+B//+B//+B//+B//+B//+B//+B//+B//+B//+B//+B//+B//+B//+B/w=="); +const imgPlay = atob("GBiBAIAAAOAAAPgAAP4AAP+AAP/gAP/4AP/+AP//gP//4P//+P///v///v//+P//4P//gP/+AP/4AP/gAP+AAP4AAPgAAOAAAIAAAA=="); -const TIMER_IDX = "smpltmr"; -const screenWidth = g.getWidth(); -const screenHeight = g.getHeight(); -const cx = parseInt(screenWidth/2); -const cy = parseInt(screenHeight/2)-12; -var minutes = 5; -var interval; //used for the 1 second interval timer - - -function isTimerEnabled(){ - var alarmObj = alarm.getAlarm(TIMER_IDX); - if(alarmObj===undefined || !alarmObj.on){ - return false; +function onDrag(event) { + Bangle.buzz(20, 0.3); + var diff = -Math.round(event.dy/5); + if (event.x < timePickerLayout.hours.w) { + diff *= 3600; + } else if (event.x > timePickerLayout.mins.x && event.x < timePickerLayout.secs.x) { + diff *= 60; } - - return true; + updateTimePicker(diff); } -function getTimerMin(){ - var alarmObj = alarm.getAlarm(TIMER_IDX); - return Math.round(alarm.getTimeToAlarm(alarmObj)/(60*1000)); -} - -function setTimer(minutes){ - alarm.setAlarm(TIMER_IDX, { - // msg : "Simple Timer", - timer : minutes*60*1000, - }); - alarm.reload(); -} - -function deleteTimer(){ - alarm.setAlarm(TIMER_IDX, undefined); - alarm.reload(); -} - -setWatch(_=>load(), BTN1); -function draw(){ - g.clear(1); - Bangle.drawWidgets(); - - if (interval) { - clearInterval(interval); +function onTouch(button, xy) { + var touchMidpoint = timePickerLayout.hours.y + timePickerLayout.hours.h/2; + var diff = 0; + if (xy.y > 24 && xy.y < touchMidpoint - 10) { + Bangle.buzz(40, 0.3); + diff = 1; + } else if (xy.y > touchMidpoint + 10 && xy.y < timePickerLayout.btnStart.y) { + Bangle.buzz(40, 0.3); + diff = -1; + } else if (xy.y > timePickerLayout.btnStart.y) { + Bangle.buzz(40, 0.6); + runTimer(); + return; } - interval = undefined; - - // Write time - g.setFontAlign(0, 0, 0); - g.setFont("Vector", 32).setFontAlign(0,-1); - - var started = isTimerEnabled(); - var text = minutes + " min."; - if(started){ - var min = getTimerMin(); - text = min + " min."; + if (xy.x < timePickerLayout.hours.w) { + diff *= 3600; + } else if (xy.x > timePickerLayout.mins.x && xy.x < timePickerLayout.secs.x) { + diff *= 60; } + updateTimePicker(diff); +} - var rectWidth = parseInt(g.stringWidth(text) / 2); - - if(started){ - interval = setInterval(draw, 1000); - g.setColor("#ff0000"); +function onButton() { + var timeToNext = require("sched").getTimeToAlarm(require("sched").getAlarm(timerID)); + g.clearRect(Bangle.appRect); + if (timeToNext != undefined) { + runTimer(); } else { - g.setColor(g.theme.fg); + runTimePicker(); } - g.fillRect(cx-rectWidth-5, cy-5, cx+rectWidth, cy+30); - - g.setColor(g.theme.bg); - g.drawString(text, cx, cy); } +function updateTimePicker(diff) { + seconds = clamp(seconds + (diff || 0), 0, 24 * 3600 - 1); + var set_time = secondsToTime(seconds); + updateLayoutField(timePickerLayout, 'hours', set_time.h); + updateLayoutField(timePickerLayout, 'mins', set_time.m); + updateLayoutField(timePickerLayout, 'secs', set_time.s); +} -Bangle.on('touch', function(btn, e){ - var left = parseInt(g.getWidth() * 0.25); - var right = g.getWidth() - left; - var upper = parseInt(g.getHeight() * 0.25); - var lower = g.getHeight() - upper; +function updateLayoutField(layout, field, value) { + layout.clear(layout[field]); + layout[field].label = value; + layout.render(layout[field]); +} - var isLeft = e.x < left; - var isRight = e.x > right; - var isUpper = e.y < upper; - var isLower = e.y > lower; - var isMiddle = !isLeft && !isRight && !isUpper && !isLower; - var started = isTimerEnabled(); +function updateTimer() { + var timeToNext = require("sched").getTimeToAlarm(require("sched").getAlarm(timerID)); + updateLayoutField(timerLayout, 'timer', formatTime(timeToNext / 1000)); + queueDraw(1000); +} - if(isRight && !started){ - minutes += 1; - Bangle.buzz(40, 0.3); - } else if(isLeft && !started){ - minutes -= 1; - Bangle.buzz(40, 0.3); - } else if(isUpper && !started){ - minutes += 5; - Bangle.buzz(40, 0.3); - } else if(isLower && !started){ - minutes -= 5; - Bangle.buzz(40, 0.3); - } else if(isMiddle) { - if(!started){ - setTimer(minutes); - } else { - deleteTimer(); - } - Bangle.buzz(80, 0.6); - } - minutes = Math.max(0, minutes); +function queueDraw(millisecs) { + if (drawTimeout) clearTimeout(drawTimeout); + drawTimeout = setTimeout(function() { + drawTimeout = undefined; + updateTimer(); + }, millisecs - (Date.now() % millisecs)); +} - draw(); +function timerStop() { + if (drawTimeout) clearTimeout(drawTimeout); + drawTimeout = undefined; + seconds = require("sched").getTimeToAlarm(require("sched").getAlarm(timerID)) / 1000; + require("sched").setAlarm(timerID, undefined); + require("sched").reload(); + runTimePicker(); +} + +function runTimePicker() { + g.clearRect(Bangle.appRect); + Bangle.setUI({ + mode : "custom", + touch : function(n,e) {onTouch(n,e);}, + drag : function(e) {onDrag(e);}, + btn : function(n) {onButton();}, + }); + timePickerLayout.render(); + updateTimePicker(); + //timePickerLayout.debug(); +} + +function runTimer() { + require("sched").setAlarm(timerID, { + vibrate : ".-.-", + hidden: true, + timer : seconds * 1000 + }); + require("sched").reload(); + g.clearRect(Bangle.appRect); + timerLayout.render(); + updateTimer(); +} + +var timePickerLayout = new Layout({ + type:"v", c: [ + {type:undefined, height:2}, + {type:"h", c: [ + {type:"v", width:g.getWidth()/3, c: [ + {type:"txt", font:"6x8", label:/*LANG*/"Hours", col:g.theme.fg2}, + {type:"img", pad:8, src:imgArrow, col:g.theme.fg2}, + {type:"txt", font:"20%", label:"00", id:"hours", filly:1, fillx:1}, + {type:"img", pad:8, src:imgArrow, col:g.theme.fg2, r:2} + ]}, + {type:"v", width:g.getWidth()/3, c: [ + {type:"txt", font:"6x8", label:/*LANG*/"Minutes", col:g.theme.fg2}, + {type:"img", pad:8, src:imgArrow, col:g.theme.fg2}, + {type:"txt", font:"20%", label:"00", id:"mins", filly:1, fillx:1}, + {type:"img", pad:8, src:imgArrow, col:g.theme.fg2, r:2} + ]}, + {type:"v", width:g.getWidth()/3, c: [ + {type:"txt", font:"6x8", label:/*LANG*/"Seconds", col:g.theme.fg2}, + {type:"img", pad:8, src:imgArrow, col:g.theme.fg2}, + {type:"txt", font:"20%", label:"00", id:"secs", filly:1, fillx:1}, + {type:"img", pad:8, src:imgArrow, col:g.theme.fg2, r:2} + ]}, + ]}, + {type:"btn", src:imgPlay, id:"btnStart", fillx:1 } + ], filly:1 }); -g.reset(); -draw(); \ No newline at end of file +var timerLayout = new Layout({ + type:"v", c: [ + {type:"txt", font:"22%", label:"0:00", id:"timer", fillx:1, filly:1 }, + {type:"btn", src:imgPause, cb: l=>timerStop(), fillx:1 } + ], filly:1 +}); + +onButton(); \ No newline at end of file diff --git a/apps/smpltmr/description.png b/apps/smpltmr/description.png deleted file mode 100644 index 1286d1ab94e56658995ba8dabe08bfc7dea51bc6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7771 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 SWZ<+Iq^bmYRH|V9`ab}V`IlM% diff --git a/apps/smpltmr/metadata.json b/apps/smpltmr/metadata.json index 06bad962d..ee5c7ce9b 100644 --- a/apps/smpltmr/metadata.json +++ b/apps/smpltmr/metadata.json @@ -2,10 +2,10 @@ "id": "smpltmr", "name": "Simple Timer", "shortName": "Simple Timer", - "version": "0.01", + "version": "0.02", "description": "A very simple app to start a timer.", "icon": "app.png", - "tags": "tool", + "tags": "tool,alarm,timer", "dependencies": {"scheduler":"type"}, "supports": ["BANGLEJS2"], "screenshots": [{"url":"screenshot.png"}, {"url": "screenshot_2.png"}], diff --git a/apps/timersimple/ChangeLog b/apps/timersimple/ChangeLog deleted file mode 100644 index 7b83706bf..000000000 --- a/apps/timersimple/ChangeLog +++ /dev/null @@ -1 +0,0 @@ -0.01: First release diff --git a/apps/timersimple/README.md b/apps/timersimple/README.md deleted file mode 100644 index 894a46e7a..000000000 --- a/apps/timersimple/README.md +++ /dev/null @@ -1,12 +0,0 @@ -# Simple Timer - -TESTING - DO NOT INSTALL, MAY BE BROKEN - -Does one thing well. Set a time in hours, minutes and seconds, and alerts you when time is up. Opening the app while the timer is running (or just leaving the app open) shows how much time is left on the timer. This is the part I felt was missing from the Alarms and Timer app. - -Drag or tap on the up and down buttons over the hour, minute or second to set the time. - -![](timersimple-scr1.png) -![](timersimple-scr2.png) - -Written by: [Sir Indy](https://github.com/sir-indy) For support and discussion please post in the [Bangle JS Forum](http://forum.espruino.com/microcosms/1424/) diff --git a/apps/timersimple/icons8-time-span-48.png b/apps/timersimple/icons8-time-span-48.png deleted file mode 100644 index 9a9dfb6abd1801997481d40bd41e475afe845f1a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1933 zcmV;82Xgp{P)}f;`d3 z{4|bF%roc{(>PYg>)2T4uNQwW0+8Ygn zw6{|X*_#deBv!4>$$!2UDtwRtR+g1(ggqUDi`B3w1D||bZ8oxLjVqIK^H_${Y^z~l z4qgh>@{lV8OUG!WT9`-!KJBimUYE47XSH$tg5tx3jsS-xFyB^uwzDMC;IL=l!y5-< z9+954uQIM*AISi#lMCP$CvkuJ4u)O*aEx9--^e9+r0Ecf=!uc#t|RYnvWwyLAC`go z?%yS^GUR=enP|!kU-~Re#w|gd=<}d^s2vxspT^kKkXqR19O8=wOG^ls-(f)m?_4{g zFW`RgpNxbx8DS|_K+V7$d{n|$jx%WMJqbznDr)IjZYFiFu&+^B5r751fyc1Hwpj5C zfh8P%XxfioJo9HP)2AqE$&bX?v9}lML({h39gzCC-!JN^E^y&m@Z=oN4bkCgbVMQwY= z*zAbfFN;ZmOl8~{`+A-uz>|e9nCd!CJ0_IvRcAnwn3n+P0ASKRj=tMAtW3&7f<7H2 zI>#qXY|Z(Z@>SCLAit>AHpqY=2n+~H{kd(AmO#hGAuWClRwX@&1bsTFOrxvX4>~Ru zJ95hcI0}>%e^MOu#snGg6E*WLM0JofT47ge>o>5KdAF#$Bv=7xfvTbZp6TV6R*5nj$K=3XG9ERMqDlz z>g(%q>((vJb~&kmV-sNE8K6L}e|dR=DX3#Y2rL#0Y&IL3o12lJpO1k7CtiQ`D4u(! z6ixMQkfp%o_x}C+sH>~PzJ2?UnVE?L2M(a2p+VC?#n0qV=B z!M~vA;xz{W0ES^;u~^XA*$J!F3bWaakvk(Ot9l%zZ?1#gZigs}U>F8lw{AsMRTZvX zyM_}dPH6V4=Yz&xrX-?rBbfukFeoi8MM+5s($muc3Q(Csuh*lxx*EmB#aOW-=&3FV zY6d0&%kx24*)GTc-?{xVK<8gx zuQY?JL+Ac4BDK&x)CR9K<4+B+o!jinc50_lnSj*$a~H0khL1+~tfK{=Ea80rX$4E_ z)l!kF_W_obYXHn=1IDI?@Rj3CbX98LOGhKdrvnxo4+X7JYpZHN*wZmcfm(mAt@k9H z<2}(+83NAn9-Qkt6~Iy8gGx)gY62^OsT7&SwJ%$GR z8<6CH6YUreIpm!qk|9-Y~btXXO?+BBgadZuyMRxK!B*jK2-{l-V))ssgCmz0~7A7~9{puZA!bcD6>M4aR)Z`rw@fW8YLWV&yWxJwCsS^1Op#z=x9{zFq~ zY5UkGlC_kO_W*bzjaPw(0`GD>zcy0wz!HD*mA4dTF~Ca{v=ksKBa5a^fU#20noyfm zIEc<~RzYCIg7cdI6#g&uVFr+e@9x)=00sf{fxt#&($02nvq$4M>q9)m_Z|NQLRok` Trm{7g00000NkvXXu0mjfz&ofF diff --git a/apps/timersimple/metadata.json b/apps/timersimple/metadata.json deleted file mode 100644 index 5d0e5d5e4..000000000 --- a/apps/timersimple/metadata.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "id":"timersimple", - "name":"Timer Simple", - "shortName": "Timer Simple", - "version": "0.01", - "description": "Sets a single timer, and tells you how long left.", - "readme": "README.md", - "icon":"icons8-time-span-48.png", - "screenshots": [{"url":"timersimple-scr1.png"},{"url":"timersimple-scr2.png"}], - "tags": "tool,alarm,timer", - "supports": ["BANGLEJS2"], - "dependencies": {"scheduler":"type"}, - "allow_emulator": true, - "storage": [ - {"name":"timersimple.app.js","url":"timersimple.app.js"}, - {"name":"timersimple.img","url":"timersimple.icon.js","evaluate":true} - ] - } \ No newline at end of file diff --git a/apps/timersimple/timersimple-scr1.png b/apps/timersimple/timersimple-scr1.png deleted file mode 100644 index 5556f8ecc0f2b0c0e343e144f53b2a90741e55c3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3232 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 diff --git a/apps/timersimple/timersimple.app.js b/apps/timersimple/timersimple.app.js deleted file mode 100644 index 1c775b908..000000000 --- a/apps/timersimple/timersimple.app.js +++ /dev/null @@ -1,185 +0,0 @@ -const secondsToTime = (s) => new Object({h:Math.floor((s/3600) % 24), m:Math.floor((s/60) % 60), s:Math.floor(s % 60)}); -const clamp = (num, min, max) => Math.min(Math.max(num, min), max); -function formatTime(s) { - var t = secondsToTime(s); - if (t.h) { - return t.h + ':' + ("0" + t.m).substr(-2) + ':' + ("0" + t.s).substr(-2); - } else { - return t.m + ':' + ("0" + t.s).substr(-2); - } -} -const timerID = "simpletimer"; - -Bangle.loadWidgets(); -Bangle.drawWidgets(); - -var Layout = require("Layout"); -var seconds = 5 * 60; // Default to 5 minutes -var drawTimeout; -var timerLayout; -var timePickerLayout; -var imgArrow = Graphics.createImage(` - x - xxx - xxx - xxxxx - xxxxx - xxx xxx - xxx xxx -xxx xxx -xxx xxx -`); - -const imgPause = atob("GBiBAP+B//+B//+B//+B//+B//+B//+B//+B//+B//+B//+B//+B//+B//+B//+B//+B//+B//+B//+B//+B//+B//+B//+B//+B/w=="); -const imgPlay = atob("GBiBAIAAAOAAAPgAAP4AAP+AAP/gAP/4AP/+AP//gP//4P//+P///v///v//+P//4P//gP/+AP/4AP/gAP+AAP4AAPgAAOAAAIAAAA=="); - -function onDrag(event) { - Bangle.buzz(20, 0.3); - var diff = -Math.round(event.dy/5); - if (event.x < timePickerLayout.hours.w) { - diff *= 3600; - } else if (event.x > timePickerLayout.mins.x && event.x < timePickerLayout.secs.x) { - diff *= 60; - } - updateTimePicker(diff); -} - -function onTouch(button, xy) { - var touchMidpoint = timePickerLayout.hours.y + timePickerLayout.hours.h/2; - var diff = 0; - if (xy.y > 24 && xy.y < touchMidpoint - 10) { - Bangle.buzz(40, 0.3); - diff = 1; - } else if (xy.y > touchMidpoint + 10 && xy.y < timePickerLayout.btnStart.y) { - Bangle.buzz(40, 0.3); - diff = -1; - } else if (xy.y > timePickerLayout.btnStart.y) { - Bangle.buzz(40, 0.6); - runTimer(); - return; - } - if (xy.x < timePickerLayout.hours.w) { - diff *= 3600; - } else if (xy.x > timePickerLayout.mins.x && xy.x < timePickerLayout.secs.x) { - diff *= 60; - } - updateTimePicker(diff); -} - -function updateTimePicker(diff) { - seconds = clamp(seconds + (diff || 0), 0, 24 * 3600 - 1); - var set_time = secondsToTime(seconds); - updateLayoutField(timePickerLayout, 'hours', set_time.h); - updateLayoutField(timePickerLayout, 'mins', set_time.m); - updateLayoutField(timePickerLayout, 'secs', set_time.s); -} - -function updateLayoutField(layout, field, value) { - layout.clear(layout[field]); - layout[field].label = value; - layout.render(layout[field]); -} - -function updateTimer() { - var timeToNext = require("sched").getTimeToAlarm(require("sched").getAlarm(timerID)); - updateLayoutField(timerLayout, 'timer', formatTime(timeToNext / 1000)); - //var d = new Date(); - //updateLayoutField(timerLayout, 'time', require("locale").time(d,1)); - queueDraw(1000); -} - -function queueDraw(millisecs) { - if (drawTimeout) clearTimeout(drawTimeout); - drawTimeout = setTimeout(function() { - drawTimeout = undefined; - updateTimer(); - }, millisecs - (Date.now() % millisecs)); -} - -function timerStop() { - if (drawTimeout) clearTimeout(drawTimeout); - drawTimeout = undefined; - seconds = require("sched").getTimeToAlarm(require("sched").getAlarm(timerID)) / 1000; - require("sched").setAlarm(timerID, undefined); - require("sched").reload(); - runTimePicker(); -} - -var timePickerLayoutCode = { - type:"v", c: [ - {type:undefined, height:2}, - //{type:"txt", font:"15%", label:"TIMER", id:"title"}, - {type:"h", c: [ - {type:"v", width:g.getWidth()/3, c: [ - {type:"txt", font:"6x8", label:/*LANG*/"Hours", col:g.theme.fg2}, - {type:"img", pad:8, src:imgArrow, col:g.theme.fg2}, - {type:"txt", font:"20%", label:"00", id:"hours", filly:1, fillx:1}, - {type:"img", pad:8, src:imgArrow, col:g.theme.fg2, r:2} - ]}, - {type:"v", width:g.getWidth()/3, c: [ - {type:"txt", font:"6x8", label:/*LANG*/"Minutes", col:g.theme.fg2}, - {type:"img", pad:8, src:imgArrow, col:g.theme.fg2}, - {type:"txt", font:"20%", label:"00", id:"mins", filly:1, fillx:1}, - {type:"img", pad:8, src:imgArrow, col:g.theme.fg2, r:2} - ]}, - {type:"v", width:g.getWidth()/3, c: [ - {type:"txt", font:"6x8", label:/*LANG*/"Seconds", col:g.theme.fg2}, - {type:"img", pad:8, src:imgArrow, col:g.theme.fg2}, - {type:"txt", font:"20%", label:"00", id:"secs", filly:1, fillx:1}, - {type:"img", pad:8, src:imgArrow, col:g.theme.fg2, r:2} - ]}, - ]}, - {type:"btn", src:imgPlay, id:"btnStart", fillx:1 } - //{type:"btn", label:'Start', font:"20%", id:"btnStart", fillx:0 } - ], filly:1 -}; - -var timerLayoutCode = { - type:"v", c: [ - {type:undefined, height:8}, - //{type:"txt", font:"6x8", label:/*LANG*/"Timer", id:"title", col:g.theme.fg2}, - {type:"txt", font:"22%", label:"0:00", id:"timer", fillx:1, filly:1 }, - //{type:"h", c: [ - // {type:"txt", font:"6x8", pad:8, label:/*LANG*/"Time Now:", halign:-1, col:g.theme.fg2}, - // {type:"txt", font:"6x8", label:"00:00", id:"time", halign:1, col:g.theme.fg2}, - //]}, - {type:"btn", src:imgPause, cb: l=>timerStop(), fillx:1 } - ], filly:1 -}; - -function runTimePicker() { - g.clearRect(Bangle.appRect); - timePickerLayout = new Layout(timePickerLayoutCode); - Bangle.setUI({ - mode : "custom", - touch : function(n,e) {onTouch(n,e);}, - drag : function(e) {onDrag(e);}, - btn : function(n) {runTimer();}, - }); - timePickerLayout.render(); - updateTimePicker(); - //timePickerLayout.debug(); -} - -function runTimer() { - require("sched").setAlarm(timerID, { - vibrate : ".-.-", - hidden: true, - timer : seconds * 1000 - }); - require("sched").reload(); - g.clearRect(Bangle.appRect); - timerLayout = new Layout(timerLayoutCode); - timerLayout.render(); - updateTimer(); -} - -var timeToNext = require("sched").getTimeToAlarm(require("sched").getAlarm(timerID)); -if (timeToNext != undefined) { - g.clearRect(Bangle.appRect); - timerLayout = new Layout(timerLayoutCode); - timerLayout.render(); - updateTimer(); -} else { - runTimePicker(); -} diff --git a/apps/timersimple/timersimple.icon.js b/apps/timersimple/timersimple.icon.js deleted file mode 100644 index cd40303a0..000000000 --- a/apps/timersimple/timersimple.icon.js +++ /dev/null @@ -1 +0,0 @@ -require("heatshrink").decompress(atob("mEwwcBkmSpIC/ARf//9JkQRMCAIRBAwIRKv4RFpARIz4QCCIdJiREJAAgJCCI0nCI3+BgOJCIs/CI3/9MkyJoIAAxuGp4RJ8gRQ/mSogRDu4RJNwKSEqXfCJPSCImSrYRJ+SkEyVfCJP6CIo1B4wRHUgIREA4MAj4SHCIeUCIP//EAt4RHkQRF//ggIDB+EHCJf/wEAAAQRM/0CoAmCCJf/4VDI5pcCNwoRKNZ4RMUIQRLYowAIYozpRrYRJ+QREqVLCJPSpGSCIdJv5GIyQREpVJfA///mSogRDpNJloRH8mSBwQRDku/CIwMBCIspkmXCAvpkmRCIslAYKkETwMkxIRFkmkyVLNwYJCBwgCDAwyeEAQqSBAwiMEAQwGFBxACDygDBkQOKAX4CD")) \ No newline at end of file From eca76d78ba51126342855cda72a486b68f05814d Mon Sep 17 00:00:00 2001 From: sir-indy <53864146+sir-indy@users.noreply.github.com> Date: Sun, 1 May 2022 18:11:00 +0100 Subject: [PATCH 125/509] Update to button press --- apps/smpltmr/app.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/smpltmr/app.js b/apps/smpltmr/app.js index 5f893b054..25a11361b 100644 --- a/apps/smpltmr/app.js +++ b/apps/smpltmr/app.js @@ -53,7 +53,7 @@ function onTouch(button, xy) { diff = -1; } else if (xy.y > timePickerLayout.btnStart.y) { Bangle.buzz(40, 0.6); - runTimer(); + onButton(); return; } if (xy.x < timePickerLayout.hours.w) { From d42afd7f9e00efb9cad0de517075e918c099d1a0 Mon Sep 17 00:00:00 2001 From: sir-indy <53864146+sir-indy@users.noreply.github.com> Date: Sun, 1 May 2022 18:20:59 +0100 Subject: [PATCH 126/509] Tweak to button --- apps/smpltmr/app.js | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/apps/smpltmr/app.js b/apps/smpltmr/app.js index 25a11361b..72cb3b387 100644 --- a/apps/smpltmr/app.js +++ b/apps/smpltmr/app.js @@ -68,9 +68,9 @@ function onButton() { var timeToNext = require("sched").getTimeToAlarm(require("sched").getAlarm(timerID)); g.clearRect(Bangle.appRect); if (timeToNext != undefined) { - runTimer(); + timerRun(); } else { - runTimePicker(); + timerStop(); } } @@ -102,15 +102,6 @@ function queueDraw(millisecs) { }, millisecs - (Date.now() % millisecs)); } -function timerStop() { - if (drawTimeout) clearTimeout(drawTimeout); - drawTimeout = undefined; - seconds = require("sched").getTimeToAlarm(require("sched").getAlarm(timerID)) / 1000; - require("sched").setAlarm(timerID, undefined); - require("sched").reload(); - runTimePicker(); -} - function runTimePicker() { g.clearRect(Bangle.appRect); Bangle.setUI({ @@ -124,7 +115,7 @@ function runTimePicker() { //timePickerLayout.debug(); } -function runTimer() { +function timerRun() { require("sched").setAlarm(timerID, { vibrate : ".-.-", hidden: true, @@ -136,6 +127,15 @@ function runTimer() { updateTimer(); } +function timerStop() { + if (drawTimeout) clearTimeout(drawTimeout); + drawTimeout = undefined; + seconds = require("sched").getTimeToAlarm(require("sched").getAlarm(timerID)) / 1000; + require("sched").setAlarm(timerID, undefined); + require("sched").reload(); + runTimePicker(); +} + var timePickerLayout = new Layout({ type:"v", c: [ {type:undefined, height:2}, From ea0d17afebceefdc5fb8402cc6935522f6e3e5d6 Mon Sep 17 00:00:00 2001 From: sir-indy <53864146+sir-indy@users.noreply.github.com> Date: Sun, 1 May 2022 18:25:55 +0100 Subject: [PATCH 127/509] Fix start time --- apps/smpltmr/app.js | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/apps/smpltmr/app.js b/apps/smpltmr/app.js index 72cb3b387..27cbe52c4 100644 --- a/apps/smpltmr/app.js +++ b/apps/smpltmr/app.js @@ -130,7 +130,10 @@ function timerRun() { function timerStop() { if (drawTimeout) clearTimeout(drawTimeout); drawTimeout = undefined; - seconds = require("sched").getTimeToAlarm(require("sched").getAlarm(timerID)) / 1000; + var timeToNext = require("sched").getTimeToAlarm(require("sched").getAlarm(timerID)); + if (timeToNext != undefined) { + seconds = timeToNext / 1000; + } require("sched").setAlarm(timerID, undefined); require("sched").reload(); runTimePicker(); From 4ee8b843bee607fa255b53b3c1f1d071d0ab00c6 Mon Sep 17 00:00:00 2001 From: sir-indy <53864146+sir-indy@users.noreply.github.com> Date: Sun, 1 May 2022 18:38:49 +0100 Subject: [PATCH 128/509] Update to select running mode --- apps/smpltmr/app.js | 25 ++++++++++++++----------- 1 file changed, 14 insertions(+), 11 deletions(-) diff --git a/apps/smpltmr/app.js b/apps/smpltmr/app.js index 27cbe52c4..7bee1ad20 100644 --- a/apps/smpltmr/app.js +++ b/apps/smpltmr/app.js @@ -16,6 +16,7 @@ Bangle.drawWidgets(); var Layout = require("Layout"); var seconds = 5 * 60; // Default to 5 minutes var drawTimeout; +var timerRunning = False; var imgArrow = Graphics.createImage(` x xxx @@ -32,7 +33,7 @@ const imgPause = atob("GBiBAP+B//+B//+B//+B//+B//+B//+B//+B//+B//+B//+B//+B//+B/ const imgPlay = atob("GBiBAIAAAOAAAPgAAP4AAP+AAP/gAP/4AP/+AP//gP//4P//+P///v///v//+P//4P//gP/+AP/4AP/gAP+AAP4AAPgAAOAAAIAAAA=="); function onDrag(event) { - Bangle.buzz(20, 0.3); + Bangle.buzz(40, 0.3); var diff = -Math.round(event.dy/5); if (event.x < timePickerLayout.hours.w) { diff *= 3600; @@ -65,12 +66,11 @@ function onTouch(button, xy) { } function onButton() { - var timeToNext = require("sched").getTimeToAlarm(require("sched").getAlarm(timerID)); g.clearRect(Bangle.appRect); - if (timeToNext != undefined) { - timerRun(); - } else { + if (timerRunning) { timerStop(); + } else { + timerRun(); } } @@ -82,12 +82,6 @@ function updateTimePicker(diff) { updateLayoutField(timePickerLayout, 'secs', set_time.s); } -function updateLayoutField(layout, field, value) { - layout.clear(layout[field]); - layout[field].label = value; - layout.render(layout[field]); -} - function updateTimer() { var timeToNext = require("sched").getTimeToAlarm(require("sched").getAlarm(timerID)); updateLayoutField(timerLayout, 'timer', formatTime(timeToNext / 1000)); @@ -173,4 +167,13 @@ var timerLayout = new Layout({ ], filly:1 }); +function updateLayoutField(layout, field, value) { + layout.clear(layout[field]); + layout[field].label = value; + layout.render(layout[field]); +} + +if (require("sched").getTimeToAlarm(require("sched").getAlarm(timerID)) != undefined) { + timerRunning = True; +} onButton(); \ No newline at end of file From cebdf1453c7975e1ba1d124e0777a33f9492a878 Mon Sep 17 00:00:00 2001 From: sir-indy <53864146+sir-indy@users.noreply.github.com> Date: Sun, 1 May 2022 18:45:52 +0100 Subject: [PATCH 129/509] True False to true false --- apps/smpltmr/app.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/smpltmr/app.js b/apps/smpltmr/app.js index 7bee1ad20..350c2f5d8 100644 --- a/apps/smpltmr/app.js +++ b/apps/smpltmr/app.js @@ -16,7 +16,7 @@ Bangle.drawWidgets(); var Layout = require("Layout"); var seconds = 5 * 60; // Default to 5 minutes var drawTimeout; -var timerRunning = False; +var timerRunning = false; var imgArrow = Graphics.createImage(` x xxx @@ -174,6 +174,6 @@ function updateLayoutField(layout, field, value) { } if (require("sched").getTimeToAlarm(require("sched").getAlarm(timerID)) != undefined) { - timerRunning = True; + timerRunning = true; } onButton(); \ No newline at end of file From bbb4a92383b65cecc75d7a6b6fd50e113431f2f8 Mon Sep 17 00:00:00 2001 From: sir-indy <53864146+sir-indy@users.noreply.github.com> Date: Sun, 1 May 2022 20:58:10 +0100 Subject: [PATCH 130/509] Set timer running properly --- apps/smpltmr/app.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/apps/smpltmr/app.js b/apps/smpltmr/app.js index 350c2f5d8..502891c6a 100644 --- a/apps/smpltmr/app.js +++ b/apps/smpltmr/app.js @@ -68,8 +68,10 @@ function onTouch(button, xy) { function onButton() { g.clearRect(Bangle.appRect); if (timerRunning) { + timerRunning = false; timerStop(); } else { + timerRunning = true; timerRun(); } } From 73f976c86bcd8ff7c64d48e71275b30109638ee2 Mon Sep 17 00:00:00 2001 From: Erik Andresen Date: Sun, 1 May 2022 22:22:52 +0200 Subject: [PATCH 131/509] gpsautotime: Add setting to hide the widget --- apps/gpsautotime/ChangeLog | 1 + apps/gpsautotime/metadata.json | 8 +++++--- apps/gpsautotime/widget.js | 20 +++++++++++++++----- 3 files changed, 21 insertions(+), 8 deletions(-) diff --git a/apps/gpsautotime/ChangeLog b/apps/gpsautotime/ChangeLog index 2827c9e5c..97b80ecdf 100644 --- a/apps/gpsautotime/ChangeLog +++ b/apps/gpsautotime/ChangeLog @@ -1,2 +1,3 @@ 0.01: New App! 0.02: Set Bangle.js 2 compatible +0.03: Add setting to hide the widget diff --git a/apps/gpsautotime/metadata.json b/apps/gpsautotime/metadata.json index 766961276..217a27931 100644 --- a/apps/gpsautotime/metadata.json +++ b/apps/gpsautotime/metadata.json @@ -2,13 +2,15 @@ "id": "gpsautotime", "name": "GPS auto time", "shortName": "GPS auto time", - "version": "0.02", + "version": "0.03", "description": "A widget that automatically updates the Bangle.js time to the GPS time whenever there is a valid GPS fix.", "icon": "widget.png", "type": "widget", "tags": "widget,gps", "supports": ["BANGLEJS","BANGLEJS2"], "storage": [ - {"name":"gpsautotime.wid.js","url":"widget.js"} - ] + {"name":"gpsautotime.wid.js","url":"widget.js"}, + {"name":"gpsautotime.settings.js","url":"settings.js"} + ], + "data": [{"name":"gpsautotime.json"}] } diff --git a/apps/gpsautotime/widget.js b/apps/gpsautotime/widget.js index a1d1b2b08..a21c14619 100644 --- a/apps/gpsautotime/widget.js +++ b/apps/gpsautotime/widget.js @@ -1,6 +1,13 @@ (() => { var lastTimeSet = 0; + var settings = Object.assign({ + // default values + show: true, + }, require('Storage').readJSON("gpsautotime.json", true) || {}); + const show = settings.show; + delete settings; + Bangle.on('GPS',function(fix) { if (fix.fix) { var curTime = fix.time.getTime()/1000; @@ -14,8 +21,9 @@ // add your widget WIDGETS["gpsAutoTime"]={ area:"tl", // tl (top left), tr (top right), bl (bottom left), br (bottom right) - width: 28, // width of the widget + width: show ? 4*6+2 : 0, // width of the widget draw: function() { + if (!show) return; g.reset(); // reset the graphics context to defaults (color/font/etc) g.setFont("6x8"); if ((getTime() - lastTimeSet) <= 60) { @@ -27,7 +35,9 @@ } }; - setInterval(function() { - WIDGETS["gpsAutoTime"].draw(WIDGETS["gpsAutoTime"]); - }, 1*60000); // update every minute -})() + if (show) { + setInterval(function() { + WIDGETS["gpsAutoTime"].draw(WIDGETS["gpsAutoTime"]); + }, 1*60000); // update every minute + } +})(); From 7c0b0e978b78b6ad625c572369a958ffb81ec444 Mon Sep 17 00:00:00 2001 From: Erik Andresen Date: Sun, 1 May 2022 22:24:29 +0200 Subject: [PATCH 132/509] sleepphasealarm: check for day of week --- apps/sleepphasealarm/ChangeLog | 1 + apps/sleepphasealarm/README.md | 2 ++ apps/sleepphasealarm/app.js | 8 +++++--- apps/sleepphasealarm/metadata.json | 2 +- 4 files changed, 9 insertions(+), 4 deletions(-) diff --git a/apps/sleepphasealarm/ChangeLog b/apps/sleepphasealarm/ChangeLog index 53c993376..ec3fe3a23 100644 --- a/apps/sleepphasealarm/ChangeLog +++ b/apps/sleepphasealarm/ChangeLog @@ -5,3 +5,4 @@ 0.05: Refactor decodeTime() to scheduling library 0.06: Add logging use Layout library and display ETA +0.07: Add check for day of week diff --git a/apps/sleepphasealarm/README.md b/apps/sleepphasealarm/README.md index 04388194f..c33c9c807 100644 --- a/apps/sleepphasealarm/README.md +++ b/apps/sleepphasealarm/README.md @@ -1,5 +1,7 @@ # Sleep Phase Alarm +The alarm must be in the next 24h. + The display shows: - the current time diff --git a/apps/sleepphasealarm/app.js b/apps/sleepphasealarm/app.js index 9bde85452..8ccd43eb2 100644 --- a/apps/sleepphasealarm/app.js +++ b/apps/sleepphasealarm/app.js @@ -51,8 +51,10 @@ active.forEach(alarm => { if (dateAlarm < now) { // dateAlarm in the past, add 24h dateAlarm.setTime(dateAlarm.getTime() + (24*60*60*1000)); } - if (nextAlarm === undefined || dateAlarm < nextAlarm) { - nextAlarm = dateAlarm; + if ((alarm.dow >> dateAlarm.getDay()) & 1) { // check valid day of week + if (nextAlarm === undefined || dateAlarm < nextAlarm) { + nextAlarm = dateAlarm; + } } }); @@ -80,7 +82,7 @@ function drawApp() { layout.date.label = locale.time(now, BANGLEJS2 && Bangle.isLocked() ? 1 : 0); // hide seconds on bangle 2 const diff = nextAlarm - now; const diffHour = Math.floor((diff % 86400000) / 3600000).toString(); - const diffMinutes = Math.round(((diff % 86400000) % 3600000) / 60000).toString(); + const diffMinutes = Math.floor(((diff % 86400000) % 3600000) / 60000).toString(); layout.eta.label = "ETA: -"+ diffHour + ":" + diffMinutes.padStart(2, '0'); layout.render(); } diff --git a/apps/sleepphasealarm/metadata.json b/apps/sleepphasealarm/metadata.json index f55854f35..d74590704 100644 --- a/apps/sleepphasealarm/metadata.json +++ b/apps/sleepphasealarm/metadata.json @@ -2,7 +2,7 @@ "id": "sleepphasealarm", "name": "SleepPhaseAlarm", "shortName": "SleepPhaseAlarm", - "version": "0.06", + "version": "0.07", "description": "Uses the accelerometer to estimate sleep and wake states with the principle of Estimation of Stationary Sleep-segments (ESS, see https://ubicomp.eti.uni-siegen.de/home/datasets/ichi14/index.html.en). This app will read the next alarm from the alarm application and will wake you up to 30 minutes early at the best guessed time when you are almost already awake.", "icon": "app.png", "tags": "alarm", From cfb737e1c0c49ee7929d259a8a555698d8a3a254 Mon Sep 17 00:00:00 2001 From: thyttan <97237430+thyttan@users.noreply.github.com> Date: Mon, 2 May 2022 01:36:24 +0200 Subject: [PATCH 133/509] kbtouch v0.02 - introduce settings for layout... ...and functionality. --- apps/kbtouch/ChangeLog | 1 + apps/kbtouch/README.md | 11 ++++++ apps/kbtouch/lib.js | 81 ++++++++++++++++++++++++++++---------- apps/kbtouch/metadata.json | 5 ++- apps/kbtouch/settings.js | 59 +++++++++++++++++++++++++++ 5 files changed, 135 insertions(+), 22 deletions(-) create mode 100644 apps/kbtouch/settings.js diff --git a/apps/kbtouch/ChangeLog b/apps/kbtouch/ChangeLog index 5560f00bc..17e824c00 100644 --- a/apps/kbtouch/ChangeLog +++ b/apps/kbtouch/ChangeLog @@ -1 +1,2 @@ 0.01: New App! +0.02: Introduced settings to customize the layout and functionality of the keyboard. diff --git a/apps/kbtouch/README.md b/apps/kbtouch/README.md index 513ba9239..07188ff0c 100644 --- a/apps/kbtouch/README.md +++ b/apps/kbtouch/README.md @@ -2,6 +2,17 @@ A library that provides an on-screen keyboard for text input. +## Settings ( -> Apps -> kbtouch ) +Text size - small or big text font. Default=Big. Suggested=Small. + +Offset keyboard - display the keyboard on top, making it faster to see what character you have selected. Default=No. Suggested=Yes. + +Loop around - should the keyboard highlight loop around when going past the edges? Default=Yes. Suggested=No. + +One-to-one input and release to select - should the input correspond directly to discrete areas on the screen, instead of being handled by scaled relative changes in position on swipes? Default=No. Suggested=Yes. + +Speed scaling - how much should a swipe move the highligt on the keyboard? Higher number corresponds to slower movement. Not applicable if using one-to-one input. Default=24. Suggested=15. + ## Usage In your app's metadata, add: diff --git a/apps/kbtouch/lib.js b/apps/kbtouch/lib.js index 3dfdce00c..a1c90795a 100644 --- a/apps/kbtouch/lib.js +++ b/apps/kbtouch/lib.js @@ -69,13 +69,29 @@ var KEYEXTRA = [ String.fromCharCode(27,91,53,126), // 0x84 page up String.fromCharCode(27,91,54,126), // 0x85 page down ]; + +var settings = Object.assign({ + // default values + textSize: 1, + offsetKeyboard: 0, + loopAround: 1, + oneToOne: 0, + speedScaling: 24 +}, require('Storage').readJSON("kbtouch.settings.json", true) || {}); +print(settings); + +//settings = { "textSize": 1, "offsetKeyboard": 0, "oneToOne": 1, +// "speedScaling": 15, "loopAround": 0 /*, "releaseToSelect": 0*/}; + +print(settings); // state const R = Bangle.appRect; var kbx = 0, kby = 0, kbdx = 0, kbdy = 0, kbShift = false, flashToggle = false; -const PX=12, PY=16, DRAGSCALE=24; -var xoff = 3, yoff = g.getHeight()-PY*4; +const PX=12, PY=16, DRAGSCALE=settings.speedScaling; +var xoff = 3, yoff = g.getHeight()-PY*(4+5*settings.offsetKeyboard); function draw() { + "ram"; var map = kbShift ? KEYMAPUPPER : KEYMAPLOWER; //g.drawImage(KEYIMG,0,yoff); g.reset().setFont("6x8:2"); @@ -88,9 +104,9 @@ function draw() { g.drawString(map[1],xoff,yoff+PY); g.drawString(map[2],xoff,yoff+PY*2); g.drawString(map[3],xoff,yoff+PY*3); - var l = g.setFont("6x8:4").wrapString(text+(flashToggle?"_":" "), R.w-8); - if (l.length>2) l=l.slice(-2); - g.drawString(l.join("\n"),R.x+4,R.y+4); + var l = g.setFont(settings.textSize ? "6x8:4":"6x8:2").wrapString(text+(flashToggle?"_":" "), R.w-8); + if (l.length>2+2*settings.textSize) l=l.slice(-(2+2*settings.textSize)); + g.drawString(l.join("\n"),R.x+4,R.y+4 +82*settings.offsetKeyboard); g.flip(); } @@ -104,24 +120,49 @@ function draw() { return new Promise((resolve,reject) => { Bangle.setUI({mode:"custom", drag:e=>{ - kbdx += e.dx; - kbdy += e.dy; - var dx = Math.round(kbdx/DRAGSCALE), dy = Math.round(kbdy/DRAGSCALE); - kbdx -= dx*DRAGSCALE; - kbdy -= dy*DRAGSCALE; - if (dx || dy) { - kbx = (kbx+dx+15)%15; - kby = (kby+dy+4)%4; + if (settings.oneToOne) { + kbx = Math.max(Math.min(Math.floor((e.x-16) / (6*2)) , 13) , 0); + kby = Math.max(Math.min(Math.floor((e.y-120) / (8*2)) , 4) , 0); + //print(e.y, kby, e.x, kbx); + } + + if (!settings.oneToOne) { + kbdx += e.dx; + kbdy += e.dy; + var dx = Math.round(kbdx/DRAGSCALE), dy = Math.round(kbdy/DRAGSCALE); + kbdx -= dx*DRAGSCALE; + kbdy -= dy*DRAGSCALE; + if (dx || dy) { + if (settings.loopAround) { + kbx = (kbx+dx+15)%15; + kby = (kby+dy+4)%4; + } else { + kbx = Math.max(Math.min((kbx+dx),13),0); + kby = Math.max(Math.min((kby+dy),3),0); + } + } + } + draw(); + + if (!e.b && e.y>Bangle.appRect.y && settings.oneToOne /*&& settings.releaseToSelect*/) { + var map = kbShift ? KEYMAPUPPER : KEYMAPLOWER; + var ch = map[kby][kbx]; + if (ch=="\2") kbShift=!kbShift; + else if (ch=="\b") text = text.slice(0,-1); + else text += ch; + Bangle.buzz(20); draw(); } },touch:()=>{ - var map = kbShift ? KEYMAPUPPER : KEYMAPLOWER; - var ch = map[kby][kbx]; - if (ch=="\2") kbShift=!kbShift; - else if (ch=="\b") text = text.slice(0,-1); - else text += ch; - Bangle.buzz(20); - draw(); + if ( !settings.oneToOne /*|| !settings.releaseToSelect*/) { + var map = kbShift ? KEYMAPUPPER : KEYMAPLOWER; + var ch = map[kby][kbx]; + if (ch=="\2") kbShift=!kbShift; + else if (ch=="\b") text = text.slice(0,-1); + else text += ch; + Bangle.buzz(20); + draw(); + } },back:()=>{ clearInterval(flashInterval); Bangle.setUI(); diff --git a/apps/kbtouch/metadata.json b/apps/kbtouch/metadata.json index da8b6c3c6..f6d6d5228 100644 --- a/apps/kbtouch/metadata.json +++ b/apps/kbtouch/metadata.json @@ -1,6 +1,6 @@ { "id": "kbtouch", "name": "Touch keyboard", - "version":"0.01", + "version":"0.02", "description": "A library for text input via onscreen keyboard", "icon": "app.png", "type":"textinput", @@ -9,6 +9,7 @@ "screenshots": [{"url":"screenshot.png"}], "readme": "README.md", "storage": [ - {"name":"textinput","url":"lib.js"} + {"name":"textinput","url":"lib.js"}, + {"name":"kbtouch.settings.js","url":"settings.js"} ] } diff --git a/apps/kbtouch/settings.js b/apps/kbtouch/settings.js new file mode 100644 index 000000000..871cc5d32 --- /dev/null +++ b/apps/kbtouch/settings.js @@ -0,0 +1,59 @@ +(function(back) { + function settings() { + let settings = require('Storage').readJSON("kbtouch.settings.json", true) || {}; + if (settings.textSize===undefined) settings.textSize=1; + if (settings.offsetKeyboard===undefined) settings.offsetKeyboard=0; + if (settings.loopAround===undefined) settings.loopAround=1; + if (settings.oneToOne===undefined) settings.oneToOne=0; + if (settings.speedScaling===undefined) settings.speedScaling=24; + return settings; + } + + function updateSetting(setting, value) { + let settings = require('Storage').readJSON("kbtouch.settings.json", true) || {}; + settings[setting] = value; + require('Storage').writeJSON("kbtouch.settings.json", settings); + } + + var mainmenu = { + "" : { "title" : /*LANG*/"Touch Keyboard" }, + "< Back" : back, + /*LANG*/'Text size': { + value: settings().textSize, + min: 0, max: 1, + format: v => [/*LANG*/"Small",/*LANG*/"Big"][v], + onchange: v => updateSetting("textSize", v) + }, + /*LANG*/'Offset keyboard': { + value: settings().offsetKeyboard, + min: 0, max: 1, + format: v => [/*LANG*/"No",/*LANG*/"Yes"][v], + onchange: v => updateSetting("offsetKeyboard", v) + }, + /*LANG*/'Loop around': { + value: settings().loopAround, + min: 0, max: 1, + format: v => [/*LANG*/"No",/*LANG*/"Yes"][v], + onchange: v => updateSetting("loopAround", v) + }, + /*LANG*/'One-to-one input and release to select': { + value: settings().oneToOne, + min: 0, max: 1, + format: v => [/*LANG*/"No",/*LANG*/"Yes"][v], + onchange: v => updateSetting("oneToOne", v) + }, + /*LANG*/'Speed scaling': { + value: settings().speedScaling, + min: 1, max: 24, step : 1, + format: v => v, + onchange: v => updateSetting("speedScaling", v) + } + ///*LANG*/'Release to select': { + // value: 1|settings().fontSize, + // min: 0, max: 1, + // format: v => [/*LANG*/"No",/*LANG*/"Yes"][v], + // onchange: v => updateSetting("releaseToSelect", v) + //} + }; + E.showMenu(mainmenu); +}) From d0f57e9b2fe5cb930098ac4ac9efd6ecea336132 Mon Sep 17 00:00:00 2001 From: thyttan <97237430+thyttan@users.noreply.github.com> Date: Mon, 2 May 2022 01:43:51 +0200 Subject: [PATCH 134/509] Update README.md --- apps/kbtouch/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/kbtouch/README.md b/apps/kbtouch/README.md index 07188ff0c..6bd0337a8 100644 --- a/apps/kbtouch/README.md +++ b/apps/kbtouch/README.md @@ -2,7 +2,7 @@ A library that provides an on-screen keyboard for text input. -## Settings ( -> Apps -> kbtouch ) +## Settings Text size - small or big text font. Default=Big. Suggested=Small. Offset keyboard - display the keyboard on top, making it faster to see what character you have selected. Default=No. Suggested=Yes. From d32735c6864a01570706954faca20538a1daf247 Mon Sep 17 00:00:00 2001 From: thyttan <97237430+thyttan@users.noreply.github.com> Date: Mon, 2 May 2022 02:11:27 +0200 Subject: [PATCH 135/509] Update lib.js --- apps/kbtouch/lib.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/kbtouch/lib.js b/apps/kbtouch/lib.js index a1c90795a..614fb8e96 100644 --- a/apps/kbtouch/lib.js +++ b/apps/kbtouch/lib.js @@ -122,7 +122,7 @@ function draw() { Bangle.setUI({mode:"custom", drag:e=>{ if (settings.oneToOne) { kbx = Math.max(Math.min(Math.floor((e.x-16) / (6*2)) , 13) , 0); - kby = Math.max(Math.min(Math.floor((e.y-120) / (8*2)) , 4) , 0); + kby = Math.max(Math.min(Math.floor((e.y-120) / (8*2)) , 3) , 0); //print(e.y, kby, e.x, kbx); } From 0f47f917467dc989d1d4047c745f56fe06039d49 Mon Sep 17 00:00:00 2001 From: thyttan <97237430+thyttan@users.noreply.github.com> Date: Mon, 2 May 2022 02:13:38 +0200 Subject: [PATCH 136/509] Update lib.js --- apps/kbtouch/lib.js | 5 ----- 1 file changed, 5 deletions(-) diff --git a/apps/kbtouch/lib.js b/apps/kbtouch/lib.js index 614fb8e96..db90440b9 100644 --- a/apps/kbtouch/lib.js +++ b/apps/kbtouch/lib.js @@ -78,12 +78,7 @@ var settings = Object.assign({ oneToOne: 0, speedScaling: 24 }, require('Storage').readJSON("kbtouch.settings.json", true) || {}); -print(settings); -//settings = { "textSize": 1, "offsetKeyboard": 0, "oneToOne": 1, -// "speedScaling": 15, "loopAround": 0 /*, "releaseToSelect": 0*/}; - -print(settings); // state const R = Bangle.appRect; var kbx = 0, kby = 0, kbdx = 0, kbdy = 0, kbShift = false, flashToggle = false; From 1398cea7b86d4c11c308ec699c830f7595bc588a Mon Sep 17 00:00:00 2001 From: Erik Andresen Date: Mon, 2 May 2022 07:29:09 +0200 Subject: [PATCH 137/509] gpsautotime: Add missing settings.js --- apps/gpsautotime/settings.js | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 apps/gpsautotime/settings.js diff --git a/apps/gpsautotime/settings.js b/apps/gpsautotime/settings.js new file mode 100644 index 000000000..dbdd121d1 --- /dev/null +++ b/apps/gpsautotime/settings.js @@ -0,0 +1,25 @@ +(function(back) { + var FILE = "gpsautotime.json"; + // Load settings + var settings = Object.assign({ + show: true, + }, require('Storage').readJSON(FILE, true) || {}); + + function writeSettings() { + require('Storage').writeJSON(FILE, settings); + } + + // Show the menu + E.showMenu({ + "" : { "title" : "GPS auto time" }, + "< Back" : () => back(), + 'Show widget?': { + value: !!settings.show, // !! converts undefined to false + format: v => v?"Show":"Hide", + onchange: v => { + settings.show = v; + writeSettings(); + } + }, + }); +}) From 072ce2444db6e615bcd270da27ecc47e95c9095f Mon Sep 17 00:00:00 2001 From: sir-indy <53864146+sir-indy@users.noreply.github.com> Date: Mon, 2 May 2022 10:59:07 +0100 Subject: [PATCH 138/509] Change timerRunning to a function, and other bits --- apps/smpltmr/app.js | 101 +++++++++++++++++++++++++------------------- 1 file changed, 58 insertions(+), 43 deletions(-) diff --git a/apps/smpltmr/app.js b/apps/smpltmr/app.js index 502891c6a..de02319fd 100644 --- a/apps/smpltmr/app.js +++ b/apps/smpltmr/app.js @@ -1,3 +1,17 @@ +/* + * SIMPLE TIMER + * + * Creator: David Peer + * Date: 02/2022 + * + * Modified: Sir Indy + * Date: 05/2022 + */ + +const Layout = require("Layout"); +const alarm = require("sched") +const TIMER_IDX = "smpltmr"; + const secondsToTime = (s) => new Object({h:Math.floor((s/3600) % 24), m:Math.floor((s/60) % 60), s:Math.floor(s % 60)}); const clamp = (num, min, max) => Math.min(Math.max(num, min), max); function formatTime(s) { @@ -8,16 +22,14 @@ function formatTime(s) { return t.m + ':' + ("0" + t.s).substr(-2); } } -const timerID = "simpletimer"; -Bangle.loadWidgets(); -Bangle.drawWidgets(); - -var Layout = require("Layout"); var seconds = 5 * 60; // Default to 5 minutes var drawTimeout; -var timerRunning = false; -var imgArrow = Graphics.createImage(` +//var timerRunning = false; +function timerRunning() { + return (alarm.getTimeToAlarm(alarm.getAlarm(TIMER_IDX)) != undefined) +} +const imgArrow = Graphics.createImage(` x xxx xxx @@ -33,23 +45,25 @@ const imgPause = atob("GBiBAP+B//+B//+B//+B//+B//+B//+B//+B//+B//+B//+B//+B//+B/ const imgPlay = atob("GBiBAIAAAOAAAPgAAP4AAP+AAP/gAP/4AP/+AP//gP//4P//+P///v///v//+P//4P//gP/+AP/4AP/gAP+AAP4AAPgAAOAAAIAAAA=="); function onDrag(event) { - Bangle.buzz(40, 0.3); - var diff = -Math.round(event.dy/5); - if (event.x < timePickerLayout.hours.w) { - diff *= 3600; - } else if (event.x > timePickerLayout.mins.x && event.x < timePickerLayout.secs.x) { - diff *= 60; + if (timerRunning()) { + Bangle.buzz(40, 0.3); + var diff = -Math.round(event.dy/5); + if (event.x < timePickerLayout.hours.w) { + diff *= 3600; + } else if (event.x > timePickerLayout.mins.x && event.x < timePickerLayout.secs.x) { + diff *= 60; + } + updateTimePicker(diff); } - updateTimePicker(diff); } function onTouch(button, xy) { var touchMidpoint = timePickerLayout.hours.y + timePickerLayout.hours.h/2; var diff = 0; - if (xy.y > 24 && xy.y < touchMidpoint - 10) { + if (timerRunning() && xy.y > 24 && xy.y < touchMidpoint - 10) { Bangle.buzz(40, 0.3); diff = 1; - } else if (xy.y > touchMidpoint + 10 && xy.y < timePickerLayout.btnStart.y) { + } else if (timerRunning() && xy.y > touchMidpoint + 10 && xy.y < timePickerLayout.btnStart.y) { Bangle.buzz(40, 0.3); diff = -1; } else if (xy.y > timePickerLayout.btnStart.y) { @@ -67,11 +81,9 @@ function onTouch(button, xy) { function onButton() { g.clearRect(Bangle.appRect); - if (timerRunning) { - timerRunning = false; + if (timerRunning()) { timerStop(); } else { - timerRunning = true; timerRun(); } } @@ -85,7 +97,7 @@ function updateTimePicker(diff) { } function updateTimer() { - var timeToNext = require("sched").getTimeToAlarm(require("sched").getAlarm(timerID)); + var timeToNext = alarm.getTimeToAlarm(alarm.getAlarm(TIMER_IDX)); updateLayoutField(timerLayout, 'timer', formatTime(timeToNext / 1000)); queueDraw(1000); } @@ -98,26 +110,13 @@ function queueDraw(millisecs) { }, millisecs - (Date.now() % millisecs)); } -function runTimePicker() { - g.clearRect(Bangle.appRect); - Bangle.setUI({ - mode : "custom", - touch : function(n,e) {onTouch(n,e);}, - drag : function(e) {onDrag(e);}, - btn : function(n) {onButton();}, - }); - timePickerLayout.render(); - updateTimePicker(); - //timePickerLayout.debug(); -} - function timerRun() { - require("sched").setAlarm(timerID, { + alarm.setAlarm(TIMER_IDX, { vibrate : ".-.-", hidden: true, timer : seconds * 1000 }); - require("sched").reload(); + alarm.reload(); g.clearRect(Bangle.appRect); timerLayout.render(); updateTimer(); @@ -126,13 +125,15 @@ function timerRun() { function timerStop() { if (drawTimeout) clearTimeout(drawTimeout); drawTimeout = undefined; - var timeToNext = require("sched").getTimeToAlarm(require("sched").getAlarm(timerID)); + var timeToNext = alarm.getTimeToAlarm(alarm.getAlarm(TIMER_IDX)); if (timeToNext != undefined) { seconds = timeToNext / 1000; } - require("sched").setAlarm(timerID, undefined); - require("sched").reload(); - runTimePicker(); + alarm.setAlarm(TIMER_IDX, undefined); + alarm.reload(); + g.clearRect(Bangle.appRect); + timePickerLayout.render(); + updateTimePicker(); } var timePickerLayout = new Layout({ @@ -175,7 +176,21 @@ function updateLayoutField(layout, field, value) { layout.render(layout[field]); } -if (require("sched").getTimeToAlarm(require("sched").getAlarm(timerID)) != undefined) { - timerRunning = true; -} -onButton(); \ No newline at end of file +Bangle.loadWidgets(); +Bangle.drawWidgets(); + +Bangle.setUI({ + mode : "custom", + touch : function(n,e) {onTouch(n,e);}, + drag : function(e) {onDrag(e);}, + btn : function(n) {onButton();}, +}); + +g.clearRect(Bangle.appRect); +if (timerRunning()) { + timerLayout.render(); + updateTimer(); +} else { + timePickerLayout.render(); + updateTimePicker(); +} \ No newline at end of file From d49980291c646f707b3acfd46b49efdd1ae886c8 Mon Sep 17 00:00:00 2001 From: sir-indy <53864146+sir-indy@users.noreply.github.com> Date: Mon, 2 May 2022 11:14:35 +0100 Subject: [PATCH 139/509] correct onTouch if timerRunning --- apps/smpltmr/app.js | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/apps/smpltmr/app.js b/apps/smpltmr/app.js index de02319fd..2904fd6a1 100644 --- a/apps/smpltmr/app.js +++ b/apps/smpltmr/app.js @@ -45,7 +45,7 @@ const imgPause = atob("GBiBAP+B//+B//+B//+B//+B//+B//+B//+B//+B//+B//+B//+B//+B/ const imgPlay = atob("GBiBAIAAAOAAAPgAAP4AAP+AAP/gAP/4AP/+AP//gP//4P//+P///v///v//+P//4P//gP/+AP/4AP/gAP+AAP4AAPgAAOAAAIAAAA=="); function onDrag(event) { - if (timerRunning()) { + if (!timerRunning()) { Bangle.buzz(40, 0.3); var diff = -Math.round(event.dy/5); if (event.x < timePickerLayout.hours.w) { @@ -84,7 +84,9 @@ function onButton() { if (timerRunning()) { timerStop(); } else { - timerRun(); + if (seconds > 0) { + timerRun(); + } } } From ba0a1be37395f396c3ba44599ea6fe60fdf37a8d Mon Sep 17 00:00:00 2001 From: sir-indy <53864146+sir-indy@users.noreply.github.com> Date: Mon, 2 May 2022 11:32:57 +0100 Subject: [PATCH 140/509] Tweak Readme.md --- apps/smpltmr/README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/apps/smpltmr/README.md b/apps/smpltmr/README.md index 2c6e6f9ab..310332955 100644 --- a/apps/smpltmr/README.md +++ b/apps/smpltmr/README.md @@ -4,8 +4,9 @@ A simple app to set a timer quickly. Drag or tap on the up and down buttons over This app uses the `sched` library, which allows the timer to continue to run in the background when this app is closed. -# Creator +# Creators [David Peer](https://github.com/peerdavid) + [Sir Indy](https://github.com/sir-indy) # Thanks to... From a95af8225b1ef4aedb93a6ea033f7b93c8a3fdd1 Mon Sep 17 00:00:00 2001 From: sir-indy <53864146+sir-indy@users.noreply.github.com> Date: Mon, 2 May 2022 12:30:07 +0100 Subject: [PATCH 141/509] Added screenshots --- apps/smpltmr/screenshot.png | Bin 1845 -> 0 bytes apps/smpltmr/screenshot_1.png | Bin 0 -> 2940 bytes apps/smpltmr/screenshot_2.png | Bin 1950 -> 2496 bytes apps/smpltmr/screenshot_3.png | Bin 0 -> 2715 bytes apps/smpltmr/screenshot_4.png | Bin 0 -> 2994 bytes 5 files changed, 0 insertions(+), 0 deletions(-) delete mode 100644 apps/smpltmr/screenshot.png create mode 100644 apps/smpltmr/screenshot_1.png create mode 100644 apps/smpltmr/screenshot_3.png create mode 100644 apps/smpltmr/screenshot_4.png diff --git a/apps/smpltmr/screenshot.png b/apps/smpltmr/screenshot.png deleted file mode 100644 index eff94475c73638521c0dc59ff9ec55182f609d2b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1845 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 literal 0 HcmV?d00001 diff --git a/apps/smpltmr/screenshot_2.png b/apps/smpltmr/screenshot_2.png index 7b5dc9a3df7dc091d1dfe6d8dd3aa29c51351127..fb0145f17dde8dd27f1f443d7b4ac722657c6a88 100644 GIT binary patch literal 2496 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 literal 0 HcmV?d00001 diff --git a/apps/smpltmr/screenshot_4.png b/apps/smpltmr/screenshot_4.png new file mode 100644 index 0000000000000000000000000000000000000000..c0f984378e178638882b93c8c3d2b8a1f70aa475 GIT binary patch literal 2994 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 Date: Mon, 2 May 2022 12:30:18 +0100 Subject: [PATCH 142/509] updated readme --- apps/smpltmr/README.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/apps/smpltmr/README.md b/apps/smpltmr/README.md index 310332955..eeb48d338 100644 --- a/apps/smpltmr/README.md +++ b/apps/smpltmr/README.md @@ -4,6 +4,11 @@ A simple app to set a timer quickly. Drag or tap on the up and down buttons over This app uses the `sched` library, which allows the timer to continue to run in the background when this app is closed. +![](screenshot_1.png) +![](screenshot_2.png) +![](screenshot_3.png) +![](screenshot_4.png) + # Creators [David Peer](https://github.com/peerdavid) From 51807e2b9ae988b7130f79ff5dc08150c4b09a6e Mon Sep 17 00:00:00 2001 From: sir-indy <53864146+sir-indy@users.noreply.github.com> Date: Mon, 2 May 2022 12:31:57 +0100 Subject: [PATCH 143/509] Update onTouch to work properly --- apps/smpltmr/app.js | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/apps/smpltmr/app.js b/apps/smpltmr/app.js index 2904fd6a1..63aeafa91 100644 --- a/apps/smpltmr/app.js +++ b/apps/smpltmr/app.js @@ -60,14 +60,12 @@ function onDrag(event) { function onTouch(button, xy) { var touchMidpoint = timePickerLayout.hours.y + timePickerLayout.hours.h/2; var diff = 0; - if (timerRunning() && xy.y > 24 && xy.y < touchMidpoint - 10) { - Bangle.buzz(40, 0.3); + Bangle.buzz(40, 0.3); + if (!timerRunning() && xy.y > 24 && xy.y < touchMidpoint - 10) { diff = 1; - } else if (timerRunning() && xy.y > touchMidpoint + 10 && xy.y < timePickerLayout.btnStart.y) { - Bangle.buzz(40, 0.3); + } else if (!timerRunning() && xy.y > touchMidpoint + 10 && xy.y < timePickerLayout.btnStart.y) { diff = -1; } else if (xy.y > timePickerLayout.btnStart.y) { - Bangle.buzz(40, 0.6); onButton(); return; } From c5e1adc7a2384c9839a98007885a23a80989b284 Mon Sep 17 00:00:00 2001 From: sir-indy <53864146+sir-indy@users.noreply.github.com> Date: Mon, 2 May 2022 12:33:22 +0100 Subject: [PATCH 144/509] Add screenshots to metadata.json --- apps/smpltmr/metadata.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/smpltmr/metadata.json b/apps/smpltmr/metadata.json index ee5c7ce9b..cb1ef6eab 100644 --- a/apps/smpltmr/metadata.json +++ b/apps/smpltmr/metadata.json @@ -8,7 +8,7 @@ "tags": "tool,alarm,timer", "dependencies": {"scheduler":"type"}, "supports": ["BANGLEJS2"], - "screenshots": [{"url":"screenshot.png"}, {"url": "screenshot_2.png"}], + "screenshots": [{"url":"screenshot_1.png"}, {"url": "screenshot_2.png"}, {"url": "screenshot_3.png"}, {"url": "screenshot_4.png"}], "readme": "README.md", "storage": [ {"name":"smpltmr.app.js","url":"app.js"}, From a3a7ef58bfab4d7bd598379e8e10e23f39757a6a Mon Sep 17 00:00:00 2001 From: Erik Andresen Date: Mon, 2 May 2022 18:56:36 +0200 Subject: [PATCH 145/509] waypointe fallback to built in compass heading --- apps/waypointer/ChangeLog | 1 + apps/waypointer/app.js | 8 ++++++-- apps/waypointer/metadata.json | 2 +- apps/waypointer/waypoints.html | 4 ++-- 4 files changed, 10 insertions(+), 5 deletions(-) diff --git a/apps/waypointer/ChangeLog b/apps/waypointer/ChangeLog index 1b584f7dd..7ccad08ea 100644 --- a/apps/waypointer/ChangeLog +++ b/apps/waypointer/ChangeLog @@ -1,2 +1,3 @@ 0.01: New app! 0.02: Make Bangle.js 2 compatible +0.03: Silently use built in heading when no magnav calibration file is present diff --git a/apps/waypointer/app.js b/apps/waypointer/app.js index 615fbbc36..bdb6f6857 100644 --- a/apps/waypointer/app.js +++ b/apps/waypointer/app.js @@ -74,11 +74,14 @@ function newHeading(m,h){ return hd; } -var CALIBDATA = require("Storage").readJSON("magnav.json",1)||null; +var CALIBDATA = require("Storage").readJSON("magnav.json",1) || {}; function tiltfixread(O,S){ - var start = Date.now(); var m = Bangle.getCompass(); + if (O === undefined || S === undefined) { + // no valid calibration from magnav, use built in + return 360-m.heading; + } var g = Bangle.getAccel(); m.dx =(m.x-O.x)*S.x; m.dy=(m.y-O.y)*S.y; m.dz=(m.z-O.z)*S.z; var d = Math.atan2(-m.dx,m.dy)*180/Math.PI; @@ -97,6 +100,7 @@ function tiltfixread(O,S){ // Note actual mag is 360-m, error in firmware function read_compass() { var d = tiltfixread(CALIBDATA.offset,CALIBDATA.scale); + if (isNaN(d)) return; // built in compass heading can return NaN when uncalibrated heading = newHeading(d,heading); direction = wp_bearing - heading; if (direction < 0) direction += 360; diff --git a/apps/waypointer/metadata.json b/apps/waypointer/metadata.json index 111259bbc..707da94cf 100644 --- a/apps/waypointer/metadata.json +++ b/apps/waypointer/metadata.json @@ -1,7 +1,7 @@ { "id": "waypointer", "name": "Way Pointer", - "version": "0.02", + "version": "0.03", "description": "Navigate to a waypoint using the GPS for bearing and compass to point way, uses the same waypoint interface as GPS Navigation", "icon": "waypointer.png", "tags": "tool,outdoors,gps", diff --git a/apps/waypointer/waypoints.html b/apps/waypointer/waypoints.html index d02260732..7a65821a2 100644 --- a/apps/waypointer/waypoints.html +++ b/apps/waypointer/waypoints.html @@ -73,8 +73,8 @@ event.preventDefault() var name = $name.value.trim() if(!name) return; - var lat = parseFloat($latitude.value).toPrecision(5); - var lon = parseFloat($longtitude.value).toPrecision(5); + var lat = parseFloat($latitude.value); + var lon = parseFloat($longtitude.value); waypoints.push({ name, lat,lon, From cc8a606fd5903471a4cdec06dfe2cd150ecccb54 Mon Sep 17 00:00:00 2001 From: Erik Andresen Date: Mon, 2 May 2022 18:56:36 +0200 Subject: [PATCH 146/509] waypointe fallback to built in compass heading --- apps/waypointer/ChangeLog | 1 + apps/waypointer/app.js | 8 ++++++-- apps/waypointer/metadata.json | 2 +- apps/waypointer/waypoints.html | 4 ++-- 4 files changed, 10 insertions(+), 5 deletions(-) diff --git a/apps/waypointer/ChangeLog b/apps/waypointer/ChangeLog index 1b584f7dd..7ccad08ea 100644 --- a/apps/waypointer/ChangeLog +++ b/apps/waypointer/ChangeLog @@ -1,2 +1,3 @@ 0.01: New app! 0.02: Make Bangle.js 2 compatible +0.03: Silently use built in heading when no magnav calibration file is present diff --git a/apps/waypointer/app.js b/apps/waypointer/app.js index 615fbbc36..bdb6f6857 100644 --- a/apps/waypointer/app.js +++ b/apps/waypointer/app.js @@ -74,11 +74,14 @@ function newHeading(m,h){ return hd; } -var CALIBDATA = require("Storage").readJSON("magnav.json",1)||null; +var CALIBDATA = require("Storage").readJSON("magnav.json",1) || {}; function tiltfixread(O,S){ - var start = Date.now(); var m = Bangle.getCompass(); + if (O === undefined || S === undefined) { + // no valid calibration from magnav, use built in + return 360-m.heading; + } var g = Bangle.getAccel(); m.dx =(m.x-O.x)*S.x; m.dy=(m.y-O.y)*S.y; m.dz=(m.z-O.z)*S.z; var d = Math.atan2(-m.dx,m.dy)*180/Math.PI; @@ -97,6 +100,7 @@ function tiltfixread(O,S){ // Note actual mag is 360-m, error in firmware function read_compass() { var d = tiltfixread(CALIBDATA.offset,CALIBDATA.scale); + if (isNaN(d)) return; // built in compass heading can return NaN when uncalibrated heading = newHeading(d,heading); direction = wp_bearing - heading; if (direction < 0) direction += 360; diff --git a/apps/waypointer/metadata.json b/apps/waypointer/metadata.json index 111259bbc..707da94cf 100644 --- a/apps/waypointer/metadata.json +++ b/apps/waypointer/metadata.json @@ -1,7 +1,7 @@ { "id": "waypointer", "name": "Way Pointer", - "version": "0.02", + "version": "0.03", "description": "Navigate to a waypoint using the GPS for bearing and compass to point way, uses the same waypoint interface as GPS Navigation", "icon": "waypointer.png", "tags": "tool,outdoors,gps", diff --git a/apps/waypointer/waypoints.html b/apps/waypointer/waypoints.html index d02260732..7a65821a2 100644 --- a/apps/waypointer/waypoints.html +++ b/apps/waypointer/waypoints.html @@ -73,8 +73,8 @@ event.preventDefault() var name = $name.value.trim() if(!name) return; - var lat = parseFloat($latitude.value).toPrecision(5); - var lon = parseFloat($longtitude.value).toPrecision(5); + var lat = parseFloat($latitude.value); + var lon = parseFloat($longtitude.value); waypoints.push({ name, lat,lon, From 3900d0a6ad3818d644fec5e2267e22788682dc5e Mon Sep 17 00:00:00 2001 From: Erik Andresen Date: Mon, 2 May 2022 21:37:31 +0200 Subject: [PATCH 147/509] Add new widget alarmeta This widget displays the time to the next Alarm or Timer in hours and minutes. --- apps/alarmeta/metadata.json | 15 ++++++++++++++ apps/alarmeta/screenshot.png | Bin 0 -> 3491 bytes apps/alarmeta/widget.js | 37 +++++++++++++++++++++++++++++++++++ apps/alarmeta/widget.png | Bin 0 -> 1011 bytes 4 files changed, 52 insertions(+) create mode 100644 apps/alarmeta/metadata.json create mode 100644 apps/alarmeta/screenshot.png create mode 100644 apps/alarmeta/widget.js create mode 100644 apps/alarmeta/widget.png diff --git a/apps/alarmeta/metadata.json b/apps/alarmeta/metadata.json new file mode 100644 index 000000000..0130a63ef --- /dev/null +++ b/apps/alarmeta/metadata.json @@ -0,0 +1,15 @@ +{ + "id": "alarmeta", + "name": "Alarm & Timer ETA", + "shortName": "Alarm ETA", + "version": "0.01", + "description": "A widget that displays the time to the next Alarm or Timer in hours and minutes, maximum 24h", + "icon": "widget.png", + "type": "widget", + "tags": "widget", + "supports": ["BANGLEJS","BANGLEJS2"], + "screenshots" : [ { "url":"screenshot.png" } ], + "storage": [ + {"name":"alarmeta.wid.js","url":"widget.js"} + ] +} diff --git a/apps/alarmeta/screenshot.png b/apps/alarmeta/screenshot.png new file mode 100644 index 0000000000000000000000000000000000000000..41a1095570813bd8d950a8a7d4da4d3eb7102fe9 GIT binary patch literal 3491 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 O09Qv(hqrd<)c*sBA&|ZR literal 0 HcmV?d00001 diff --git a/apps/alarmeta/widget.js b/apps/alarmeta/widget.js new file mode 100644 index 000000000..ff08dd6ef --- /dev/null +++ b/apps/alarmeta/widget.js @@ -0,0 +1,37 @@ +(() => { + const alarms = require("Storage").readJSON("sched.json",1) || []; + + function draw() { + const times = alarms.map(alarm => require("sched").getTimeToAlarm(alarm)).filter(a => a !== undefined); + const next = Math.min.apply(null, times); + if (next > 0 && next < 86400000) { + const hours = Math.floor((next % 86400000) / 3600000).toString(); + const minutes = Math.floor(((next % 86400000) % 3600000) / 60000).toString(); + + g.reset(); // reset the graphics context to defaults (color/font/etc) + g.setFontAlign(0,0); // center fonts + g.clearRect(this.x, this.y, this.x+this.width-1, this.y+23); + + // Use 'locale' module to get a shortened month name + // in the correct language + var text = hours.padStart(2, '0') + ":" + minutes.padStart(2, '0'); + g.setFont("6x8:1x2"); + g.drawString(text, this.x+this.width/2, this.y+12); + if (this.width === 0) { + this.width = 6*5+2; + Bangle.drawWidgets(); // width changed, re-layout + } + } + } + + setInterval(function() { + WIDGETS["alarmeta"].draw(WIDGETS["alarmeta"]); + }, 30000); // update every half minute + + // add your widget + WIDGETS["alarmeta"]={ + area:"tl", + width: 0, // hide by default = assume no timer + draw:draw + }; +})(); diff --git a/apps/alarmeta/widget.png b/apps/alarmeta/widget.png new file mode 100644 index 0000000000000000000000000000000000000000..cfd942ea013fdda73add2a8f06f63628f6f4d8eb GIT binary patch literal 1011 zcmV0rD z1-1BOqO}O(lTg8jLJ)2HRIT^}1<@B3tE;kzRZPKx4Rq6xZQYf&R3tTNv)N5%=J>F? z>1LBQGkb19$$nqv-aGf)@Au3-_s*R;&_omK8z!v5=nK!D1oOZx5;L~{?ROsxV-snB z=9Y*D5Euw+(|`kzr0`q47-!tV&62XK{W%u_)k^Kcf`xjV!?yV-@(KK zh{zs|23-hAWNFWi$I93ItdHx5lJJm5f^rSW-Akp)espC%?8YP=8U@-#JX0+c7R%R? z7kX#Cq7k5SK;T5RJX0zQ54$TE_*tVt_zRpmJca$2m^T z6P%p(xocC1A%%1@5&KS~LH{O>_|E}Ffa!T*wiI|4ipKGW)%4l{hI(2v7OOo=Ve>G)@A@8 zeO5NRj{75qdv4HWEWY3jJ=|}u+Tyh806;1)oyPTk0!h@}I_<@rosV~!X`6i3zXwVV z|A1Ur<(BXISor{|g;fWB`BUO;MfVHfkyUQr-|D%?PfSR=O-^eLd@2&1bKTE?!JBj& zD73hrr_xT!*UBPJonLs`h?#4j?n{f(7I zB728=TaK-~5e{kxzRwjC;zfT4HeGKO`X=_%l|KwXzI%kpzR`NRf)Q^=vbSwg!>7d}`nAR6rabR+0O$TyExi|toW z)1Mhx)1*K1Jh#oBTB?g&AEOcI95CDoV8r9T@jXPm`LzlCBKM9zgAuPX1e-Myw0|Wo z19V*ckd4N0pknq*0)p0rMNchQd^6(|93UDaomuc3cD6HSjS&u4f;m z*3Q6YrM4~Px4u}ei1|b#LHT?AF?F^^3}c7COoz(K)Izxi^w}CC;j=Qe_}}LTnn^yJ hSeHq@CYo69_!rhyA?h4K76AYN002ovPDHLkV1g(R?#}=K literal 0 HcmV?d00001 From 4105f2a65dd4d9823e6b4a073ac010df3f513961 Mon Sep 17 00:00:00 2001 From: Erik Andresen Date: Mon, 2 May 2022 21:37:31 +0200 Subject: [PATCH 148/509] Add new widget alarmeta This widget displays the time to the next Alarm or Timer in hours and minutes. --- apps/alarmeta/metadata.json | 15 ++++++++++++++ apps/alarmeta/screenshot.png | Bin 0 -> 3491 bytes apps/alarmeta/widget.js | 37 +++++++++++++++++++++++++++++++++++ apps/alarmeta/widget.png | Bin 0 -> 1011 bytes 4 files changed, 52 insertions(+) create mode 100644 apps/alarmeta/metadata.json create mode 100644 apps/alarmeta/screenshot.png create mode 100644 apps/alarmeta/widget.js create mode 100644 apps/alarmeta/widget.png diff --git a/apps/alarmeta/metadata.json b/apps/alarmeta/metadata.json new file mode 100644 index 000000000..0130a63ef --- /dev/null +++ b/apps/alarmeta/metadata.json @@ -0,0 +1,15 @@ +{ + "id": "alarmeta", + "name": "Alarm & Timer ETA", + "shortName": "Alarm ETA", + "version": "0.01", + "description": "A widget that displays the time to the next Alarm or Timer in hours and minutes, maximum 24h", + "icon": "widget.png", + "type": "widget", + "tags": "widget", + "supports": ["BANGLEJS","BANGLEJS2"], + "screenshots" : [ { "url":"screenshot.png" } ], + "storage": [ + {"name":"alarmeta.wid.js","url":"widget.js"} + ] +} diff --git a/apps/alarmeta/screenshot.png b/apps/alarmeta/screenshot.png new file mode 100644 index 0000000000000000000000000000000000000000..41a1095570813bd8d950a8a7d4da4d3eb7102fe9 GIT binary patch literal 3491 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 O09Qv(hqrd<)c*sBA&|ZR literal 0 HcmV?d00001 diff --git a/apps/alarmeta/widget.js b/apps/alarmeta/widget.js new file mode 100644 index 000000000..ff08dd6ef --- /dev/null +++ b/apps/alarmeta/widget.js @@ -0,0 +1,37 @@ +(() => { + const alarms = require("Storage").readJSON("sched.json",1) || []; + + function draw() { + const times = alarms.map(alarm => require("sched").getTimeToAlarm(alarm)).filter(a => a !== undefined); + const next = Math.min.apply(null, times); + if (next > 0 && next < 86400000) { + const hours = Math.floor((next % 86400000) / 3600000).toString(); + const minutes = Math.floor(((next % 86400000) % 3600000) / 60000).toString(); + + g.reset(); // reset the graphics context to defaults (color/font/etc) + g.setFontAlign(0,0); // center fonts + g.clearRect(this.x, this.y, this.x+this.width-1, this.y+23); + + // Use 'locale' module to get a shortened month name + // in the correct language + var text = hours.padStart(2, '0') + ":" + minutes.padStart(2, '0'); + g.setFont("6x8:1x2"); + g.drawString(text, this.x+this.width/2, this.y+12); + if (this.width === 0) { + this.width = 6*5+2; + Bangle.drawWidgets(); // width changed, re-layout + } + } + } + + setInterval(function() { + WIDGETS["alarmeta"].draw(WIDGETS["alarmeta"]); + }, 30000); // update every half minute + + // add your widget + WIDGETS["alarmeta"]={ + area:"tl", + width: 0, // hide by default = assume no timer + draw:draw + }; +})(); diff --git a/apps/alarmeta/widget.png b/apps/alarmeta/widget.png new file mode 100644 index 0000000000000000000000000000000000000000..cfd942ea013fdda73add2a8f06f63628f6f4d8eb GIT binary patch literal 1011 zcmV0rD z1-1BOqO}O(lTg8jLJ)2HRIT^}1<@B3tE;kzRZPKx4Rq6xZQYf&R3tTNv)N5%=J>F? z>1LBQGkb19$$nqv-aGf)@Au3-_s*R;&_omK8z!v5=nK!D1oOZx5;L~{?ROsxV-snB z=9Y*D5Euw+(|`kzr0`q47-!tV&62XK{W%u_)k^Kcf`xjV!?yV-@(KK zh{zs|23-hAWNFWi$I93ItdHx5lJJm5f^rSW-Akp)espC%?8YP=8U@-#JX0+c7R%R? z7kX#Cq7k5SK;T5RJX0zQ54$TE_*tVt_zRpmJca$2m^T z6P%p(xocC1A%%1@5&KS~LH{O>_|E}Ffa!T*wiI|4ipKGW)%4l{hI(2v7OOo=Ve>G)@A@8 zeO5NRj{75qdv4HWEWY3jJ=|}u+Tyh806;1)oyPTk0!h@}I_<@rosV~!X`6i3zXwVV z|A1Ur<(BXISor{|g;fWB`BUO;MfVHfkyUQr-|D%?PfSR=O-^eLd@2&1bKTE?!JBj& zD73hrr_xT!*UBPJonLs`h?#4j?n{f(7I zB728=TaK-~5e{kxzRwjC;zfT4HeGKO`X=_%l|KwXzI%kpzR`NRf)Q^=vbSwg!>7d}`nAR6rabR+0O$TyExi|toW z)1Mhx)1*K1Jh#oBTB?g&AEOcI95CDoV8r9T@jXPm`LzlCBKM9zgAuPX1e-Myw0|Wo z19V*ckd4N0pknq*0)p0rMNchQd^6(|93UDaomuc3cD6HSjS&u4f;m z*3Q6YrM4~Px4u}ei1|b#LHT?AF?F^^3}c7COoz(K)Izxi^w}CC;j=Qe_}}LTnn^yJ hSeHq@CYo69_!rhyA?h4K76AYN002ovPDHLkV1g(R?#}=K literal 0 HcmV?d00001 From de8641a1c5bbf5888c7a1036108bf2b2598d9706 Mon Sep 17 00:00:00 2001 From: Erik Andresen Date: Tue, 3 May 2022 07:25:20 +0200 Subject: [PATCH 149/509] alarmeta widget renamed to widalarmeta --- apps/{alarmeta => widalarmeta}/metadata.json | 4 ++-- apps/{alarmeta => widalarmeta}/screenshot.png | Bin apps/{alarmeta => widalarmeta}/widget.js | 6 ++---- apps/{alarmeta => widalarmeta}/widget.png | Bin 4 files changed, 4 insertions(+), 6 deletions(-) rename apps/{alarmeta => widalarmeta}/metadata.json (83%) rename apps/{alarmeta => widalarmeta}/screenshot.png (100%) rename apps/{alarmeta => widalarmeta}/widget.js (86%) rename apps/{alarmeta => widalarmeta}/widget.png (100%) diff --git a/apps/alarmeta/metadata.json b/apps/widalarmeta/metadata.json similarity index 83% rename from apps/alarmeta/metadata.json rename to apps/widalarmeta/metadata.json index 0130a63ef..b6d8bd62b 100644 --- a/apps/alarmeta/metadata.json +++ b/apps/widalarmeta/metadata.json @@ -1,5 +1,5 @@ { - "id": "alarmeta", + "id": "widalarmeta", "name": "Alarm & Timer ETA", "shortName": "Alarm ETA", "version": "0.01", @@ -10,6 +10,6 @@ "supports": ["BANGLEJS","BANGLEJS2"], "screenshots" : [ { "url":"screenshot.png" } ], "storage": [ - {"name":"alarmeta.wid.js","url":"widget.js"} + {"name":"widalarmeta.wid.js","url":"widget.js"} ] } diff --git a/apps/alarmeta/screenshot.png b/apps/widalarmeta/screenshot.png similarity index 100% rename from apps/alarmeta/screenshot.png rename to apps/widalarmeta/screenshot.png diff --git a/apps/alarmeta/widget.js b/apps/widalarmeta/widget.js similarity index 86% rename from apps/alarmeta/widget.js rename to apps/widalarmeta/widget.js index ff08dd6ef..0cddf953a 100644 --- a/apps/alarmeta/widget.js +++ b/apps/widalarmeta/widget.js @@ -12,8 +12,6 @@ g.setFontAlign(0,0); // center fonts g.clearRect(this.x, this.y, this.x+this.width-1, this.y+23); - // Use 'locale' module to get a shortened month name - // in the correct language var text = hours.padStart(2, '0') + ":" + minutes.padStart(2, '0'); g.setFont("6x8:1x2"); g.drawString(text, this.x+this.width/2, this.y+12); @@ -25,11 +23,11 @@ } setInterval(function() { - WIDGETS["alarmeta"].draw(WIDGETS["alarmeta"]); + WIDGETS["widalarmeta"].draw(WIDGETS["widalarmeta"]); }, 30000); // update every half minute // add your widget - WIDGETS["alarmeta"]={ + WIDGETS["widalarmeta"]={ area:"tl", width: 0, // hide by default = assume no timer draw:draw diff --git a/apps/alarmeta/widget.png b/apps/widalarmeta/widget.png similarity index 100% rename from apps/alarmeta/widget.png rename to apps/widalarmeta/widget.png From f52ad2e834a381465edd74002af29f82b3c06c55 Mon Sep 17 00:00:00 2001 From: Erik Andresen Date: Tue, 3 May 2022 07:25:20 +0200 Subject: [PATCH 150/509] alarmeta widget renamed to widalarmeta --- apps/{alarmeta => widalarmeta}/metadata.json | 4 ++-- apps/{alarmeta => widalarmeta}/screenshot.png | Bin apps/{alarmeta => widalarmeta}/widget.js | 6 ++---- apps/{alarmeta => widalarmeta}/widget.png | Bin 4 files changed, 4 insertions(+), 6 deletions(-) rename apps/{alarmeta => widalarmeta}/metadata.json (83%) rename apps/{alarmeta => widalarmeta}/screenshot.png (100%) rename apps/{alarmeta => widalarmeta}/widget.js (86%) rename apps/{alarmeta => widalarmeta}/widget.png (100%) diff --git a/apps/alarmeta/metadata.json b/apps/widalarmeta/metadata.json similarity index 83% rename from apps/alarmeta/metadata.json rename to apps/widalarmeta/metadata.json index 0130a63ef..b6d8bd62b 100644 --- a/apps/alarmeta/metadata.json +++ b/apps/widalarmeta/metadata.json @@ -1,5 +1,5 @@ { - "id": "alarmeta", + "id": "widalarmeta", "name": "Alarm & Timer ETA", "shortName": "Alarm ETA", "version": "0.01", @@ -10,6 +10,6 @@ "supports": ["BANGLEJS","BANGLEJS2"], "screenshots" : [ { "url":"screenshot.png" } ], "storage": [ - {"name":"alarmeta.wid.js","url":"widget.js"} + {"name":"widalarmeta.wid.js","url":"widget.js"} ] } diff --git a/apps/alarmeta/screenshot.png b/apps/widalarmeta/screenshot.png similarity index 100% rename from apps/alarmeta/screenshot.png rename to apps/widalarmeta/screenshot.png diff --git a/apps/alarmeta/widget.js b/apps/widalarmeta/widget.js similarity index 86% rename from apps/alarmeta/widget.js rename to apps/widalarmeta/widget.js index ff08dd6ef..0cddf953a 100644 --- a/apps/alarmeta/widget.js +++ b/apps/widalarmeta/widget.js @@ -12,8 +12,6 @@ g.setFontAlign(0,0); // center fonts g.clearRect(this.x, this.y, this.x+this.width-1, this.y+23); - // Use 'locale' module to get a shortened month name - // in the correct language var text = hours.padStart(2, '0') + ":" + minutes.padStart(2, '0'); g.setFont("6x8:1x2"); g.drawString(text, this.x+this.width/2, this.y+12); @@ -25,11 +23,11 @@ } setInterval(function() { - WIDGETS["alarmeta"].draw(WIDGETS["alarmeta"]); + WIDGETS["widalarmeta"].draw(WIDGETS["widalarmeta"]); }, 30000); // update every half minute // add your widget - WIDGETS["alarmeta"]={ + WIDGETS["widalarmeta"]={ area:"tl", width: 0, // hide by default = assume no timer draw:draw diff --git a/apps/alarmeta/widget.png b/apps/widalarmeta/widget.png similarity index 100% rename from apps/alarmeta/widget.png rename to apps/widalarmeta/widget.png From cf060cfe3e655b49f4f9fd6406d80ffe62d99a1a Mon Sep 17 00:00:00 2001 From: sir-indy <53864146+sir-indy@users.noreply.github.com> Date: Tue, 3 May 2022 09:12:28 +0100 Subject: [PATCH 151/509] Update app.js --- apps/smpltmr/app.js | 15 ++------------- 1 file changed, 2 insertions(+), 13 deletions(-) diff --git a/apps/smpltmr/app.js b/apps/smpltmr/app.js index 63aeafa91..b474b8454 100644 --- a/apps/smpltmr/app.js +++ b/apps/smpltmr/app.js @@ -29,18 +29,7 @@ var drawTimeout; function timerRunning() { return (alarm.getTimeToAlarm(alarm.getAlarm(TIMER_IDX)) != undefined) } -const imgArrow = Graphics.createImage(` - x - xxx - xxx - xxxxx - xxxxx - xxx xxx - xxx xxx -xxx xxx -xxx xxx -`); - +const imgArrow = atob("CQmBAAgOBwfD47ndx+OA"); const imgPause = atob("GBiBAP+B//+B//+B//+B//+B//+B//+B//+B//+B//+B//+B//+B//+B//+B//+B//+B//+B//+B//+B//+B//+B//+B//+B//+B/w=="); const imgPlay = atob("GBiBAIAAAOAAAPgAAP4AAP+AAP/gAP/4AP/+AP//gP//4P//+P///v///v//+P//4P//gP/+AP/4AP/gAP+AAP4AAPgAAOAAAIAAAA=="); @@ -193,4 +182,4 @@ if (timerRunning()) { } else { timePickerLayout.render(); updateTimePicker(); -} \ No newline at end of file +} From e9bf77578019802e98aebe6812c5ebc37d98037e Mon Sep 17 00:00:00 2001 From: Gordon Williams Date: Tue, 3 May 2022 09:21:13 +0100 Subject: [PATCH 152/509] link in screenshots --- README.md | 10 +++++----- apps/scicalc/metadata.json | 3 ++- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index 93507de75..ee555cad2 100644 --- a/README.md +++ b/README.md @@ -186,7 +186,7 @@ The widget example is available in [`apps/_example_widget`](apps/_example_widget Widgets are just small bits of code that run whenever an app that supports them calls `Bangle.loadWidgets()`. If they want to display something in the 24px high -widget bar at the top of the screen they can add themselves to the global +widget bar at the top of the screen they can add themselves to the global `WIDGETS` array with: ``` @@ -250,7 +250,7 @@ and which gives information about the app for the Launcher. "version": "0v01", // the version of this app "description": "...", // long description (can contain markdown) "icon": "icon.png", // icon in apps/ - "screenshots" : [ { url:"screenshot.png" } ], // optional screenshot for app + "screenshots" : [ { "url":"screenshot.png" } ], // optional screenshot for app "type":"...", // optional(if app) - // 'app' - an application // 'clock' - a clock - required for clocks to automatically start @@ -259,10 +259,10 @@ and which gives information about the app for the Launcher. // 'RAM' - code that runs and doesn't upload anything to storage // 'launch' - replacement 'Launcher' // 'textinput' - provides a 'textinput' library that allows text to be input on the Bangle - // 'scheduler' - provides 'sched' library and boot code for scheduling alarms/timers + // 'scheduler' - provides 'sched' library and boot code for scheduling alarms/timers // (currently only 'sched' app) // 'notify' - provides 'notify' library for showing notifications - // 'locale' - provides 'locale' library for language-specific date/distance/etc + // 'locale' - provides 'locale' library for language-specific date/distance/etc // (a version of 'locale' is included in the firmware) "tags": "", // comma separated tag list for searching "supports": ["BANGLEJS2"], // List of device IDs supported, either BANGLEJS or BANGLEJS2 @@ -419,7 +419,7 @@ Example `settings.js` // make sure to enclose the function in parentheses (function(back) { let settings = require('Storage').readJSON('myappid.json',1)||{}; - if (typeof settings.monkeys !== "number") settings.monkeys = 12; // default value + if (typeof settings.monkeys !== "number") settings.monkeys = 12; // default value function save(key, value) { settings[key] = value; require('Storage').write('myappid.json', settings); diff --git a/apps/scicalc/metadata.json b/apps/scicalc/metadata.json index d2d855dc2..beda619e2 100644 --- a/apps/scicalc/metadata.json +++ b/apps/scicalc/metadata.json @@ -4,10 +4,11 @@ "version":"0.01", "description": "Scientific calculator", "icon": "scicalc.png", + "screenshots" : [ { "url":"scicalc_screenshot1.png" }, { "url":"scicalc_screenshot2.png" }, { "url":"scicalc_screenshot3.png" } ], "readme": "README.md", "tags": "app,tool", "allow_emulator": true, - "supports" : ["BANGLEJS2"], + "supports" : ["BANGLEJS2"], "storage": [ {"name":"scicalc.app.js","url":"app.js"}, {"name":"scicalc.img","url":"app-icon.js","evaluate":true} From 0a93ea7c00af5c65892bc129d4d5807caab80526 Mon Sep 17 00:00:00 2001 From: sir-indy <53864146+sir-indy@users.noreply.github.com> Date: Tue, 3 May 2022 10:06:10 +0100 Subject: [PATCH 153/509] Update Layout.js Remove text scale option, as scale can be set in font, as per #1699 --- modules/Layout.js | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/modules/Layout.js b/modules/Layout.js index 19553c0a5..f2ebc418a 100644 --- a/modules/Layout.js +++ b/modules/Layout.js @@ -32,9 +32,9 @@ layoutObject has: * `"v"` - Vertical layout, `c` is an array of more `layoutObject` * 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 `scale` field, eg `2` to set scale of an image or text -* A `r` field to set rotation of text or images. +* A `font` field, eg `6x8` or `30%` to use a percentage of screen height. Set scale with :, e.g. `6x8:2`. +* A `scale` field, eg `2` to set scale of an image +* A `r` field to set rotation of text or images (0: 0°, 1: 90°, 2: 180°, 3: 270°). * 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 @@ -222,13 +222,13 @@ Layout.prototype.render = function (l) { "":function(){}, "txt":function(l){ if (l.wrap) { - g.setFont(l.font, l.scale||1).setFontAlign(0,-1); + g.setFont(l.font).setFontAlign(0,-1); 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.scale||1).setFontAlign(0,0,l.r).drawString(l.label, l.x+(l.w>>1), l.y+(l.h>>1)); + g.setFont(l.font).setFontAlign(0,0,l.r).drawString(l.label, l.x+(l.w>>1), l.y+(l.h>>1)); } }, "btn":function(l){ if (l.font && l.font.endsWith("%")) @@ -252,15 +252,15 @@ Layout.prototype.render = function (l) { "function"==typeof l.src?l.src():l.src, l.x + l.w/2, l.y + l.h/2, - {scale: l.scale ? l.scale : undefined, rotate: Math.PI*0.5*(l.r ? l.r : 0)} + {scale: l.scale||undefined, rotate: Math.PI*0.5*(l.r||0)} ); - else g.setFont(l.font||"6x8", l.scale||2).setFontAlign(0,0,l.r).drawString(l.label,l.x+l.w/2,l.y+l.h/2); + else g.setFont(l.font||"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 + l.w/2, l.y + l.h/2, - {scale: l.scale ? l.scale : undefined, rotate: Math.PI*0.5*(l.r ? l.r : 0)} + {scale: l.scale||undefined, rotate: Math.PI*0.5*(l.r||0)} ); }, "custom":function(l){ l.render(l); @@ -358,13 +358,13 @@ Layout.prototype.update = function() { if (l.wrap) { l._h = l._w = 0; } else { - var m = g.setFont(l.font, l.scale||1).stringMetrics(l.label); + var m = g.setFont(l.font).stringMetrics(l.label); l._w = m.width; l._h = m.height; } }, "btn": function(l) { if (l.font && l.font.endsWith("%")) l.font = "Vector"+Math.round(g.getHeight()*l.font.slice(0,-1)/100); - var m = l.src?g.imageMetrics("function"==typeof l.src?l.src():l.src):g.setFont(l.font||"6x8", l.scale||2).stringMetrics(l.label); + var m = l.src?g.imageMetrics("function"==typeof l.src?l.src():l.src):g.setFont(l.font||"6x8:2").stringMetrics(l.label); l._h = 16 + m.height; l._w = 20 + m.width; }, "img": function(l) { From 4cac27927b2d22eaf19131dccefcbc93771aa69c Mon Sep 17 00:00:00 2001 From: Gordon Williams Date: Tue, 3 May 2022 12:05:09 +0100 Subject: [PATCH 154/509] > Merge branch 'master' of github.com:espruino/EspruinoAppLoaderCore > fix 'not correctly encoded' errors for backups --- core | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core b/core index 6fc78fc39..32d01b5b3 160000 --- a/core +++ b/core @@ -1 +1 @@ -Subproject commit 6fc78fc39531a43148ae8d515efaeff9404d1daf +Subproject commit 32d01b5b3d8e013ca0364671e2352b7b0dd48bb4 From fd5e0bf45c925c54576e601705e245d88afeffe1 Mon Sep 17 00:00:00 2001 From: sir-indy <53864146+sir-indy@users.noreply.github.com> Date: Tue, 3 May 2022 12:30:50 +0100 Subject: [PATCH 155/509] Update app.js Fix onTouch while timerRunning. Previously briefly showed timer picker numbers. --- apps/smpltmr/app.js | 24 ++++++++++++++---------- 1 file changed, 14 insertions(+), 10 deletions(-) diff --git a/apps/smpltmr/app.js b/apps/smpltmr/app.js index b474b8454..37d508359 100644 --- a/apps/smpltmr/app.js +++ b/apps/smpltmr/app.js @@ -50,20 +50,24 @@ function onTouch(button, xy) { var touchMidpoint = timePickerLayout.hours.y + timePickerLayout.hours.h/2; var diff = 0; Bangle.buzz(40, 0.3); - if (!timerRunning() && xy.y > 24 && xy.y < touchMidpoint - 10) { - diff = 1; - } else if (!timerRunning() && xy.y > touchMidpoint + 10 && xy.y < timePickerLayout.btnStart.y) { - diff = -1; - } else if (xy.y > timePickerLayout.btnStart.y) { + if (xy.y > timePickerLayout.btnStart.y) { onButton(); return; } - if (xy.x < timePickerLayout.hours.w) { - diff *= 3600; - } else if (xy.x > timePickerLayout.mins.x && xy.x < timePickerLayout.secs.x) { - diff *= 60; + if (!timerRunning()) { + if (&& xy.y > 24 && xy.y < touchMidpoint - 10) { + diff = 1; + } else if (&& xy.y > touchMidpoint + 10 && xy.y < timePickerLayout.btnStart.y) { + diff = -1; + } + if (xy.x < timePickerLayout.hours.w) { + diff *= 3600; + } else if (xy.x > timePickerLayout.mins.x && xy.x < timePickerLayout.secs.x) { + diff *= 60; + } + updateTimePicker(diff); } - updateTimePicker(diff); + } function onButton() { From aad0a48a88d9456249b9b109a0ee4230b02675df Mon Sep 17 00:00:00 2001 From: sir-indy <53864146+sir-indy@users.noreply.github.com> Date: Tue, 3 May 2022 12:33:12 +0100 Subject: [PATCH 156/509] Update app.js Whoops --- apps/smpltmr/app.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/smpltmr/app.js b/apps/smpltmr/app.js index 37d508359..1583663ba 100644 --- a/apps/smpltmr/app.js +++ b/apps/smpltmr/app.js @@ -55,9 +55,9 @@ function onTouch(button, xy) { return; } if (!timerRunning()) { - if (&& xy.y > 24 && xy.y < touchMidpoint - 10) { + if (xy.y > 24 && xy.y < touchMidpoint - 10) { diff = 1; - } else if (&& xy.y > touchMidpoint + 10 && xy.y < timePickerLayout.btnStart.y) { + } else if (xy.y > touchMidpoint + 10 && xy.y < timePickerLayout.btnStart.y) { diff = -1; } if (xy.x < timePickerLayout.hours.w) { From 7d5aa89c2194a03e78b7144e2f9047393e73e25f Mon Sep 17 00:00:00 2001 From: sir-indy <53864146+sir-indy@users.noreply.github.com> Date: Tue, 3 May 2022 12:54:34 +0100 Subject: [PATCH 157/509] Update app.js Fix layout button uninitialised if timer already running. --- apps/smpltmr/app.js | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/apps/smpltmr/app.js b/apps/smpltmr/app.js index 1583663ba..b7511724a 100644 --- a/apps/smpltmr/app.js +++ b/apps/smpltmr/app.js @@ -47,14 +47,15 @@ function onDrag(event) { } function onTouch(button, xy) { - var touchMidpoint = timePickerLayout.hours.y + timePickerLayout.hours.h/2; - var diff = 0; - Bangle.buzz(40, 0.3); - if (xy.y > timePickerLayout.btnStart.y) { + if (xy.y > (timePickerLayout.btnStart.y||timerLayout.btnStart.y)) { + Bangle.buzz(40, 0.3); onButton(); return; } if (!timerRunning()) { + var touchMidpoint = timePickerLayout.hours.y + timePickerLayout.hours.h/2; + var diff = 0; + Bangle.buzz(40, 0.3); if (xy.y > 24 && xy.y < touchMidpoint - 10) { diff = 1; } else if (xy.y > touchMidpoint + 10 && xy.y < timePickerLayout.btnStart.y) { @@ -159,7 +160,7 @@ var timePickerLayout = new Layout({ var timerLayout = new Layout({ type:"v", c: [ {type:"txt", font:"22%", label:"0:00", id:"timer", fillx:1, filly:1 }, - {type:"btn", src:imgPause, cb: l=>timerStop(), fillx:1 } + {type:"btn", src:imgPause, id:"btnStart", cb: l=>timerStop(), fillx:1 } ], filly:1 }); From ce06879fe46844476d4b7cce1c3926fa931fed15 Mon Sep 17 00:00:00 2001 From: Alessandro Cocco Date: Tue, 3 May 2022 21:15:40 +0200 Subject: [PATCH 158/509] [date_utils] Refactor functions, documentation - Use the same names used in locale module (so dow instead of getDOW, month instead of getMonth, etc.) - Add documentation --- modules/date_utils.js | 94 +++++++++++++++++++++++++++---------------- 1 file changed, 60 insertions(+), 34 deletions(-) diff --git a/modules/date_utils.js b/modules/date_utils.js index da0ed24d9..7239d4f1f 100644 --- a/modules/date_utils.js +++ b/modules/date_utils.js @@ -1,39 +1,65 @@ -/* Utility functions that use the 'locale' module so can produce text -in the currently selected language. */ +// module "date_utils" +// +// Utility functions that use the "locale" module so can produce +// date-related text in the currently selected language. +// +// Some functions have a "firstDayOfWeek" parameter. +// Most used values are: +// - 0/undefined --> Sunday +// - 1 --> Monday +// but you can start the week from any day if you need it. +// +// Some functions have an "abbreviated" parameter. +// It supports the following 3 values: +// - 0/undefined --> get the full value, without abbreviation (eg.: "Monday", "January", etc.) +// - 1 --> get the short value (eg.: "Mon", "Jan", etc.) +// - 2 --> get only the first char (eg.: "M", "J", etc.) +// -/** Return the day of the week (0=Sunday) - short==0/undefined -> "Sunday" - short==1 -> "Sun" -*/ -exports.getDOW = (dow, short) => require("locale").dow({getDay:()=>dow},short); - -/** Return the month (1=January) - short==0/undefined -> "January" - short==1 -> "Jan" -*/ -exports.getMonth = (month, short) => require("locale").month({getMonth:()=>month-1},short); - -/** Return all 7 days of the week as an array ["Sunday","Monday",...]. - short==0/undefined -> ["Sunday",... - short==1 -> ["Sun",... - short==2 -> ["S",... -*/ -exports.getDOWs = (short) => { - var locale = require("locale"); - var days = []; - for (var i=0;i<7;i++) - days.push(locale.dow({getDay:()=>i},short).slice(0,(short==2)?1:100)); - return days; +/** + * @param {int} i The index of the day of the week (0 = Sunday) + * @param {int} abbreviated + * @returns The localized name of the i-th day of the week + */ +exports.dow = (i, abbreviated) => { + var dow = require("locale").dow(new Date(((i || 0) + 3.5) * 86400000), abbreviated).slice(0, (abbreviated == 2) ? 1 : 100); + return abbreviated == 2 ? dow.toUpperCase() : dow; } -/** Return all 12 months as an array ["January","February",...] - short==0/undefined -> ["January",... - short==1 -> ["Jan",... -*/ -exports.getMonths = (short) => { +/** + * @param {int} firstDayOfWeek 0/undefined -> Sunday, + * 1 -> Monday + * @param {int} abbreviated + * @returns All 7 days of the week (localized) as an array + */ +exports.dows = (firstDayOfWeek, abbreviated) => { + var dows = []; var locale = require("locale"); + for (var i = 0; i < 7; i++) { + dows.push(exports.dow(i + (firstDayOfWeek || 0), abbreviated)) + } + return abbreviated == 2 ? dows.map(dow => dow.toUpperCase()) : dows; +}; + +/** + * @param {int} i The index of the month (1 = January) + * @param {int} abbreviated + * @returns The localized name of the i-th month + */ +exports.month = (i, abbreviated) => { + var month = require("locale").month(new Date((i - 0.5) * 2628000000), abbreviated).slice(0, (abbreviated == 2) ? 1 : 100); + return abbreviated == 2 ? month.toUpperCase() : month; +} + +/** + * @param {int} abbreviated + * @returns All 12 months (localized) as an array + */ +exports.months = (abbreviated) => { var months = []; - for (var i=0;i<12;i++) - months.push(locale.month({getMonth:()=>i},short)); - return months; -} + var locale = require("locale"); + for (var i = 1; i <= 12; i++) { + months.push(locale.month(new Date((i - 0.5) * 2628000000), abbreviated).slice(0, (abbreviated == 2) ? 1 : 100)); + } + return abbreviated == 2 ? months.map(month => month.toUpperCase()) : months; +}; From 74db2585d714f9328aa9e4b3f20a996a9bdc82eb Mon Sep 17 00:00:00 2001 From: Alessandro Cocco Date: Sun, 1 May 2022 22:42:28 +0200 Subject: [PATCH 159/509] [Settings] Add new option for selecting the first day of the week --- apps/setting/README.md | 2 +- apps/setting/settings.js | 35 +++++++++++++++++++++++------------ 2 files changed, 24 insertions(+), 13 deletions(-) diff --git a/apps/setting/README.md b/apps/setting/README.md index 42e3939fb..77bf70845 100644 --- a/apps/setting/README.md +++ b/apps/setting/README.md @@ -7,7 +7,7 @@ This is Bangle.js's settings menu * **Beep** most Bangle.js do not have a speaker inside, but they can use the vibration motor to beep in different pitches. You can change the behaviour here to use a Piezo speaker if one is connected * **Vibration** enable/disable the vibration motor * **Quiet Mode** prevent notifications/alarms from vibrating/beeping/turning the screen on - see below -* **Locale** set time zone/whether the clock is 12/24 hour (for supported clocks) +* **Locale** set time zone, the time format (12/24h, for supported clocks) and the first day of the week * **Select Clock** if you have more than one clock face, select the default one * **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. diff --git a/apps/setting/settings.js b/apps/setting/settings.js index afc7e23c8..a2a3dfbf0 100644 --- a/apps/setting/settings.js +++ b/apps/setting/settings.js @@ -37,18 +37,19 @@ function internalToG(u) { function resetSettings() { settings = { - ble: true, // Bluetooth enabled by default - blerepl: true, // Is REPL on Bluetooth - can Espruino IDE be used? - log: false, // Do log messages appear on screen? - quiet: 0, // quiet mode: 0: off, 1: priority only, 2: total silence - timeout: 10, // Default LCD timeout in seconds - vibrate: true, // Vibration enabled by default. App must support - beep: BANGLEJS2?true:"vib", // Beep enabled by default. App must support - timezone: 0, // Set the timezone for the device - HID: false, // BLE HID mode, off by default - clock: null, // a string for the default clock's name - "12hour" : false, // 12 or 24 hour clock? - brightness: 1, // LCD brightness from 0 to 1 + ble: true, // Bluetooth enabled by default + blerepl: true, // Is REPL on Bluetooth - can Espruino IDE be used? + log: false, // Do log messages appear on screen? + quiet: 0, // quiet mode: 0: off, 1: priority only, 2: total silence + timeout: 10, // Default LCD timeout in seconds + vibrate: true, // Vibration enabled by default. App must support + beep: BANGLEJS2 ? true : "vib", // Beep enabled by default. App must support + timezone: 0, // Set the timezone for the device + HID: false, // BLE HID mode, off by default + clock: null, // a string for the default clock's name + "12hour" : false, // 12 or 24 hour clock? + firstDayOfWeek: 0, // 0 -> Sunday (default), 1 -> Monday + brightness: 1, // LCD brightness from 0 to 1 // welcomed : undefined/true (whether welcome app should show) options: { wakeOnBTN1: true, @@ -493,6 +494,16 @@ function showLocaleMenu() { settings["12hour"] = v; updateSettings(); } + }, + /*LANG*/'Start Week On': { + value: settings["firstDayOfWeek"] || 0, + min: 0, // Sunday + max: 1, // Monday + format: v => require("date_utils").dow(v, 1), + onchange: v => { + settings["firstDayOfWeek"] = v; + updateSettings(); + }, } }; return E.showMenu(localemenu); From ec4ba0d0a71dd0b1469ec127047dcce7e35617c3 Mon Sep 17 00:00:00 2001 From: Alessandro Cocco Date: Mon, 2 May 2022 11:55:05 +0200 Subject: [PATCH 160/509] [Settings] Fix the time zone format A positive value is shown as '+X' instead of 'X' --- apps/setting/settings.js | 1 + 1 file changed, 1 insertion(+) diff --git a/apps/setting/settings.js b/apps/setting/settings.js index a2a3dfbf0..981a7b864 100644 --- a/apps/setting/settings.js +++ b/apps/setting/settings.js @@ -479,6 +479,7 @@ function showLocaleMenu() { '< Back': ()=>showSystemMenu(), /*LANG*/'Time Zone': { value: settings.timezone, + format: v => (v > 0 ? "+" : "") + v, min: -11, max: 13, step: 0.5, From fdcb965b5e93eb9d3cc3db31fb39e9be0dd05fba Mon Sep 17 00:00:00 2001 From: Alessandro Cocco Date: Mon, 2 May 2022 12:09:06 +0200 Subject: [PATCH 161/509] [Settings] Improve the "Date & Time" menu - Use month name instead of month number - Move the "time" options after the "date" options --- apps/setting/settings.js | 53 ++++++++++++++++++++-------------------- 1 file changed, 27 insertions(+), 26 deletions(-) diff --git a/apps/setting/settings.js b/apps/setting/settings.js index 981a7b864..9b5bdae68 100644 --- a/apps/setting/settings.js +++ b/apps/setting/settings.js @@ -95,7 +95,7 @@ function showSystemMenu() { /*LANG*/'LCD': ()=>showLCDMenu(), /*LANG*/'Locale': ()=>showLocaleMenu(), /*LANG*/'Select Clock': ()=>showClockMenu(), - /*LANG*/'Set Time': ()=>showSetTimeMenu() + /*LANG*/'Date & Time': ()=>showSetTimeMenu() }; return E.showMenu(mainmenu); @@ -488,9 +488,9 @@ function showLocaleMenu() { updateSettings(); } }, - /*LANG*/'Clock Style': { + /*LANG*/'Time Format': { value: !!settings["12hour"], - format: v => v ? "12hr" : "24hr", + format: v => v ? "12h" : "24h", onchange: v => { settings["12hour"] = v; updateSettings(); @@ -618,11 +618,34 @@ function showClockMenu() { function showSetTimeMenu() { d = new Date(); const timemenu = { - '': { 'title': /*LANG*/'Set Time' }, + '': { 'title': /*LANG*/'Date & Time' }, '< Back': function () { setTime(d.getTime() / 1000); showSystemMenu(); }, + /*LANG*/'Day': { + value: d.getDate(), + onchange: function (v) { + this.value = ((v+30)%31)+1; + d.setDate(this.value); + } + }, + /*LANG*/'Month': { + value: d.getMonth() + 1, + format: v => require("date_utils").month(v), + onchange: function (v) { + this.value = ((v+11)%12)+1; + d.setMonth(this.value - 1); + } + }, + /*LANG*/'Year': { + value: d.getFullYear(), + min: 2019, + max: 2100, + onchange: function (v) { + d.setFullYear(v); + } + }, /*LANG*/'Hour': { value: d.getHours(), onchange: function (v) { @@ -643,28 +666,6 @@ function showSetTimeMenu() { this.value = (v+60)%60; d.setSeconds(this.value); } - }, - /*LANG*/'Date': { - value: d.getDate(), - onchange: function (v) { - this.value = ((v+30)%31)+1; - d.setDate(this.value); - } - }, - /*LANG*/'Month': { - value: d.getMonth() + 1, - onchange: function (v) { - this.value = ((v+11)%12)+1; - d.setMonth(this.value - 1); - } - }, - /*LANG*/'Year': { - value: d.getFullYear(), - min: 2019, - max: 2100, - onchange: function (v) { - d.setFullYear(v); - } } }; return E.showMenu(timemenu); From 7abb4c780c28f5b05db4ea78c85d706414fda702 Mon Sep 17 00:00:00 2001 From: Alessandro Cocco Date: Mon, 2 May 2022 12:12:19 +0200 Subject: [PATCH 162/509] [Settings] Update metadata and changelog --- apps/setting/ChangeLog | 2 ++ apps/setting/metadata.json | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/apps/setting/ChangeLog b/apps/setting/ChangeLog index fe259827c..bfd32a130 100644 --- a/apps/setting/ChangeLog +++ b/apps/setting/ChangeLog @@ -46,3 +46,5 @@ 0.41: Stop users disabling all wake-up methods and locking themselves out (fix #1272) 0.42: Fix theme customizer on new Bangle 2 firmware 0.43: Add some Bangle 1 colours to theme customizer +0.44: Add "Start Week On X" option (#1780) + UI improvements to Locale and Date & Time menu diff --git a/apps/setting/metadata.json b/apps/setting/metadata.json index 750752bd7..85dddf9db 100644 --- a/apps/setting/metadata.json +++ b/apps/setting/metadata.json @@ -1,7 +1,7 @@ { "id": "setting", "name": "Settings", - "version": "0.43", + "version": "0.44", "description": "A menu for setting up Bangle.js", "icon": "settings.png", "tags": "tool,system", From ea70f011857389c683e0005ec6fac88574fdff4e Mon Sep 17 00:00:00 2001 From: Alessandro Cocco Date: Tue, 3 May 2022 21:34:03 +0200 Subject: [PATCH 163/509] [Alarms & Timers] Add support for Monday as first day of the week --- apps/alarm/app.js | 119 +++++++++++++++++++++++++++++----------------- 1 file changed, 75 insertions(+), 44 deletions(-) diff --git a/apps/alarm/app.js b/apps/alarm/app.js index 90a62afc5..25c03c3c5 100644 --- a/apps/alarm/app.js +++ b/apps/alarm/app.js @@ -2,10 +2,14 @@ Bangle.loadWidgets(); Bangle.drawWidgets(); // An array of alarm objects (see sched/README.md) -let alarms = require("sched").getAlarms(); +var alarms = require("sched").getAlarms(); + +// 0 = Sunday +// 1 = Monday +var firstDayOfWeek = (require("Storage").readJSON("setting.json", true) || {}).firstDayOfWeek || 0; function getCurrentTime() { - let time = new Date(); + var time = new Date(); return ( time.getHours() * 3600000 + time.getMinutes() * 60000 + @@ -14,6 +18,9 @@ function getCurrentTime() { } function saveAndReload() { + // Before saving revert the dow to the standard format + alarms.forEach(a => a.dow = handleFirstDayOfWeek(a.dow, firstDayOfWeek)); + require("sched").setAlarms(alarms); require("sched").reload(); } @@ -23,30 +30,32 @@ function showMainMenu() { // Alarm img "\0"+atob("FBSBAABgA4YcMPDGP8Zn/mx/48//PP/zD/8A//AP/wD/8A//AP/wH/+D//w//8AAAADwAAYA") const menu = { '': { 'title': /*LANG*/'Alarms&Timers' }, - /*LANG*/'< Back' : ()=>{load();}, - /*LANG*/'New Alarm': ()=>editAlarm(-1), - /*LANG*/'New Timer': ()=>editTimer(-1) + /*LANG*/'< Back': () => { load(); }, + /*LANG*/'New Alarm': () => editAlarm(-1), + /*LANG*/'New Timer': () => editTimer(-1) }; - alarms.forEach((alarm,idx)=>{ - var type,txt; // a leading space is currently required (JS error in Espruino 2v12) + alarms.forEach((alarm, idx) => { + alarm.dow = handleFirstDayOfWeek(alarm.dow, firstDayOfWeek); + + var type, txt; // a leading space is currently required (JS error in Espruino 2v12) if (alarm.timer) { type = /*LANG*/"Timer"; - txt = " "+require("sched").formatTime(alarm.timer); + txt = " " + require("sched").formatTime(alarm.timer); } else { type = /*LANG*/"Alarm"; - txt = " "+require("sched").formatTime(alarm.t); + txt = " " + require("sched").formatTime(alarm.t); } - if (alarm.rp) txt += "\0"+atob("FBaBAAABgAAcAAHn//////wAHsABzAAYwAAMAADAAAAAAwAAMAADGAAzgAN4AD//////54AAOAABgAA="); + if (alarm.rp) txt += "\0" + atob("FBaBAAABgAAcAAHn//////wAHsABzAAYwAAMAADAAAAAAwAAMAADGAAzgAN4AD//////54AAOAABgAA="); // rename duplicate alarms - if (menu[type+txt]) { + if (menu[type + txt]) { var n = 2; - while (menu[type+" "+n+txt]) n++; - txt = type+" "+n+txt; - } else txt = type+txt; + while (menu[type + " " + n + txt]) n++; + txt = type + " " + n + txt; + } else txt = type + txt; // add to menu menu[txt] = { - value : "\0"+atob(alarm.on?"EhKBAH//v/////////////5//x//j//H+eP+Mf/A//h//z//////////3//g":"EhKBAH//v//8AA8AA8AA8AA8AA8AA8AA8AA8AA8AA8AA8AA8AA8AA///3//g"), - onchange : function() { + value: "\0" + atob(alarm.on ? "EhKBAH//v/////////////5//x//j//H+eP+Mf/A//h//z//////////3//g" : "EhKBAH//v//8AA8AA8AA8AA8AA8AA8AA8AA8AA8AA8AA8AA8AA8AA///3//g"), + onchange: function () { setTimeout(alarm.timer ? editTimer : editAlarm, 10, idx, alarm); } }; @@ -69,25 +78,27 @@ function showMainMenu() { function editDOW(dow, onchange) { const menu = { '': { 'title': /*LANG*/'Days of Week' }, - /*LANG*/'< Back' : () => onchange(dow) + /*LANG*/'< Back': () => onchange(dow) }; - for (let i = 0; i < 7; i++) (i => { - let dayOfWeek = require("locale").dow({ getDay: () => i }); - menu[dayOfWeek] = { - value: !!(dow&(1< { + menu[dows[i]] = { + value: !!(dow & (1 << (i + firstDayOfWeek))), format: v => v ? /*LANG*/"Yes" : /*LANG*/"No", - onchange: v => v ? dow |= 1< v ? (dow |= 1 << (i + firstDayOfWeek)) : (dow &= ~(1 << (i + firstDayOfWeek))) }; })(i); E.showMenu(menu); } function editAlarm(alarmIndex, alarm) { - let newAlarm = alarmIndex < 0; - let a = require("sched").newDefaultAlarm(); + var newAlarm = alarmIndex < 0; + var a = require("sched").newDefaultAlarm(); + a.dow = handleFirstDayOfWeek(a.dow, firstDayOfWeek); + if (!newAlarm) Object.assign(a, alarms[alarmIndex]); - if (alarm) Object.assign(a,alarm); - let t = require("sched").decodeTime(a.t); + if (alarm) Object.assign(a, alarm); + var t = require("sched").decodeTime(a.t); const menu = { '': { 'title': /*LANG*/'Alarm' }, @@ -96,17 +107,17 @@ function editAlarm(alarmIndex, alarm) { showMainMenu(); }, /*LANG*/'Hours': { - value: t.hrs, min : 0, max : 23, wrap : true, - onchange: v => t.hrs=v + value: t.hrs, min: 0, max: 23, wrap: true, + onchange: v => t.hrs = v }, /*LANG*/'Minutes': { - value: t.mins, min : 0, max : 59, wrap : true, - onchange: v => t.mins=v + value: t.mins, min: 0, max: 59, wrap: true, + onchange: v => t.mins = v }, /*LANG*/'Enabled': { value: a.on, format: v => v ? /*LANG*/"On" : /*LANG*/"Off", - onchange: v=>a.on=v + onchange: v => a.on = v }, /*LANG*/'Repeat': { value: a.rp, @@ -114,14 +125,14 @@ function editAlarm(alarmIndex, alarm) { onchange: v => a.rp = v }, /*LANG*/'Days': { - value: "SMTWTFS".split("").map((d,n)=>a.dow&(1< setTimeout(editDOW, 100, a.dow, d => { a.dow = d; a.t = require("sched").encodeTime(t); editAlarm(alarmIndex, a); }) }, - /*LANG*/'Vibrate': require("buzz_menu").pattern(a.vibrate, v => a.vibrate=v ), + /*LANG*/'Vibrate': require("buzz_menu").pattern(a.vibrate, v => a.vibrate = v), /*LANG*/'Auto Snooze': { value: a.as, format: v => v ? /*LANG*/"Yes" : /*LANG*/"No", @@ -156,11 +167,11 @@ function saveAlarm(newAlarm, alarmIndex, a, t) { } function editTimer(alarmIndex, alarm) { - let newAlarm = alarmIndex < 0; - let a = require("sched").newDefaultTimer(); + var newAlarm = alarmIndex < 0; + var a = require("sched").newDefaultTimer(); if (!newAlarm) Object.assign(a, alarms[alarmIndex]); - if (alarm) Object.assign(a,alarm); - let t = require("sched").decodeTime(a.timer); + if (alarm) Object.assign(a, alarm); + var t = require("sched").decodeTime(a.timer); const menu = { '': { 'title': /*LANG*/'Timer' }, @@ -169,26 +180,26 @@ function editTimer(alarmIndex, alarm) { showMainMenu(); }, /*LANG*/'Hours': { - value: t.hrs, min : 0, max : 23, wrap : true, - onchange: v => t.hrs=v + value: t.hrs, min: 0, max: 23, wrap: true, + onchange: v => t.hrs = v }, /*LANG*/'Minutes': { - value: t.mins, min : 0, max : 59, wrap : true, - onchange: v => t.mins=v + value: t.mins, min: 0, max: 59, wrap: true, + onchange: v => t.mins = v }, /*LANG*/'Enabled': { value: a.on, format: v => v ? /*LANG*/"On" : /*LANG*/"Off", onchange: v => a.on = v }, - /*LANG*/'Vibrate': require("buzz_menu").pattern(a.vibrate, v => a.vibrate=v ), + /*LANG*/'Vibrate': require("buzz_menu").pattern(a.vibrate, v => a.vibrate = v), }; menu[/*LANG*/"Cancel"] = () => showMainMenu(); if (!newAlarm) { - menu[/*LANG*/"Delete"] = function() { - alarms.splice(alarmIndex,1); + menu[/*LANG*/"Delete"] = function () { + alarms.splice(alarmIndex, 1); saveAndReload(); showMainMenu(); }; @@ -210,6 +221,26 @@ function saveTimer(newAlarm, alarmIndex, a, t) { saveAndReload(); } +function handleFirstDayOfWeek(dow, firstDayOfWeek) { + if (firstDayOfWeek == 1) { + if ((dow & 1) == 1) { + // By default 1 = Sunday. + // Here the week starts on Monday and Sunday is ON so move Sunday to 128. + dow += 127; + } else if ((dow & 128) == 128) { + dow -= 127; + } + } + return dow; +} + +function decodeDOW(dow) { + return require("date_utils") + .dows(firstDayOfWeek, 2) + .map((day, index) => dow & (1 << (index + firstDayOfWeek)) ? day : "_") + .join(""); +} + function enableAll(on) { E.showPrompt(/*LANG*/"Are you sure?", { title: on ? /*LANG*/"Enable All" : /*LANG*/"Disable All" From 4d4eccb821c4daf5e2e363fdb585f2c36f2c8752 Mon Sep 17 00:00:00 2001 From: Alessandro Cocco Date: Tue, 3 May 2022 22:01:04 +0200 Subject: [PATCH 164/509] [Alarms & Timers] Update metadata and changelog --- apps/alarm/ChangeLog | 1 + apps/alarm/metadata.json | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/apps/alarm/ChangeLog b/apps/alarm/ChangeLog index 9daf7bcbf..ca1417b5b 100644 --- a/apps/alarm/ChangeLog +++ b/apps/alarm/ChangeLog @@ -25,3 +25,4 @@ 0.24: Automatically save the alarm/timer when the user returns to the main menu using the back arrow Add "Enable All", "Disable All" and "Remove All" actions 0.25: Fix redrawing selected Alarm/Timer entry inside edit submenu +0.26: Add support for Monday as first day of the week (#1780) diff --git a/apps/alarm/metadata.json b/apps/alarm/metadata.json index 33312beb6..c062b030d 100644 --- a/apps/alarm/metadata.json +++ b/apps/alarm/metadata.json @@ -2,7 +2,7 @@ "id": "alarm", "name": "Alarms & Timers", "shortName": "Alarms", - "version": "0.25", + "version": "0.26", "description": "Set alarms and timers on your Bangle", "icon": "app.png", "tags": "tool,alarm,widget", From 0ac5822d7a683fce97b59e152580cf5df89db75f Mon Sep 17 00:00:00 2001 From: Gordon Williams Date: Wed, 4 May 2022 08:33:40 +0100 Subject: [PATCH 165/509] update readme for https://github.com/espruino/BangleApps/pull/1773 --- apps/setting/README.md | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/apps/setting/README.md b/apps/setting/README.md index 77bf70845..451b48c06 100644 --- a/apps/setting/README.md +++ b/apps/setting/README.md @@ -9,7 +9,7 @@ This is Bangle.js's settings menu * **Quiet Mode** prevent notifications/alarms from vibrating/beeping/turning the screen on - see below * **Locale** set time zone, the time format (12/24h, for supported clocks) and the first day of the week * **Select Clock** if you have more than one clock face, select the default one -* **Set Time** Configure the current time - Note that this can be done much more easily by choosing 'Set Time' from the App Loader +* **Date & 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 * **Utils** Utilities - including resetting settings (see below) @@ -35,11 +35,15 @@ This is Bangle.js's settings menu `Wake on Touch` actually uses the accelerometer, and you need to actually tap the display to wake Bangle.js. * **Twist X** these options adjust the sensitivity of `Wake on Twist` to ensure Bangle.js wakes up with just the right amount of wrist movement. +## Locale +* **Time Zone** your current Time zone. This is usually set automatically by the App Loader +* **Time Format** whether you want a 24 or 12 hour clock. However not all clocks will honour this. +* **Start Week On** start the displayed week on Sunday, or Monday. This currently only applies to the Alarm app. ## Quiet Mode -Quiet Mode is a hint to apps and widgets that you do not want to be disturbed. +Quiet Mode is a hint to apps and widgets that you do not want to be disturbed. The exact effects depend on the app. In general the watch will not wake up by itself, but will still respond to button presses. * **Quiet Mode** From 00ccc21fe74f55b89946cce4ec77f02e538dc44f Mon Sep 17 00:00:00 2001 From: Alessandro Cocco Date: Wed, 4 May 2022 10:34:34 +0200 Subject: [PATCH 166/509] [Alarms & Timers] Code quality fix https://github.com/espruino/BangleApps/pull/1773#pullrequestreview-961431288 --- apps/alarm/app.js | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/apps/alarm/app.js b/apps/alarm/app.js index 25c03c3c5..0d4c7c7ee 100644 --- a/apps/alarm/app.js +++ b/apps/alarm/app.js @@ -80,14 +80,15 @@ function editDOW(dow, onchange) { '': { 'title': /*LANG*/'Days of Week' }, /*LANG*/'< Back': () => onchange(dow) }; - var dows = require("date_utils").dows(firstDayOfWeek); - for (var i = 0; i < 7; i++) (i => { - menu[dows[i]] = { + + require("date_utils").dows(firstDayOfWeek).forEach((day, i) => (i => { + menu[day] = { value: !!(dow & (1 << (i + firstDayOfWeek))), format: v => v ? /*LANG*/"Yes" : /*LANG*/"No", onchange: v => v ? (dow |= 1 << (i + firstDayOfWeek)) : (dow &= ~(1 << (i + firstDayOfWeek))) }; - })(i); + })(i)); + E.showMenu(menu); } From 8d499a10b4b58ca875694602776c618f16d7fcf3 Mon Sep 17 00:00:00 2001 From: Gordon Williams Date: Wed, 4 May 2022 09:42:27 +0100 Subject: [PATCH 167/509] minor tweak --- apps/alarm/app.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/alarm/app.js b/apps/alarm/app.js index 0d4c7c7ee..cf46823d6 100644 --- a/apps/alarm/app.js +++ b/apps/alarm/app.js @@ -81,13 +81,13 @@ function editDOW(dow, onchange) { /*LANG*/'< Back': () => onchange(dow) }; - require("date_utils").dows(firstDayOfWeek).forEach((day, i) => (i => { + require("date_utils").dows(firstDayOfWeek).forEach((day, i) => { menu[day] = { value: !!(dow & (1 << (i + firstDayOfWeek))), format: v => v ? /*LANG*/"Yes" : /*LANG*/"No", onchange: v => v ? (dow |= 1 << (i + firstDayOfWeek)) : (dow &= ~(1 << (i + firstDayOfWeek))) }; - })(i)); + }); E.showMenu(menu); } From c94b8be6292b55d1ec5351fbfa42b391658de2f6 Mon Sep 17 00:00:00 2001 From: sir-indy <53864146+sir-indy@users.noreply.github.com> Date: Wed, 4 May 2022 10:18:48 +0100 Subject: [PATCH 168/509] Update Layout.js Removed as per https://github.com/espruino/BangleApps/pull/1788#discussion_r863924717 --- modules/Layout.js | 2 -- 1 file changed, 2 deletions(-) diff --git a/modules/Layout.js b/modules/Layout.js index f2ebc418a..c978c611b 100644 --- a/modules/Layout.js +++ b/modules/Layout.js @@ -231,8 +231,6 @@ Layout.prototype.render = function (l) { g.setFont(l.font).setFontAlign(0,0,l.r).drawString(l.label, l.x+(l.w>>1), l.y+(l.h>>1)); } }, "btn":function(l){ - if (l.font && l.font.endsWith("%")) - l.font = "Vector"+Math.round(g.getHeight()*l.font.slice(0,-1)/100); 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 = [ From ffcba2a8fe0a9a4cdd2d5870fb81ae8fc0329b1f Mon Sep 17 00:00:00 2001 From: sir-indy <53864146+sir-indy@users.noreply.github.com> Date: Wed, 4 May 2022 10:19:59 +0100 Subject: [PATCH 169/509] Update app.js Tweak colours --- apps/smpltmr/app.js | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/apps/smpltmr/app.js b/apps/smpltmr/app.js index b7511724a..4e95d3a30 100644 --- a/apps/smpltmr/app.js +++ b/apps/smpltmr/app.js @@ -135,22 +135,22 @@ var timePickerLayout = new Layout({ {type:undefined, height:2}, {type:"h", c: [ {type:"v", width:g.getWidth()/3, c: [ - {type:"txt", font:"6x8", label:/*LANG*/"Hours", col:g.theme.fg2}, - {type:"img", pad:8, src:imgArrow, col:g.theme.fg2}, + {type:"txt", font:"6x8", label:/*LANG*/"Hours"}, + {type:"img", pad:8, src:imgArrow}, {type:"txt", font:"20%", label:"00", id:"hours", filly:1, fillx:1}, - {type:"img", pad:8, src:imgArrow, col:g.theme.fg2, r:2} + {type:"img", pad:8, src:imgArrow, r:2} ]}, {type:"v", width:g.getWidth()/3, c: [ - {type:"txt", font:"6x8", label:/*LANG*/"Minutes", col:g.theme.fg2}, - {type:"img", pad:8, src:imgArrow, col:g.theme.fg2}, + {type:"txt", font:"6x8", label:/*LANG*/"Minutes"}, + {type:"img", pad:8, src:imgArrow}, {type:"txt", font:"20%", label:"00", id:"mins", filly:1, fillx:1}, - {type:"img", pad:8, src:imgArrow, col:g.theme.fg2, r:2} + {type:"img", pad:8, src:imgArrow, r:2} ]}, {type:"v", width:g.getWidth()/3, c: [ - {type:"txt", font:"6x8", label:/*LANG*/"Seconds", col:g.theme.fg2}, - {type:"img", pad:8, src:imgArrow, col:g.theme.fg2}, + {type:"txt", font:"6x8", label:/*LANG*/"Seconds"}, + {type:"img", pad:8, src:imgArrow}, {type:"txt", font:"20%", label:"00", id:"secs", filly:1, fillx:1}, - {type:"img", pad:8, src:imgArrow, col:g.theme.fg2, r:2} + {type:"img", pad:8, src:imgArrow, r:2} ]}, ]}, {type:"btn", src:imgPlay, id:"btnStart", fillx:1 } From 90e3915e24a3d471d6f98827d630ed17a138a74e Mon Sep 17 00:00:00 2001 From: Gordon Williams Date: Wed, 4 May 2022 11:08:36 +0100 Subject: [PATCH 170/509] fix test regression --- tests/Layout/bin/runtest.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/Layout/bin/runtest.sh b/tests/Layout/bin/runtest.sh index c85b3fe6c..e06dec86b 100755 --- a/tests/Layout/bin/runtest.sh +++ b/tests/Layout/bin/runtest.sh @@ -19,7 +19,7 @@ SRCBMP=$SRCDIR/`basename $SRCJS .js`.bmp echo "TEST $SRCJS ($SRCBMP)" cat ../../modules/Layout.js > $TESTJS -echo 'Bangle = { setUI : function(){} };BTN1=0;process.env = process.env;process.env.HWVERSION=2;' >> $TESTJS +echo 'Bangle = { setUI : function(){}, appRect:{x:0,y:0,w:176,h:176,x2:175,y2:175} };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 From ad038d4c344dd26165f5e97fba2695245d8d2973 Mon Sep 17 00:00:00 2001 From: Gordon Williams Date: Wed, 4 May 2022 11:22:23 +0100 Subject: [PATCH 171/509] updated layout tests --- tests/Layout/tests/buttons_1_bangle1.js | 1 + tests/Layout/tests/buttons_3_bangle1.js | 1 + tests/Layout/tests/buttons_osd_bangle1.js | 1 + tests/Layout/tests/padding.bmp | Bin 15562 -> 15562 bytes tests/Layout/tests/padding_with_fill.bmp | Bin 15562 -> 15562 bytes 5 files changed, 3 insertions(+) diff --git a/tests/Layout/tests/buttons_1_bangle1.js b/tests/Layout/tests/buttons_1_bangle1.js index fb6fb29fa..481f09df3 100644 --- a/tests/Layout/tests/buttons_1_bangle1.js +++ b/tests/Layout/tests/buttons_1_bangle1.js @@ -1,6 +1,7 @@ var BTN2 = 1, BTN3=2; process.env = process.env;process.env.HWVERSION=1; g = Graphics.createArrayBuffer(240,240,4); +Bangle.appRect = {x:0,y:0,w:240,h:240,x2:239,y2:239}; var layout = new Layout({ type: "v", c: [ {type:"txt", font:"6x8", label:"A test"}, diff --git a/tests/Layout/tests/buttons_3_bangle1.js b/tests/Layout/tests/buttons_3_bangle1.js index c8346f449..2d5fbea9d 100644 --- a/tests/Layout/tests/buttons_3_bangle1.js +++ b/tests/Layout/tests/buttons_3_bangle1.js @@ -1,6 +1,7 @@ var BTN2 = 1, BTN3=2; process.env = process.env;process.env.HWVERSION=1; g = Graphics.createArrayBuffer(240,240,4); +Bangle.appRect = {x:0,y:0,w:240,h:240,x2:239,y2:239}; var layout = new Layout({ type: "v", c: [ {type:"txt", font:"6x8", label:"A test"}, diff --git a/tests/Layout/tests/buttons_osd_bangle1.js b/tests/Layout/tests/buttons_osd_bangle1.js index 108cb62b0..55656ef33 100644 --- a/tests/Layout/tests/buttons_osd_bangle1.js +++ b/tests/Layout/tests/buttons_osd_bangle1.js @@ -1,6 +1,7 @@ var BTN2 = 1, BTN3=2; process.env = process.env;process.env.HWVERSION=1; g = Graphics.createArrayBuffer(240,240,4); +Bangle.appRect = {x:0,y:0,w:240,h:240,x2:239,y2:239}; /* When displaying OSD buttons on Bangle.js 1 we should turn the side buttons into 'soft' buttons and then use the physical diff --git a/tests/Layout/tests/padding.bmp b/tests/Layout/tests/padding.bmp index 84ae4dc1bcdebea1b531156b07448700812f843a..506bb014e9377b9f38cff65596c80e7d98ccf5f1 100644 GIT binary patch delta 687 zcmX?Ad8%^5B-Y6fv@Nk>1vak9uUI2Dzh-3;pRB;fI{BlF#N> z5(8-lOMYNL0sP34^HHRL9FSI+PBe`S3?QvwH~p6rWd^DwhYfTR*i!!g9~k(-5aa}? zVQ@*P6hGK`I3)jLm4q0}k5A_Z?2`XK@c;i0auNuT>AT5DAp;70oIwbZ#2fhNT2Z16 ZXM___fbD18FcA^>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 diff --git a/tests/Layout/tests/padding_with_fill.bmp b/tests/Layout/tests/padding_with_fill.bmp index 9f82ed09f1dae4357bbd77875d3cc8af90b91f33..92eccace27083c9808fd5491bf1a4be83c9ef298 100644 GIT binary patch delta 256 zcmX?Ad8%@QDa&L9CgaTlEHx~XW0)c~_i*U4OqOR7-F%K`4b$W--iXOn{5g~Bc-<%K z3J6X17h>J~hToMDtinz373bs&k`bE?q&G8f?w0$<%E|x#0|P$@PTr`fI{Ckn7AKg8 zRpdWH4MZ0|hOQ4tBL6?||Njp)d9%J|9>?TB#&DK828QR81@%H$9=v@Aw|P154Judk0b#3KWgltf2RnY4a>I12zCtC{_3X delta 449 zcmX?Ad8%@QDa+O?*P+bXR0Zs`t7yZZKA|!ESoBt#E0GBw}#~^?INA&@w_~v?zy^ND{R3kRqXl-Ph zT%g;*T=(wz From 2a0b354b05fb721f43fcfc44d8cf332d58810b9a Mon Sep 17 00:00:00 2001 From: David Peer Date: Wed, 4 May 2022 22:25:56 +0200 Subject: [PATCH 172/509] Use Bangle.getHealthStatus("day").steps as fallback. --- apps/notanalog/ChangeLog | 3 ++- apps/notanalog/metadata.json | 2 +- apps/notanalog/notanalog.app.js | 12 +++++++----- 3 files changed, 10 insertions(+), 7 deletions(-) diff --git a/apps/notanalog/ChangeLog b/apps/notanalog/ChangeLog index 6515f787c..07430406a 100644 --- a/apps/notanalog/ChangeLog +++ b/apps/notanalog/ChangeLog @@ -1,4 +1,5 @@ 0.01: Launch app. 0.02: 12k steps are 360 degrees - improves readability of steps. 0.03: Battery improvements through sleep (no minute updates) and partial updates of drawing. -0.04: Use alarm for timer instead of own alarm implementation. \ No newline at end of file +0.04: Use alarm for timer instead of own alarm implementation. +0.05: Use internal step counter if no widget is available. \ No newline at end of file diff --git a/apps/notanalog/metadata.json b/apps/notanalog/metadata.json index 0a291b180..81d79f4f2 100644 --- a/apps/notanalog/metadata.json +++ b/apps/notanalog/metadata.json @@ -3,7 +3,7 @@ "name": "Not Analog", "shortName":"Not Analog", "icon": "notanalog.png", - "version":"0.04", + "version":"0.05", "readme": "README.md", "supports": ["BANGLEJS2"], "description": "An analog watch face for people that can not read analog watch faces.", diff --git a/apps/notanalog/notanalog.app.js b/apps/notanalog/notanalog.app.js index c3dc9308f..4d460cd3c 100644 --- a/apps/notanalog/notanalog.app.js +++ b/apps/notanalog/notanalog.app.js @@ -88,20 +88,22 @@ Graphics.prototype.setNormalFont = function(scale) { }; - function getSteps() { + var steps = 0; try{ if (WIDGETS.wpedom !== undefined) { - return WIDGETS.wpedom.getSteps(); + steps = WIDGETS.wpedom.getSteps(); } else if (WIDGETS.activepedom !== undefined) { - return WIDGETS.activepedom.getSteps(); + steps = WIDGETS.activepedom.getSteps(); + } else { + steps = Bangle.getHealthStatus("day").steps; } } catch(ex) { // In case we failed, we can only show 0 steps. } - return 0; - } + return steps; +} function drawBackground() { From d4ecf16616c0d6411831c0bb14749e1982c797cf Mon Sep 17 00:00:00 2001 From: David Peer Date: Wed, 4 May 2022 22:31:11 +0200 Subject: [PATCH 173/509] FIrst queue draw... --- apps/notanalog/notanalog.app.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/apps/notanalog/notanalog.app.js b/apps/notanalog/notanalog.app.js index 4d460cd3c..3c01a921e 100644 --- a/apps/notanalog/notanalog.app.js +++ b/apps/notanalog/notanalog.app.js @@ -291,6 +291,9 @@ function drawSleep(){ function draw(fastUpdate){ + // Queue draw in one minute + queueDraw(); + // Execute handlers handleState(fastUpdate); @@ -322,9 +325,6 @@ function draw(fastUpdate){ drawState(); drawTime(); drawData(); - - // Queue draw in one minute - queueDraw(); } From 1d22050dc65951fe9ae067a7d52d2fa316891c0b Mon Sep 17 00:00:00 2001 From: Erik Andresen Date: Wed, 4 May 2022 22:58:45 +0200 Subject: [PATCH 174/509] sched: add day of week check to getActiveAlarms() --- apps/sched/ChangeLog | 2 +- apps/sched/lib.js | 7 ++++++- apps/sched/metadata.json | 2 +- 3 files changed, 8 insertions(+), 3 deletions(-) diff --git a/apps/sched/ChangeLog b/apps/sched/ChangeLog index 717763e19..914bd7002 100644 --- a/apps/sched/ChangeLog +++ b/apps/sched/ChangeLog @@ -6,4 +6,4 @@ 0.06: Refactor some methods to library 0.07: Update settings Correct `decodeTime(t)` to return a more likely expected time - +0.08: add day of week check to getActiveAlarms() diff --git a/apps/sched/lib.js b/apps/sched/lib.js index 891776263..9d2d0c636 100644 --- a/apps/sched/lib.js +++ b/apps/sched/lib.js @@ -15,7 +15,12 @@ exports.getActiveAlarms = function(alarms, time) { if (!time) time = new Date(); var currentTime = (time.getHours()*3600000)+(time.getMinutes()*60000)+(time.getSeconds()*1000) +10000;// get current time - 10s in future to ensure we alarm if we've started the app a tad early - return alarms.filter(a=>a.on&&(a.ta.t-b.t); + return alarms.filter(a=>a.on + &&(a.t> (time).getDay() & 1)) + .sort((a,b)=>a.t-b.t); } // Set an alarm object based on ID. Leave 'alarm' undefined to remove it exports.setAlarm = function(id, alarm) { diff --git a/apps/sched/metadata.json b/apps/sched/metadata.json index c41e5b5b3..089fffe31 100644 --- a/apps/sched/metadata.json +++ b/apps/sched/metadata.json @@ -1,7 +1,7 @@ { "id": "sched", "name": "Scheduler", - "version": "0.07", + "version": "0.08", "description": "Scheduling library for alarms and timers", "icon": "app.png", "type": "scheduler", From 43d696e90b3017f337e23598fc20602301deae0e Mon Sep 17 00:00:00 2001 From: Erik Andresen Date: Wed, 4 May 2022 23:09:04 +0200 Subject: [PATCH 175/509] sched: Fix typo --- apps/sched/lib.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/sched/lib.js b/apps/sched/lib.js index 9d2d0c636..ff35c94cb 100644 --- a/apps/sched/lib.js +++ b/apps/sched/lib.js @@ -19,7 +19,7 @@ exports.getActiveAlarms = function(alarms, time) { &&(a.t> (time).getDay() & 1)) + && a.dow >> (time).getDay() & 1) .sort((a,b)=>a.t-b.t); } // Set an alarm object based on ID. Leave 'alarm' undefined to remove it From 6fafba454db7581ed66cf55a6915dc75eb63175d Mon Sep 17 00:00:00 2001 From: Erik Andresen Date: Wed, 4 May 2022 23:40:21 +0200 Subject: [PATCH 176/509] calendar - Do not register as watch, manually start clock on button (Compatibility with Quick Launch) - Read start of week from new system settings instead of own configuration --- apps/calendar/ChangeLog | 2 ++ apps/calendar/calendar.js | 23 +++++++++++------------ apps/calendar/metadata.json | 2 +- apps/calendar/settings.js | 10 ---------- 4 files changed, 14 insertions(+), 23 deletions(-) diff --git a/apps/calendar/ChangeLog b/apps/calendar/ChangeLog index cc8bb6306..ea8934f84 100644 --- a/apps/calendar/ChangeLog +++ b/apps/calendar/ChangeLog @@ -5,3 +5,5 @@ 0.05: Update calendar weekend colors for start on Sunday 0.06: Use larger font for dates 0.07: Fix off-by-one-error on previous month +0.08: Do not register as watch, manually start clock on button + read start of week from system settings diff --git a/apps/calendar/calendar.js b/apps/calendar/calendar.js index 3f4315811..fc7e93cf5 100644 --- a/apps/calendar/calendar.js +++ b/apps/calendar/calendar.js @@ -18,8 +18,7 @@ const blue = "#0000ff"; const yellow = "#ffff00"; let settings = require('Storage').readJSON("calendar.json", true) || {}; -if (settings.startOnSun === undefined) - settings.startOnSun = false; +let startOnSun = ((require("Storage").readJSON("setting.json", true) || {}).firstDayOfWeek || 0) === 0; if (settings.ndColors === undefined) if (process.env.HWVERSION == 2) { settings.ndColors = true; @@ -50,14 +49,14 @@ function getDowLbls(locale) { case "de_AT": case "de_CH": case "de_DE": - if (settings.startOnSun) { + if (startOnSun) { dowLbls = ["So", "Mo", "Di", "Mi", "Do", "Fr", "Sa"]; } else { dowLbls = ["Mo", "Di", "Mi", "Do", "Fr", "Sa", "So"]; } break; case "nl_NL": - if (settings.startOnSun) { + if (startOnSun) { dowLbls = ["zo", "ma", "di", "wo", "do", "vr", "za"]; } else { dowLbls = ["ma", "di", "wo", "do", "vr", "za", "zo"]; @@ -66,14 +65,14 @@ function getDowLbls(locale) { case "fr_BE": case "fr_CH": case "fr_FR": - if (settings.startOnSun) { + if (startOnSun) { dowLbls = ["Di", "Lu", "Ma", "Me", "Je", "Ve", "Sa"]; } else { dowLbls = ["Lu", "Ma", "Me", "Je", "Ve", "Sa", "Di"]; } break; case "sv_SE": - if (settings.startOnSun) { + if (startOnSun) { dowLbls = ["Di", "Lu", "Ma", "Me", "Je", "Ve", "Sa"]; } else { dowLbls = ["Lu", "Ma", "Me", "Je", "Ve", "Sa", "Di"]; @@ -81,21 +80,21 @@ function getDowLbls(locale) { break; case "it_CH": case "it_IT": - if (settings.startOnSun) { + if (startOnSun) { dowLbls = ["Do", "Lu", "Ma", "Me", "Gi", "Ve", "Sa"]; } else { dowLbls = ["Lu", "Ma", "Me", "Gi", "Ve", "Sa", "Do"]; } break; case "oc_FR": - if (settings.startOnSun) { + if (startOnSun) { dowLbls = ["dg", "dl", "dm", "dc", "dj", "dv", "ds"]; } else { dowLbls = ["dl", "dm", "dc", "dj", "dv", "ds", "dg"]; } break; default: - if (settings.startOnSun) { + if (startOnSun) { dowLbls = ["Su", "Mo", "Tu", "We", "Th", "Fr", "Sa"]; } else { dowLbls = ["Mo", "Tu", "We", "Th", "Fr", "Sa", "Su"]; @@ -110,7 +109,7 @@ function drawCalendar(date) { g.clearRect(0, 0, maxX, maxY); g.setBgColor(bgColorMonth); g.clearRect(0, 0, maxX, headerH); - if (settings.startOnSun){ + if (startOnSun){ g.setBgColor(bgColorWeekend); g.clearRect(0, headerH + rowH, colW, maxY); g.setBgColor(bgColorDow); @@ -150,7 +149,7 @@ function drawCalendar(date) { }); date.setDate(1); - const dow = date.getDay() + (settings.startOnSun ? 1 : 0); + const dow = date.getDay() + (startOnSun ? 1 : 0); const dowNorm = dow === 0 ? 7 : dow; const monthMaxDayMap = { @@ -242,5 +241,5 @@ Bangle.on("touch", area => { }); // Show launcher when button pressed -Bangle.setUI("clock"); // TODO: ideally don't set 'clock' mode +setWatch(() => load(), process.env.HWVERSION === 2 ? BTN : BTN3, { repeat: false, edge: "falling" }); // No space for widgets! diff --git a/apps/calendar/metadata.json b/apps/calendar/metadata.json index 62d2513ae..5f968b364 100644 --- a/apps/calendar/metadata.json +++ b/apps/calendar/metadata.json @@ -1,7 +1,7 @@ { "id": "calendar", "name": "Calendar", - "version": "0.07", + "version": "0.08", "description": "Simple calendar", "icon": "calendar.png", "screenshots": [{"url":"screenshot_calendar.png"}], diff --git a/apps/calendar/settings.js b/apps/calendar/settings.js index 3c8f7d8e8..192d2ece0 100644 --- a/apps/calendar/settings.js +++ b/apps/calendar/settings.js @@ -1,8 +1,6 @@ (function (back) { var FILE = "calendar.json"; var settings = require('Storage').readJSON(FILE, true) || {}; - if (settings.startOnSun === undefined) - settings.startOnSun = false; if (settings.ndColors === undefined) if (process.env.HWVERSION == 2) { settings.ndColors = true; @@ -17,14 +15,6 @@ E.showMenu({ "": { "title": "Calendar" }, "< Back": () => back(), - 'Start Sunday': { - value: settings.startOnSun, - format: v => v ? "Yes" : "No", - onchange: v => { - settings.startOnSun = v; - writeSettings(); - } - }, 'B2 Colors': { value: settings.ndColors, format: v => v ? "Yes" : "No", From 500309e217f5f05afab51ad537fddd21f9e8d08d Mon Sep 17 00:00:00 2001 From: Erik Andresen Date: Wed, 4 May 2022 23:40:21 +0200 Subject: [PATCH 177/509] calendar - Do not register as watch, manually start clock on button (Compatibility with Quick Launch) - Read start of week from new system settings instead of own configuration --- apps/calendar/ChangeLog | 2 ++ apps/calendar/calendar.js | 23 +++++++++++------------ apps/calendar/metadata.json | 2 +- apps/calendar/settings.js | 10 ---------- 4 files changed, 14 insertions(+), 23 deletions(-) diff --git a/apps/calendar/ChangeLog b/apps/calendar/ChangeLog index cc8bb6306..ea8934f84 100644 --- a/apps/calendar/ChangeLog +++ b/apps/calendar/ChangeLog @@ -5,3 +5,5 @@ 0.05: Update calendar weekend colors for start on Sunday 0.06: Use larger font for dates 0.07: Fix off-by-one-error on previous month +0.08: Do not register as watch, manually start clock on button + read start of week from system settings diff --git a/apps/calendar/calendar.js b/apps/calendar/calendar.js index 3f4315811..fc7e93cf5 100644 --- a/apps/calendar/calendar.js +++ b/apps/calendar/calendar.js @@ -18,8 +18,7 @@ const blue = "#0000ff"; const yellow = "#ffff00"; let settings = require('Storage').readJSON("calendar.json", true) || {}; -if (settings.startOnSun === undefined) - settings.startOnSun = false; +let startOnSun = ((require("Storage").readJSON("setting.json", true) || {}).firstDayOfWeek || 0) === 0; if (settings.ndColors === undefined) if (process.env.HWVERSION == 2) { settings.ndColors = true; @@ -50,14 +49,14 @@ function getDowLbls(locale) { case "de_AT": case "de_CH": case "de_DE": - if (settings.startOnSun) { + if (startOnSun) { dowLbls = ["So", "Mo", "Di", "Mi", "Do", "Fr", "Sa"]; } else { dowLbls = ["Mo", "Di", "Mi", "Do", "Fr", "Sa", "So"]; } break; case "nl_NL": - if (settings.startOnSun) { + if (startOnSun) { dowLbls = ["zo", "ma", "di", "wo", "do", "vr", "za"]; } else { dowLbls = ["ma", "di", "wo", "do", "vr", "za", "zo"]; @@ -66,14 +65,14 @@ function getDowLbls(locale) { case "fr_BE": case "fr_CH": case "fr_FR": - if (settings.startOnSun) { + if (startOnSun) { dowLbls = ["Di", "Lu", "Ma", "Me", "Je", "Ve", "Sa"]; } else { dowLbls = ["Lu", "Ma", "Me", "Je", "Ve", "Sa", "Di"]; } break; case "sv_SE": - if (settings.startOnSun) { + if (startOnSun) { dowLbls = ["Di", "Lu", "Ma", "Me", "Je", "Ve", "Sa"]; } else { dowLbls = ["Lu", "Ma", "Me", "Je", "Ve", "Sa", "Di"]; @@ -81,21 +80,21 @@ function getDowLbls(locale) { break; case "it_CH": case "it_IT": - if (settings.startOnSun) { + if (startOnSun) { dowLbls = ["Do", "Lu", "Ma", "Me", "Gi", "Ve", "Sa"]; } else { dowLbls = ["Lu", "Ma", "Me", "Gi", "Ve", "Sa", "Do"]; } break; case "oc_FR": - if (settings.startOnSun) { + if (startOnSun) { dowLbls = ["dg", "dl", "dm", "dc", "dj", "dv", "ds"]; } else { dowLbls = ["dl", "dm", "dc", "dj", "dv", "ds", "dg"]; } break; default: - if (settings.startOnSun) { + if (startOnSun) { dowLbls = ["Su", "Mo", "Tu", "We", "Th", "Fr", "Sa"]; } else { dowLbls = ["Mo", "Tu", "We", "Th", "Fr", "Sa", "Su"]; @@ -110,7 +109,7 @@ function drawCalendar(date) { g.clearRect(0, 0, maxX, maxY); g.setBgColor(bgColorMonth); g.clearRect(0, 0, maxX, headerH); - if (settings.startOnSun){ + if (startOnSun){ g.setBgColor(bgColorWeekend); g.clearRect(0, headerH + rowH, colW, maxY); g.setBgColor(bgColorDow); @@ -150,7 +149,7 @@ function drawCalendar(date) { }); date.setDate(1); - const dow = date.getDay() + (settings.startOnSun ? 1 : 0); + const dow = date.getDay() + (startOnSun ? 1 : 0); const dowNorm = dow === 0 ? 7 : dow; const monthMaxDayMap = { @@ -242,5 +241,5 @@ Bangle.on("touch", area => { }); // Show launcher when button pressed -Bangle.setUI("clock"); // TODO: ideally don't set 'clock' mode +setWatch(() => load(), process.env.HWVERSION === 2 ? BTN : BTN3, { repeat: false, edge: "falling" }); // No space for widgets! diff --git a/apps/calendar/metadata.json b/apps/calendar/metadata.json index 62d2513ae..5f968b364 100644 --- a/apps/calendar/metadata.json +++ b/apps/calendar/metadata.json @@ -1,7 +1,7 @@ { "id": "calendar", "name": "Calendar", - "version": "0.07", + "version": "0.08", "description": "Simple calendar", "icon": "calendar.png", "screenshots": [{"url":"screenshot_calendar.png"}], diff --git a/apps/calendar/settings.js b/apps/calendar/settings.js index 3c8f7d8e8..192d2ece0 100644 --- a/apps/calendar/settings.js +++ b/apps/calendar/settings.js @@ -1,8 +1,6 @@ (function (back) { var FILE = "calendar.json"; var settings = require('Storage').readJSON(FILE, true) || {}; - if (settings.startOnSun === undefined) - settings.startOnSun = false; if (settings.ndColors === undefined) if (process.env.HWVERSION == 2) { settings.ndColors = true; @@ -17,14 +15,6 @@ E.showMenu({ "": { "title": "Calendar" }, "< Back": () => back(), - 'Start Sunday': { - value: settings.startOnSun, - format: v => v ? "Yes" : "No", - onchange: v => { - settings.startOnSun = v; - writeSettings(); - } - }, 'B2 Colors': { value: settings.ndColors, format: v => v ? "Yes" : "No", From 5152e68c8038087a594ddd13bdf6def171743d1b Mon Sep 17 00:00:00 2001 From: Jeffrey Adair Date: Wed, 4 May 2022 23:52:07 -0400 Subject: [PATCH 178/509] Fix bug in valid word detection The valid word detection did not account for the fact that a valid word could exist twice in the list: once at a non-multiple-of-five index because it is the end of one word and the start of another, and again at a multiple-of-five index for the word itself. An example is aglow agony contains wagon. This prevented wagon from being considered a valid word (even though it could be selected as the target word). This fix loops through all detections of the word in the dictionary to see if any are at a multiple-of-five index. --- apps/bordle/ChangeLog | 1 + apps/bordle/bordle.app.js | 7 ++++++- apps/bordle/metadata.json | 2 +- 3 files changed, 8 insertions(+), 2 deletions(-) diff --git a/apps/bordle/ChangeLog b/apps/bordle/ChangeLog index f45509a34..ddbd6239c 100644 --- a/apps/bordle/ChangeLog +++ b/apps/bordle/ChangeLog @@ -1,2 +1,3 @@ 0.01: New App 0.02: app keeps track of statistics now +0.03: Fix bug in valid word detection diff --git a/apps/bordle/bordle.app.js b/apps/bordle/bordle.app.js index 20aa02bc2..07e954a6d 100644 --- a/apps/bordle/bordle.app.js +++ b/apps/bordle/bordle.app.js @@ -110,7 +110,12 @@ class Wordle { } } addGuess(w) { - if ((this.words.indexOf(w.toLowerCase())%5)!=0) { + let idx = -1; + do{ + idx = this.words.indexOf(w.toLowerCase(), idx+1); + } + while(idx !== -1 && idx%5 !== 0); + if(idx%5 !== 0) { E.showAlert(w+"\nis not a word", "Invalid word").then(function() { layout = getKeyLayout(""); wordle.render(true); diff --git a/apps/bordle/metadata.json b/apps/bordle/metadata.json index 37ef5c855..f6011f798 100644 --- a/apps/bordle/metadata.json +++ b/apps/bordle/metadata.json @@ -2,7 +2,7 @@ "name": "Bordle", "shortName":"Bordle", "icon": "app.png", - "version":"0.02", + "version":"0.03", "description": "Bangle version of a popular word search game", "supports" : ["BANGLEJS2"], "readme": "README.md", From 24181f65bb638dfff3438155c8ea5f51f2daa300 Mon Sep 17 00:00:00 2001 From: Erik Andresen Date: Thu, 5 May 2022 18:52:23 +0200 Subject: [PATCH 179/509] miclock2: Redraw only when seconds change --- apps/miclock2/ChangeLog | 1 + apps/miclock2/clock-mixed.js | 7 ++++--- apps/miclock2/metadata.json | 2 +- 3 files changed, 6 insertions(+), 4 deletions(-) diff --git a/apps/miclock2/ChangeLog b/apps/miclock2/ChangeLog index 5560f00bc..55c60accd 100644 --- a/apps/miclock2/ChangeLog +++ b/apps/miclock2/ChangeLog @@ -1 +1,2 @@ 0.01: New App! +0.02: Redraw only when seconds change diff --git a/apps/miclock2/clock-mixed.js b/apps/miclock2/clock-mixed.js index d928a5185..edc68959c 100644 --- a/apps/miclock2/clock-mixed.js +++ b/apps/miclock2/clock-mixed.js @@ -6,6 +6,7 @@ const Radius = { "center": 7, "hour": 60, "min": 80, "dots": 88 }; const Center = { "x": 120, "y": 96 }; const Widths = { hour: 2, minute: 2 }; var buf = Graphics.createArrayBuffer(240,192,1,{msb:true}); +var lastDate = new Date(); function rotatePoint(x, y, d) { rad = -1 * d / 180 * Math.PI; @@ -45,10 +46,10 @@ function setLineWidth(x1, y1, x2, y2, lw) { ]; } - function drawMixedClock(force) { - if ((force || Bangle.isLCDOn()) && buf.buffer) { - var date = new Date(); + var date = new Date(); + if ((force || Bangle.isLCDOn()) && buf.buffer && date.getSeconds() === lastDate.getSeconds()) { + lastDate = date; var dateArray = date.toString().split(" "); var isEn = locale.name.startsWith("en"); var point = []; diff --git a/apps/miclock2/metadata.json b/apps/miclock2/metadata.json index dc1b49822..e1481dbd2 100644 --- a/apps/miclock2/metadata.json +++ b/apps/miclock2/metadata.json @@ -1,7 +1,7 @@ { "id": "miclock2", "name": "Mixed Clock 2", - "version": "0.01", + "version": "0.02", "description": "White color variant of the Mixed Clock with thicker clock hands for better readability in the bright sunlight, extra space under the clock for widgets and seconds in the digital clock.", "icon": "clock-mixed.png", "type": "clock", From 6f48d9119ffbb1affd9149ed19b1e1c3f5c21e0d Mon Sep 17 00:00:00 2001 From: Jason Dekarske Date: Thu, 5 May 2022 10:51:10 -0700 Subject: [PATCH 180/509] populate courses in spectre tiles --- apps/golfview/custom.html | 48 +++++++++++++++++++++++++++------------ 1 file changed, 33 insertions(+), 15 deletions(-) diff --git a/apps/golfview/custom.html b/apps/golfview/custom.html index 77f964146..edbb490bd 100644 --- a/apps/golfview/custom.html +++ b/apps/golfview/custom.html @@ -28,9 +28,8 @@
        -
        -
          -
          +
          +

          No course loaded.

          @@ -70,6 +69,34 @@ let current_course = null; let search_results = $("#searchresults"); + function buildCourseListElement(title, subtitle, element) { + let base_element = $(`
          +
          +
          +
          Avatar
          +
          +
          +

          ${title}

          +

          ${subtitle}

          +
          +
          +
          +
          +
          `); + + // add the buttons + base_element.find('.btn-group') + .append($('
          From a6d8f65bf847cebad0484b52064af5e412b28fc0 Mon Sep 17 00:00:00 2001 From: Jason Dekarske Date: Thu, 5 May 2022 11:36:22 -0700 Subject: [PATCH 183/509] changelog --- apps/golfview/ChangeLog | 1 + 1 file changed, 1 insertion(+) diff --git a/apps/golfview/ChangeLog b/apps/golfview/ChangeLog index b243db101..909b8feca 100644 --- a/apps/golfview/ChangeLog +++ b/apps/golfview/ChangeLog @@ -1 +1,2 @@ 0.01: New App! Very limited course support. +0.02: Course search added to BangleApps page \ No newline at end of file From 3dda60ee7a44a23f5f171ff44938cb7a291b52f2 Mon Sep 17 00:00:00 2001 From: Jason Dekarske Date: Thu, 5 May 2022 11:50:37 -0700 Subject: [PATCH 184/509] metadata version --- apps/golfview/metadata.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/golfview/metadata.json b/apps/golfview/metadata.json index 961d24e4d..a36a9b6ab 100644 --- a/apps/golfview/metadata.json +++ b/apps/golfview/metadata.json @@ -1,6 +1,6 @@ { "id": "golfview", "name": "Golf View", - "version":"0.01", + "version":"0.02", "description": "This app will provide you with on course data to support your golf game!", "icon": "golfview.png", "tags": "outdoors, gps", From 3681fd3c92b33f8d0fede2d686fd4703fd695c63 Mon Sep 17 00:00:00 2001 From: sir-indy <53864146+sir-indy@users.noreply.github.com> Date: Thu, 5 May 2022 21:16:06 +0100 Subject: [PATCH 185/509] New keyboard app --- apps/kbmulti/ChangeLog | 1 + apps/kbmulti/README.md | 8 +++ apps/kbmulti/app.png | Bin 0 -> 685 bytes apps/kbmulti/lib.js | 110 ++++++++++++++++++++++++++++++++++++ apps/kbmulti/metadata.json | 14 +++++ apps/kbmulti/screenshot.png | Bin 0 -> 3823 bytes 6 files changed, 133 insertions(+) create mode 100644 apps/kbmulti/ChangeLog create mode 100644 apps/kbmulti/README.md create mode 100644 apps/kbmulti/app.png create mode 100644 apps/kbmulti/lib.js create mode 100644 apps/kbmulti/metadata.json create mode 100644 apps/kbmulti/screenshot.png diff --git a/apps/kbmulti/ChangeLog b/apps/kbmulti/ChangeLog new file mode 100644 index 000000000..04b2430bb --- /dev/null +++ b/apps/kbmulti/ChangeLog @@ -0,0 +1 @@ +0.01: New keyboard diff --git a/apps/kbmulti/README.md b/apps/kbmulti/README.md new file mode 100644 index 000000000..0c4d0ef73 --- /dev/null +++ b/apps/kbmulti/README.md @@ -0,0 +1,8 @@ +# Multitap Keyboard + +A library that provides the ability to input text in a style familiar to anyone who had a mobile phone before they went all touchscreen. + +Uses the multitap keypad logic originally from here: http://www.espruino.com/Morse+Code+Texting + +![](screenshot.png) + diff --git a/apps/kbmulti/app.png b/apps/kbmulti/app.png new file mode 100644 index 0000000000000000000000000000000000000000..5607a05537364094c048af0704b7098e3a0f3e60 GIT binary patch literal 685 zcmV;e0#f~nP)LGTp<*=JZt zo5QJOES+g~A7&Q=0&G*XB~tYAGfRQr`J)w+q*G;W)e7CxpOavA|?9*~j#HJ+xXa zDJBR4Os7-QJO@10iA*{HC5MXwfa5rDT~~@Z6#o#@Znw$vm_Sb8a8aEttr!!?2?!zn zYD+7|1abn)|F`Ft+ff*_E@Jlt>UJSJ$*Y%mxox5IH9R4NrPw#%J!jwp)g3lrz@ zJWr`LsR}6(LSVDmP={qU4>^J3or~ibQ4~p6CasuE66p8)Xf~UYEeu2WzMp!G3FMEs z(P*65j)kNZV}k7iD%(Z(0acAR=>zA)m_Y6Wd77ZV(OSaW&h1qPj|7}v^ z-)*;ed3!6xd@B}lT`rUKkgrg!Ry(mBCuCCNUmS@CaFUP-`Sk(S+*C2h=p#1j1FCUn ztaaAA&~g0^!%&JbsqtS*B}uRV@VQi?%1P`48vqsZjM=d9Jnxyxk#qvH1m9zGqjMzv z!EpuPcP4UZtQlihI;S=P-}k?B&R+xg1c3f_`0qpjCXBH+qtWPR4(nSi7K;IQsHnE% TMy#|e00000NkvXXu0mjf@3S-M literal 0 HcmV?d00001 diff --git a/apps/kbmulti/lib.js b/apps/kbmulti/lib.js new file mode 100644 index 000000000..ea7bf9ec3 --- /dev/null +++ b/apps/kbmulti/lib.js @@ -0,0 +1,110 @@ +//Multitap logic originally from here: http://www.espruino.com/Morse+Code+Texting + +exports.input = function(options) { + options = options||{}; + var text = options.text; + if ("string"!=typeof text) text=""; + + var fontSize = "6x15"; + var Layout = require("Layout"); + var letters = { + "1":".,!?1","2":"ABC2","3":"DEF3", + "4":"GHI4","5":"JKL5","6":"MNO6", + "7":"PQRS7","8":"TUV8","9":"WXYZ9", + "0":"_@:/0" + }; + + var charTimeout; // timeout after a key is pressed + var charCurrent; // current character (index in letters) + var charIndex; // index in letters[charCurrent] + var caps = true; + var layout; + //var text = ""; + + function displayText() { + layout.clear(layout.text); + layout.text.label = text; + layout.render(layout.text); + } + + function backspace() { + // remove the timeout if we had one + if (charTimeout!==undefined) { + clearTimeout(charTimeout); + charTimeout = undefined; + } + text = text.slice(0, -1); + newCharacter(); + } + + function setCaps() { + caps = !caps; + for (var key in letters) { + layout[key].label = caps ? letters[key].toUpperCase() : letters[key].toLowerCase(); + } + layout.render(); + } + + function newCharacter(ch) { + text = text.replace("_", " "); + displayText(); + charCurrent = ch; + charIndex = 0; + } + + function onKeyPad(key) { + // remove the timeout if we had one + if (charTimeout!==undefined) { + clearTimeout(charTimeout); + charTimeout = undefined; + } + // work out which char was pressed + if (key==charCurrent) { + charIndex = (charIndex+1) % letters[charCurrent].length; + text = text.slice(0, -1); + } else { + newCharacter(key); + } + var newLetter = letters[charCurrent][charIndex]; + text += (caps ? newLetter.toUpperCase() : newLetter.toLowerCase()); + displayText(); + // set a timeout + charTimeout = setTimeout(function() { + charTimeout = undefined; + newCharacter(); + }, 750); + } + return new Promise((resolve,reject) => { + layout = new Layout( { + type:"v", c: [ + {type:"txt", font:"10%", label:"", id:"text", filly:1, fillx:1}, + {type:"h", c: [ + {type:"btn", font:fontSize, label:letters[1], cb: l=>onKeyPad(1), id:'1', fillx:1 }, + {type:"btn", font:fontSize, label:letters[2], cb: l=>onKeyPad(2), id:'2', fillx:1 }, + {type:"btn", font:fontSize, label:letters[3], cb: l=>onKeyPad(3), id:'3', fillx:1 }, + ]}, + {type:"h", c: [ + {type:"btn", font:fontSize, label:letters[4], cb: l=>onKeyPad(4), id:'4', fillx:1 }, + {type:"btn", font:fontSize, label:letters[5], cb: l=>onKeyPad(5), id:'5', fillx:1 }, + {type:"btn", font:fontSize, label:letters[6], cb: l=>onKeyPad(6), id:'6', fillx:1 }, + ]}, + {type:"h", c: [ + {type:"btn", font:fontSize, label:letters[7], cb: l=>onKeyPad(7), id:'7', fillx:1 }, + {type:"btn", font:fontSize, label:letters[8], cb: l=>onKeyPad(8), id:'8', fillx:1 }, + {type:"btn", font:fontSize, label:letters[9], cb: l=>onKeyPad(9), id:'9', fillx:1 }, + ]}, + {type:"h", c: [ + {type:"btn", font:fontSize, label:letters[0], cb: l=>onKeyPad(0), id:'0', fillx:1 }, + {type:"btn", font:fontSize, label:"^", cb: l=>setCaps(), id:'caps', fillx:1}, + {type:"btn", font:fontSize, label:"<", cb: l=>backspace(), fillx:1 }, + ]}, + ] + },{back: ()=>{ + Bangle.setUI(); + g.clearRect(Bangle.appRect); + resolve(text); + }}); + g.clearRect(Bangle.appRect); + layout.render(); + }); +}; \ No newline at end of file diff --git a/apps/kbmulti/metadata.json b/apps/kbmulti/metadata.json new file mode 100644 index 000000000..419824578 --- /dev/null +++ b/apps/kbmulti/metadata.json @@ -0,0 +1,14 @@ +{ "id": "kbmulti", + "name": "Multitap keyboard", + "version":"0.04", + "description": "A library for text input via multitap/T9 style keypad", + "icon": "app.png", + "type":"textinput", + "tags": "keyboard", + "supports" : ["BANGLEJS2"], + "screenshots": [{"url":"screenshot.png"}], + "readme": "README.md", + "storage": [ + {"name":"textinput","url":"lib.js"} + ] +} diff --git a/apps/kbmulti/screenshot.png b/apps/kbmulti/screenshot.png new file mode 100644 index 0000000000000000000000000000000000000000..11788ad8793bfd0b93113f038a1d08bcaa67860b GIT binary patch literal 3823 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 Q`d|Tb6RRr}WB2&~0e-$dDgXcg literal 0 HcmV?d00001 From ed624f3e6b6ad93f839986e450ba7a2efc4296ba Mon Sep 17 00:00:00 2001 From: sir-indy <53864146+sir-indy@users.noreply.github.com> Date: Fri, 6 May 2022 08:37:18 +0100 Subject: [PATCH 186/509] Add files via upload --- apps/kbmulti/screenshot_1.png | Bin 0 -> 4592 bytes apps/kbmulti/screenshot_2.png | Bin 0 -> 4507 bytes 2 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 apps/kbmulti/screenshot_1.png create mode 100644 apps/kbmulti/screenshot_2.png diff --git a/apps/kbmulti/screenshot_1.png b/apps/kbmulti/screenshot_1.png new file mode 100644 index 0000000000000000000000000000000000000000..8c3d716ea4b5f8c18e261d1c0155f7a5bdeef599 GIT binary patch literal 4592 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 literal 0 HcmV?d00001 From 5be2e720307434896f51286a07ecc8769b0df56a Mon Sep 17 00:00:00 2001 From: sir-indy <53864146+sir-indy@users.noreply.github.com> Date: Fri, 6 May 2022 08:37:50 +0100 Subject: [PATCH 187/509] Update README.md --- apps/kbmulti/README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/apps/kbmulti/README.md b/apps/kbmulti/README.md index 0c4d0ef73..40aaca9c5 100644 --- a/apps/kbmulti/README.md +++ b/apps/kbmulti/README.md @@ -4,5 +4,6 @@ A library that provides the ability to input text in a style familiar to anyone Uses the multitap keypad logic originally from here: http://www.espruino.com/Morse+Code+Texting -![](screenshot.png) +![](screenshot_1.png) +![](screenshot_2.png) From e5b09c3d0dcce3cfab182dfd313433f27b99623d Mon Sep 17 00:00:00 2001 From: sir-indy <53864146+sir-indy@users.noreply.github.com> Date: Fri, 6 May 2022 08:38:10 +0100 Subject: [PATCH 188/509] Update metadata.json --- apps/kbmulti/metadata.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/kbmulti/metadata.json b/apps/kbmulti/metadata.json index 419824578..4d3631b70 100644 --- a/apps/kbmulti/metadata.json +++ b/apps/kbmulti/metadata.json @@ -6,7 +6,7 @@ "type":"textinput", "tags": "keyboard", "supports" : ["BANGLEJS2"], - "screenshots": [{"url":"screenshot.png"}], + "screenshots": [{"url":"screenshot_1.png"},{"url":"screenshot_2.png"}], "readme": "README.md", "storage": [ {"name":"textinput","url":"lib.js"} From 4fe623caf91d29b4faf0faca7bb8843a7b665877 Mon Sep 17 00:00:00 2001 From: sir-indy <53864146+sir-indy@users.noreply.github.com> Date: Fri, 6 May 2022 08:38:26 +0100 Subject: [PATCH 189/509] Delete screenshot.png --- apps/kbmulti/screenshot.png | Bin 3823 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 apps/kbmulti/screenshot.png diff --git a/apps/kbmulti/screenshot.png b/apps/kbmulti/screenshot.png deleted file mode 100644 index 11788ad8793bfd0b93113f038a1d08bcaa67860b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3823 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 Q`d|Tb6RRr}WB2&~0e-$dDgXcg From 5161b91a7d296bfcd907a352426525819d6f8038 Mon Sep 17 00:00:00 2001 From: pancake Date: Fri, 6 May 2022 19:29:40 +0200 Subject: [PATCH 190/509] Initial import of the tabanchi watch/app --- apps/tabanchi/ChangeLog | 1 + apps/tabanchi/README.md | 47 + apps/tabanchi/app-icon.js | 1 + apps/tabanchi/app.js | 1603 ++++++++++++++++++++++++++++++++++ apps/tabanchi/app.png | Bin 0 -> 224 bytes apps/tabanchi/metadata.json | 31 + apps/tabanchi/screenshot.jpg | Bin 0 -> 567394 bytes 7 files changed, 1683 insertions(+) create mode 100644 apps/tabanchi/ChangeLog create mode 100644 apps/tabanchi/README.md create mode 100644 apps/tabanchi/app-icon.js create mode 100644 apps/tabanchi/app.js create mode 100644 apps/tabanchi/app.png create mode 100644 apps/tabanchi/metadata.json create mode 100644 apps/tabanchi/screenshot.jpg diff --git a/apps/tabanchi/ChangeLog b/apps/tabanchi/ChangeLog new file mode 100644 index 000000000..23b44dd5d --- /dev/null +++ b/apps/tabanchi/ChangeLog @@ -0,0 +1 @@ +0.0.1: Initial implementation diff --git a/apps/tabanchi/README.md b/apps/tabanchi/README.md new file mode 100644 index 000000000..71ad22558 --- /dev/null +++ b/apps/tabanchi/README.md @@ -0,0 +1,47 @@ +たばんち (tabanchi) +=================== + +A Tamagotchi clone watch app for the BangleJS2 smartwatch. + +Author +------ + +Written by pancake in 2022, powered by insomnia + +Source repository: https://github.com/trufae/tabanchi + +Features +-------- + +* [x] 12/24 clock with HH:mm:ss +* [x] Battery level indicator +* [x] Eating meals and snacks +* [x] Refusing to do things +* [x] Getting sick +* [x] Take a shower +* [x] Switch on/off the light +* [x] Status for happy/hunger/discipline +* [ ] Evolutions +* [ ] Hatching eggs +* [x] Playing a game +* [ ] Education +* [x] Medicine +* [ ] Death + + +Resources +--------- + +* Original pixmaps taken from: + - https://www.spriters-resource.com/resources/sheets/141/144400.png +* Espruino Image converter: + - https://www.espruino.com/Image+Converter +* Tamagotchi Essentials + - https://tamagotchi.fandom.com/wiki/Tamagotchi_(1996_Pet) +* Tamagotchi Emulator Source (Java) + - https://gist.github.com/aerospark/80c60e801398fd961e3f + +Screenshots +----------- +![tama on bangle](screenshot.jpg) + diff --git a/apps/tabanchi/app-icon.js b/apps/tabanchi/app-icon.js new file mode 100644 index 000000000..95796eb16 --- /dev/null +++ b/apps/tabanchi/app-icon.js @@ -0,0 +1 @@ +atob("MDDBAP////8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD//gAAAAD//gAAAAD//gAAAAf//8AAAAf//8AAAAf//8AAAD/////gAD/////gAD/////gAf/////8Af/////8Af/////8D//////8D//////8D//////8D//////8D//////8D//////8D//////8D//////8D//////8D//////8D//////8D//////8f//////gf//////gf//////gD/////gAD/////gAD/////gAAf///8AAAf///8AAAf///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=") diff --git a/apps/tabanchi/app.js b/apps/tabanchi/app.js new file mode 100644 index 000000000..c87a08817 --- /dev/null +++ b/apps/tabanchi/app.js @@ -0,0 +1,1603 @@ +// GPL TAMAGOTCHI CLONE FOR THE BANGLEJS2 SMARTWATCH BY pancake 2022 +// TABANCHI -- たばんち + +const scale = 6; +let tool = -1; +const w = g.getWidth(); +const h = g.getHeight(); +let hd = 1; +let vd = 1; +let x = 20; +let sx = 0; // screen scroll x position +const y = 40 - scale; +let animated = true; +let transition = false; +let caca = null; +let egg = null; +let mode = ''; +let evolution = 1; +let callForAttention = false; // TODO : move into tama{} +let useAmPm = true; +let oldMode = ''; +let gameChoice = 0; +let gameTries = 0; +let gameWins = 0; + +g.setBgColor(0); + +const tama06eat0 = { + width: 16, + height: 16, + bpp: 1, + transparent: 1, + buffer: atob('/////4A/vd+B7+N3g/e714P39/f39/f3++/8H/////8=') +}; +const meal0 = { + width: 8, + height: 8, + bpp: 1, + transparent: 1, + buffer: atob('gXp6tbW1tYE=') +}; +const meal1 = { + width: 8, + height: 8, + bpp: 1, + transparent: 1, + buffer: atob('v19htbW1tYE=') +}; + +const meal2 = { + width: 8, + height: 8, + bpp: 1, + transparent: 1, + buffer: atob('/////5+htYE=') +}; +const snack0 = { + width: 8, + height: 8, + bpp: 1, + transparent: 1, + buffer: atob('358D08vA+fs=') +}; +const snack1 = { + width: 8, + height: 8, + bpp: 1, + transparent: 1, + buffer: atob('///708vA+fs=') +}; +const snack2 = { + width: 8, + height: 8, + bpp: 1, + transparent: 1, + buffer: atob('/////+vA+fs=') +}; + +const angry0 = { + width: 8, + height: 8, + bpp: 1, + transparent: 1, + buffer: atob('/////8/Pv/8=') +}; + +const angry1 = { + width: 8, + height: 8, + bpp: 1, + transparent: 1, + buffer: atob('8/Dg4fn/v/8=') +}; + +const right = { + width: 8, + height: 8, + bpp: 1, + transparent: 1, + buffer: atob('7+eDgYPn7/8=') +}; + +const left = { + width: 8, + height: 8, + bpp: 1, + transparent: 1, + buffer: atob('9+fBgcHn9/8=') +}; + +const img_on = { + width: 16, + height: 8, + bpp: 1, + transparent: 1, + buffer: atob('//+M73VvdW91r3Wvjc///w==') +}; + +const img_off = { + width: 16, + height: 8, + bpp: 1, + transparent: 1, + buffer: atob('//+MIXXvdGN173Xvje///w==') +}; + +const right0 = { + width: 3, + height: 5, + bpp: 1, + transparent: 1, + buffer: atob('d1Y=') +}; + +const right1 = { + width: 3, + height: 5, + bpp: 1, + transparent: 1, + buffer: atob('ZBY=') +}; + +const am = { + width: 8, + height: 8, + bpp: 1, + transparent: 1, + buffer: atob('w7mBuf+Rqak=') +}; + +const pm = { + width: 8, + height: 8, + bpp: 1, + transparent: 1, + buffer: atob('g52Dn/+Rqak=') +}; +const numbers = [ + { // 0 + width: 4, + height: 8, + bpp: 1, + transparent: 1, + buffer: atob('lmZmnw==') + }, { // 1 + width: 4, + height: 8, + bpp: 1, + transparent: 1, + buffer: atob('2d3d3w==') + }, { // 2 + width: 4, + height: 8, + bpp: 1, + transparent: 1, + buffer: atob('lu23Dw==') + }, { // 3 + width: 4, + height: 8, + bpp: 1, + transparent: 1, + buffer: atob('Hu3uHw==') + }, { // 4 + width: 4, + height: 8, + bpp: 1, + transparent: 1, + buffer: atob('lVVQ3w==') + }, { // 5 + width: 4, + height: 8, + bpp: 1, + transparent: 1, + buffer: atob('B3HuHw==') + }, { // 6 + width: 4, + height: 8, + bpp: 1, + transparent: 1, + buffer: atob('l3Fmnw==') + }, { // 7 + width: 4, + height: 8, + bpp: 1, + transparent: 1, + buffer: atob('Bm7d3w==') + }, { // 8 + width: 4, + height: 8, + bpp: 1, + transparent: 1, + buffer: atob('lmlmnw==') + }, { // 9 + width: 4, + height: 8, + bpp: 1, + transparent: 1, + buffer: atob('lmjunw==') + } +]; + +const snumbers = [ + { // 0 + width: 4, + height: 8, + bpp: 1, + transparent: 1, + buffer: atob('/4qqjw==') + }, { // 1 + width: 4, + height: 8, + bpp: 1, + transparent: 1, + buffer: atob('/93d3w==') + }, { // 2 + width: 4, + height: 8, + bpp: 1, + transparent: 1, + buffer: atob('/46Ljw==') + }, { // 3 + width: 4, + height: 8, + bpp: 1, + transparent: 1, + buffer: atob('/46Ojw==') + }, { // 4 + width: 4, + height: 8, + bpp: 1, + transparent: 1, + buffer: atob('/6qO7w==') + }, { // 5 + width: 4, + height: 8, + bpp: 1, + transparent: 1, + buffer: atob('/4uOjw==') + }, { // 6 + width: 4, + height: 8, + bpp: 1, + transparent: 1, + buffer: atob('/4uKjw==') + }, { // 7 + width: 4, + height: 8, + bpp: 1, + transparent: 1, + buffer: atob('/4ru7w==') + }, { // 8 + width: 4, + height: 8, + bpp: 1, + transparent: 1, + buffer: atob('/4qKjw==') + }, { // 9 + width: 4, + height: 8, + bpp: 1, + transparent: 1, + buffer: atob('/4qOjw==') + } +]; + +const colon = { + width: 4, + height: 8, + bpp: 1, + transparent: 1, + buffer: atob('/f/9/w==') +}; + +const egg00 = { + width: 16, + height: 16, + bpp: 1, + transparent: 1, + buffer: atob('/////////D/7n/GP8e/n9+537nfvx/OP+Z/wD/////8=') +}; + +const h24 = { + width: 8, + height: 8, + bpp: 1, + transparent: 1, + buffer: atob('ldWxnf/bw9s=') +}; + +const discipline = { + width: 32, + height: 8, + bpp: 1, + transparent: 1, + buffer: atob('///v/x//7/9v/i//akqqI27erqtqWiqja1rqrxpK6qM=') +}; + +const linebar = { + width: 32, + height: 8, + bpp: 1, + transparent: 1, + buffer: atob('/////4AAAA9////3f///93////d////3f///94AAAA8=') +}; + +const hungry = { + width: 32, + height: 8, + bpp: 1, + transparent: 1, + buffer: atob('/////2////9qiKr/aqqa/wqquv9qqLz/aK6+/2/4+f8=') +}; + +const happy = { + width: 32, + height: 8, + bpp: 1, + transparent: 1, + buffer: atob('/////2/iP/9v6qv/bGqr/w9iK/9obvP/a277/2yu5/8=') +}; + +const vs = { + width: 16, + height: 8, + bpp: 1, + transparent: 1, + buffer: atob('Uf9V/1f/W/9d/7X/sf///w==') +}; + +const egg01 = { + width: 16, + height: 16, + bpp: 1, + transparent: 1, + buffer: atob('///////////8P/uf8Y/x7+P37nfud/PP+Z/gB/////8=') +}; + +const tama06no0 = { + width: 16, + height: 16, + bpp: 1, + transparent: 1, + buffer: atob('//////w/+9/3gey974Hv3e/B7/fv9+/39+/4H/////8=') +}; + +const tama06no1 = { + width: 16, + height: 16, + bpp: 1, + transparent: 1, + buffer: atob('//////w/+9+B7703gfe794P37/fv9+/39+/4H/////8=') +}; + +const caca00 = { + width: 12, + height: 12, + bpp: 1, + transparent: 1, + buffer: atob('/////733v72/+f4vw3wH////') +}; + +const caca01 = { + width: 12, + height: 12, + bpp: 1, + transparent: 1, + buffer: atob('////v/33v7+3+f4v0HwH////') +}; + +// var img = hs.decompress(atob("sFggP/AH4A/AH4A/AH4A/AH4A/AH4A/AH4A/AH4A/AH4A/AH4A+A")); +const tama00 = { + width: 16, + height: 16, + bpp: 1, + transparent: 1, + buffer: atob('///////////8H/vv9oHvveuB793vwd/34A////////8=') +}; +const tama01 = { + width: 16, + height: 16, + bpp: 1, + transparent: 1, + buffer: atob('/////////AH7vfeB7sfvwevd78Hv7+/v7+/33/g///8=') +}; + +const tool00 = { + width: 30, + height: 30, + bpp: 1, + transparent: 1, + buffer: atob('//////7v4f8zHwP8zHwP8zHwP8zHwP8THwP8DHwP8BHgP8AHgP8AHgP+AHgP+APgP/AfAP/g/AP/x/AP/x/AP/x/AP/w/gP/w/8P/w/8P/gf8P/gf8P/AP8P/AP4P/AP4P/gf4P/wf4P/4/8f/////A=') +}; + +const tool01 = { + width: 30, + height: 30, + bpp: 1, + transparent: 1, + buffer: atob('///////D///fD4/+Pn4/+P/4//P/7/v+Af3n4APjDwAHDjgADP/AGD//DPh/+H/h/+O5x/GOkxxCOkxBOG8xh/GYz//HBz//jBn//xjmPw4/ODx///Dx+AfH/8AP///////+Af//8AP///////////A=') +}; + +const tool02 = { + width: 30, + height: 30, + bpp: 1, + transparent: 1, + buffer: atob('///////////////+D///4B///x8///xUf/hmTf+An/f4AmTfwAmTfgAl8fABx8+AD4B8AH8D4AP//wAf//gA///AB//+AH//8AP//4A///wD//8AP//4A///4H///4H///8H///+P/////////////A=') +}; + +const tool03 = { + width: 30, + height: 30, + bpp: 1, + transparent: 1, + buffer: atob('/////////////x////g////gf//fwP/+P4P/+OMH/+GEH/8DCD/4BjB/wxhB/h4xg/D8Qw8H8Yw4H+M5wH+H/gD/H/gD/D/wB8B/wAwB/wAAz/wAD//gAH//CAf//PB////n//////////////////A=') +}; + +const tool10 = { + width: 30, + height: 30, + bpp: 1, + transparent: 1, + buffer: atob('////////////////wf///AH//yAD/Dkfh8B0/wAA8/wA44vnD545Bgx8ZA4x4H58xznP8RjjH8ZnmP8ZmGPw5gPAB58fAHx8fw/x4///j8///j8f//D8f/8H+D/gf/AAA//gAD//+Af///////////A=') +}; + +const tool11 = { + width: 30, + height: 30, + bpp: 1, + transparent: 1, + buffer: atob('//////////////////////B///wAD/+AAA/8D/wPwfz+Hg/z/Dj7z3xH5znYM5znIM5TmIOdT8YGeL85GOP45neP/xj+P/zz+P/zx+H/nx+H/n4///H4/h/P8QAGP+AAAf/D/g////////////////A=') +}; +const tool12 = { + width: 30, + height: 30, + bpp: 1, + transparent: 1, + buffer: atob('/////////////////////////////z////5////5///94///48/g/8c8AH8M4AGcEwAOEEgAyAgAAwAgAB4YwAH8YwAH+c4AH/c4AAf84gAB/4gAB/5wAB/54AD//8AH///gf/////////////////A=') +}; + +const tool13 = { + width: 30, + height: 30, + bpp: 1, + transparent: 1, + buffer: atob('/////////////////////////+A///8AP//weH//x/jg/j/yAPnPwOHnM4/jnM9/5n8//5k/+fkk/vHEmPPgMjAbgcxxjmc4fD/48AB/4+AQ/x//4fj//+AH///AP/////////////////////////A=') +}; + +const shower = { + width: 8, + height: 16, + bpp: 1, + transparent: 1, + buffer: atob('5cuXy+XLl8vly5fL5cuXyw==') +}; + +const tools = [ + tool00, tool01, tool02, tool03, + tool10, tool11, tool12, tool13 +]; + +const tamabg = { + width: 176, + height: 176, + bpp: 8, + buffer: require('heatshrink').decompress(atob('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')) +}; + +const tama06happy = { + width: 16, + height: 16, + bpp: 1, + transparent: 1, + buffer: atob('/////4Afvm+Hd+B74duDq7v7g/vv++/79/f4D/////8=') +}; + +const battery = { + width: 32, + height: 8, + bpp: 1, + transparent: 1, + buffer: atob('/////x/t//9vxP//bG2arx9taa9obQuPa2177xy2i58=') +}; +const snack = { + width: 24, + height: 8, + bpp: 1, + transparent: 1, + buffer: atob('z//7t//7vDGbzb1q9aF5ta1qzbKa////') +}; +const meal = { + width: 24, + height: 8, + bpp: 1, + transparent: 1, + buffer: atob('////k//fqzjfqt7fqhDfqvbfuxlf////') +}; + +const face = { + width: 8, + height: 8, + bpp: 1, + transparent: 1, + buffer: atob('/8OlgZmBw/8=') +}; + +const year = { + width: 8, + height: 8, + bpp: 1, + transparent: 1, + buffer: atob('/6qpq8vrn/8=') +}; + +const weight = { + width: 8, + height: 8, + bpp: 1, + transparent: 1, + buffer: atob('/34A54G9pQA=') +}; + +const weight_g = { + width: 8, + height: 8, + bpp: 1, + transparent: 1, + buffer: atob('49vj+cO7x/8=') +}; + +const heart0 = { + width: 8, + height: 8, + bpp: 1, + transparent: 1, + buffer: atob('yba+vt3r9/8=') +}; + +const heart1 = { + width: 8, + height: 8, + bpp: 1, + transparent: 1, + buffer: atob('yaCgoMHj9/8=') +}; + +g.clear(); +g.setColor(1, 1, 1); +g.fillRect(0, 0, 200, 200); + +g.setColor(0); + +g.drawString('Loading...', 10, 10); +egg = egg00; +n = tama00; + +const tama = { + // visible + age: 0, + weight: 1, + aspect: 6, + discipline: 0, + happy: 3, + sick: false, + hungry: 3, + cacas: 0, // move from cacas + // hidden + sickness: 0, + defenses: 100, + tummy: 100, + awake: 3 +}; + +function drawHearts (n) { + for (i = 0; i < 4; i++) { + const himg = (i < n) ? heart1 : heart0; + g.drawImage(himg, 1 + (scale * (8 * i)) - scale - scale, 40 + (scale * 8), { scale: (scale) }); + } +} + +function drawLinebar (n, arrow) { // 0-100 + const yy = 34; + g.drawImage(linebar, 0, yy + (scale * 8), { scale: scale }); + + let wop = scale * 2; // (frame++%2)? scale*3:scale*2; + if (frame % 2) { + wop += scale; + } + let twelve = 12; + if (arrow) { + twelve = 11; + } + const val = (n * twelve) / 100; + const max = val || twelve; + + for (let i = 0; i < max; i++) { + g.setColor(0, 0, 0); + + if (arrow) { + const x = wop + (i * scale * 2) + ((i % 2) * scale); + const y = yy + (scale * 11); + g.fillRect(x + (scale * 2), y, x + (scale * 3), y + scale); + g.fillRect(x + scale, y + scale, x + (scale * 2), y + (scale * 2)); + g.fillRect(x, y + (scale * 2), x + scale, y + (scale * 3)); + } else { + const x = (i * scale * 2) + (scale * 2); + const y = yy + (scale * 11); + g.fillRect(x, y, x + scale, y + scale * 3); + } + } +} + +function drawStatus () { + const yy = 34; + switch (statusMode) { + case 0: + g.drawImage(face, scale, yy, { scale: scale }); + g.drawImage(weight, scale, yy + (scale * 8), { scale: scale }); + g.drawImage(numbers[0], w - (scale * 14), yy, { scale: scale }); + g.drawImage(year, w - (scale * 8), yy, { scale: scale }); + g.drawImage(numbers[1], w - (scale * 14), yy + (scale * 9), { scale: scale }); + g.drawImage(weight_g, w - (scale * 8), yy + (scale * 9), { scale: scale }); + break; + case 1: // discipline + g.drawImage(discipline, 0, yy, { scale: scale }); + drawLinebar(tama.discipline, false); + break; + case 2: // hungry + g.drawImage(hungry, scale, yy, { scale: scale }); + drawHearts(tama.hungry); + break; + case 3: // happy + g.drawImage(happy, scale, yy, { scale: scale }); + drawHearts(tama.happy); + break; + case 5: // battery + g.drawImage(battery, scale, yy, { scale: scale }); + drawLinebar(E.getBattery(), true); + break; + default: + statusMode = 0; + drawStatus(); + break; + } +} + +function drawScene () { + if (Bangle.isLocked()) { + tool = -1; + } + g.setColor(0, 0, 0); + g.fillRect(0, 0, 200, 200); + g.drawImage(tamabg, 0, 0, { scale: 1 }); + g.setColor(1, 1, 1); + + if (evolution == 0) { + g.drawImage(egg, w / 4, 32, { scale: scale }); + return; + } + if (callForAttention) { + g.drawImage(tool13, 10 + 30 + 10 + 30 + 10 + 30 + 10, 135); + } + if (mode == 'game') { + drawGame(); + if (!transition) { + if (gameChoice == 2) { + g.drawImage(right, w - (scale * 7), 40 + (scale * 4), { scale: scale }); + } else if (gameChoice == 1) { + g.drawImage(left, 0, 40 + (scale * 4), { scale: scale }); + } + return; + } + } + if (gameTries > 4) { + mode = ''; + oldMode = ''; + const s0 = numbers[gameWins]; + const s1 = numbers[(5 - gameWins)]; + g.drawImage(s0, (scale * 5), 60, { scale: scale }); + g.drawImage(vs, (scale * 12), 60, { scale: scale }); + g.drawImage(s1, (scale * 22), 60, { scale: scale }); + + gameTries++; + if (gameTries > 10) { + const winrar = (gameWins > 2); + gameTries = 0; + gameWins = 0; + oldMode = ''; + mode = ''; + if (winrar) { + tama.happy++; + animateHappy(); + } + } + return; + } + + if (mode == 'clock') { + drawClock(); + if (!transition) { + return; + } + } + + drawTools(); + if (mode == 'status') { + drawStatus(); + return; + } + if (mode == 'food') { + drawFoodMenu(); + return; + } + if (mode == 'light') { + drawLight(); + return; + } + if (mode == 'happy') { + drawHappy(); + return; + } + if (mode == 'angry') { + drawAngry(); + return; + } + if (mode == 'medicine') { + if (tama.sick > 0) { + drawMedicine(); + } else { + animateAngry(); + } + return; + } + if (mode == 'eating') { + if (lightSelect == 0 && tama.hungry > 4) { + drawEatingNo(); + } else { + drawEating(); + } + return; + } + if (lightMode) { + // just dark screen and maybe zZz if its sleeping + g.setColor(0, 0, 0); + g.fillRect(0, 38, w + sx, h - 50); + if (tama.sleep) { + drawCaca(); + } + } else { + // draw tamagotchi + g.drawImage(n, x + sx, y, { scale: scale }); + // draw caca + drawCaca(); + } +} + +var statusMode = 0; +var lightSelect = 0; +var lightMode = 0; // on is zero +let frame = 0; + +function drawAngry () { + const one = angryState % 2; + g.drawImage(one ? tama06no0 : tama06no1, (scale * 5), 40, { scale: scale }); + g.drawImage(one ? angry0 : angry1, (scale * 20), 40, { scale: scale }); +} + +function drawHappy () { + const one = angryState % 2; + g.drawImage(one ? tama06happy : tama06no1, (scale * 5), 40, { scale: scale }); + if (one) { + g.drawImage(sun, (scale * 20), 46, { scale: scale }); + } +} + +function drawEatingNo () { // food eating animation + const one = angryState % 2; + + g.drawImage(lightSelect ? snack0 : meal0, scale, 40 + (scale * 7), { scale: scale }); + + g.drawImage(one ? tama06no0 : tama06no1, (scale * 10), 40, { scale: scale }); +} + +const med0 = { + width: 16, + height: 16, + bpp: 1, + transparent: 1, + buffer: atob('///4P/1//X/9f+AP+7/4P/o/+j/4P/g//H/+//7///8=') +}; +const med1 = { + width: 16, + height: 16, + bpp: 1, + transparent: 1, + buffer: atob('//////g//X/9f+AP+z/7P/o/+D/7P/g//H/+//7///8=') +}; + +const med2 = { + width: 16, + height: 16, + bpp: 1, + transparent: 1, + buffer: atob('////////+D/9f+AP+j/7P/s/+z/7v/g//H/+//7///8=') +}; + +function drawMedicine () { // food eating animation + const med = [med0, med1, med2]; + const img = med[0 | ((frame / 2) % 3)]; + if (img) { + g.drawImage(img, 0, 34, { scale: scale }); + } + g.drawImage(tama06no0, (scale * 10), 40, { scale: scale }); +} + +var sun = { + width: 8, + height: 8, + bpp: 1, + transparent: 1, + buffer: atob('773nW9rnvfc=') +}; + +function drawEating () { // food eating animation + const one = angryState % 2; + const snack = [snack0, snack1, snack2]; + const meal = [meal0, meal1, meal2]; + const img = lightSelect ? snack[0 | (frame / 2)] : meal[0 | (frame / 2)]; + if (img) { + g.drawImage(img, scale, 40 + (scale * 7), { scale: scale }); + } + g.drawImage(one ? tama06no1 : tama06eat0, (scale * 10), 40, { scale: scale }); +} + +function drawFoodMenu () { // food menu + if (lightSelect == 0) { + g.drawImage(right, -scale, 40, { scale: scale }); + } else { + g.drawImage(right, -scale, 40 + (7 * scale), { scale: scale }); + } + g.drawImage(meal, scale * 5, 34, { scale: scale }); + g.drawImage(snack, scale * 5, 40 + (7 * scale), { scale: scale }); +} + +function drawLight () { + if (lightSelect == 0) { + g.drawImage(right, 2, 40, { scale: scale }); + } else { + g.drawImage(right, 2, 40 + (7 * scale), { scale: scale }); + } + g.drawImage(img_on, scale * 8, 34, { scale: scale }); + g.drawImage(img_off, scale * 8, 40 + (7 * scale), { scale: scale }); +} + +function drawTools () { + if (tool >= 0) { + // top actions + if (tool == 0) { g.drawImage(tool00, 10, 2); } + if (tool == 1) { g.drawImage(tool01, 10 + 30 + 10, 2); } + if (tool == 2) { g.drawImage(tool02, 10 + 30 + 10 + 30 + 10, 2); } + if (tool == 3) { g.drawImage(tool03, 10 + 30 + 10 + 30 + 10 + 30 + 10, 2); } + // bottom actions + if (tool == 4) { g.drawImage(tool10, 10, 135); } + if (tool == 5) { g.drawImage(tool11, 10 + 30 + 10, 135); } + if (tool == 6) { g.drawImage(tool12, 10 + 30 + 10 + 30 + 10, 135); } + } +} + +// this function is executed once per second. so the animations look stable and consistent +function updateAnimation () { + frame++; + if (evolution == 0) { + // animate the egg + egg = (egg == egg00) ? egg01 : egg00; + return; + } + if (mode == 'game') { + // console.log("update Animation"); + if (transition) { + const beep = frame % 4; + if (beep == 0) { + Bangle.beep(150, 4000); + } else if (beep == 2) { + Bangle.beep(150, 3200); + } + } else { + Bangle.beep(100); + } + if (gameChoice != 0) { + // do things + gameChoice = 0; + if ((0 | (Math.random() * 3)) > 0) { + animateHappy(); + gameWins++; + } else { + animateAngry(); + } + } + return; + } + if (mode == 'medicine') { + if (frame > 3) { + mode = ''; + tama.sick = 0; + } + } + x += (scale) * hd; + if (x + (tama00.width * scale) >= w) { + hd = -hd; + } + if (x < 0) { + hd = -hd; + } + caca = (caca == caca00) ? caca01 : caca00; + // y += vd * scale; + vd = -vd; + const width = (w / scale); + if (tama.sleep) { + n = tama00; + x = (width / 2); + } else { + n = n == tama00 ? tama01 : tama00; + if (tama.cacas > 0 || tama.sick > 0) { + if (x > (width / 2)) { + hd = -1; + x = (width / 2); + } + } + } +} + +function nextItem () { + tool++; + if (tool > 6) tool = 0; +} +function prevItem () { + tool--; + if (tool < 0) tool = 7; +} + +function activateItem () { + if (mode != '') { + return; + } + switch (tool) { + case -1: + animateToClock(); + break; + case 0: // food + if (tama.sleep) { + } else { + // evolution = 0; + mode = 'food'; + lightSelect = 0; + } + break; + case 1: // onoff + mode = 'light'; + break; + case 2: // game + if (tama.sleep) { + } else { + animateToGame(); + } + break; + case 3: // vax + if (tama.sleep) { + // cant medicate if sleeping + } else { + mode = 'medicine'; + frame = 0; + angryState = 0; + } + break; + case 4: // shower + if (tama.sleep) { + tama.happy = 0; + } + tama.awake = 10; // time to go to sleep again if in time + tama.sleep = false; + animateShower(); + break; + case 5: // status + mode = 'status'; + statusMode = 0; + break; + case 6: // blame + if (tama.sleep) { + tama.happy = 0; + tama.sleep = false; + } else if (callForAttention) { + if (tama.happy > 0 && tama.hungry > 0 && tama.sick < 1) { + tama.discipline += 2; + callForAttention = false; + } else if (tama.sick > 0) { + tama.discipline--; + } + } + animateAngry(); + break; + } +} + +const skull = { + width: 8, + height: 8, + bpp: 1, + transparent: 1, + buffer: atob('gwFtARGDq/8=') +}; + +const zz0 = { + width: 8, + height: 8, + bpp: 1, + transparent: 1, + buffer: atob('//H9+/fRf/8=') +}; + +const zz1 = { + width: 8, + height: 8, + bpp: 1, + transparent: 1, + buffer: atob('/8P79+/fw/8=') +}; + +const zz2 = { + width: 8, + height: 8, + bpp: 1, + transparent: 0, + buffer: atob('AA4CBAgugAA=') +}; +const zz3 = { + width: 8, + height: 8, + bpp: 1, + transparent: 0, + buffer: atob('ADwECBAgPAA=') +}; + +function drawCaca () { + if (mode == 'game') { + return; + } + if (!caca) { + caca = caca00; + } + let zz = [zz0, zz1]; + + if (lightMode) { + zz = [zz2, zz3]; + g.setColor(1, 1, 1); + var fi = ((frame) / 2) % 2; + g.drawImage(zz[fi ? 1 : 0], sx + w - (scale * 9), 40, { scale: scale }); + return; + } + g.setColor(0, 0, 0); + if (tama.sleep) { + var fi = ((frame) / 2) % 2; + g.drawImage(zz[fi ? 1 : 0], sx + w - (scale * 9), 34, { scale: scale }); + if (tama.sick > 0) { + g.drawImage(skull, sx + w - (scale * 9), 34 + (scale * 6), { scale: scale }); + } else if (tama.cacas > 0) { + g.drawImage(caca, sx + w - (scale * 11), 32 + (scale * 6), { scale: scale }); + } + } else if (tama.sick > 0) { + g.drawImage(skull, sx + w - (scale * 9), 34 + scale, { scale: scale }); + if (tama.cacas > 0) { + g.drawImage(caca, sx + w - (scale * 11), 32 + (scale * 6), { scale: scale }); + } + } else { + if (tama.cacas > 0) { + g.drawImage(caca, sx + w - (scale * 11), 34 + (scale * 6), { scale: scale }); + } + if (tama.cacas > 1) { + g.drawImage(caca, sx + w - (scale * 11), 24, { scale: scale }); + } + } +} +var angryState = 0; + +function animateHappy () { + if (transition || mode == 'happy') { + return; + } + angryState = 0; + mode = 'happy'; + transition = true; + const width = w / scale; + const cx = w; + var iv = setInterval(function () { + angryState++; + if (angryState > 3) { + clearInterval(iv); + transition = false; + angryState = 0; + mode = oldMode; + if (mode == 'game') { + gameTries++; + } + } + drawScene(); + }, 1000); +} + +function animateAngry () { + if (transition || mode == 'angry') { + return; + } + angryState = 0; + mode = 'angry'; + transition = true; + const width = w / scale; + const cx = w; + var iv = setInterval(function () { + angryState++; + if (angryState > 3) { + clearInterval(iv); + transition = false; + angryState = 0; + mode = oldMode; + if (mode == 'game') { + gameTries++; + } + } + drawScene(); + }, 1000); +} + +function animateFood () { + if (transition || mode == 'eating') { + return; + } + // XXX TODO this is printing the angry state not the eating one + angryState = 0; + mode = 'eating'; + tama.hungry++; + if (lightSelect == 1) { // snack + tama.happy++; + tama.hungry++; + tama.sickness += 2; + } + frame = 0; + transition = true; + const width = w / scale; + const cx = w; + var iv = setInterval(function () { + angryState++; + if (angryState > 3) { + clearInterval(iv); + transition = false; + angryState = 0; + mode = 'food'; + } + drawScene(); + }, 1000); +} + +function animateShower () { + if (transition) { + return; + } + transition = true; + const width = w / scale; + let cx = w; + var iv = setInterval(function () { + sx -= scale * 4; + drawScene(); + cx -= scale * 4; + g.setColor(1, 1, 1); + g.drawImage(shower, cx, 40 - scale, { scale: scale }); + if (cx < 0) { + clearInterval(iv); + mode = ''; + transition = false; + animated = true; + sx += width; + if (sx < 0) sx = 0; + if (tama.cacas > 0) { + // if it was dirty, play the happy animation + } + tama.cacas = 0; + drawScene(); + } + }, 100); +} + +function animateToGame () { + if (transition || mode == 'game') { + return; + } + mode = 'game'; + gameChoice = 0; + transition = true; + let cx = 0; + sx = -w; + animated = false; + var iv = setInterval(function () { + sx += scale * 2; + updateAnimation(); + drawScene(); + cx += scale * 2; + if (cx > w) { + clearInterval(iv); + sx = 0; + animated = true; + transition = false; + drawScene(); + } + }, 100); +} + +function animateToClock () { + if (transition) { + return; + } + if (mode == 'clock') { + return; + } + mode = 'clock'; + transition = true; + const width = w / scale; + let cx = w; + sx = 0; + animated = false; + var iv = setInterval(function () { + sx -= scale * 4; + drawScene(); + cx -= scale * 4; + g.setColor(0, 0, 0); + if (cx < 0) { + clearInterval(iv); + mode = 'clock'; + transition = false; + animated = true; + drawScene(); + } + }, 100); +} + +function animateFromClock () { + if (transition) { + return; + } + if (mode != 'clock') { + return; + } + transition = true; + let cx = 0; + const width = w / scale; + animated = false; + var iv = setInterval(function () { + sx += scale * 4; + drawScene(); + cx += scale * 4; + if (cx > w) { + clearInterval(iv); + mode = ''; + sx = 0; + animated = true; + transition = false; + drawScene(); + } + }, 100); +} + +function button (n) { + if (evolution == 0) { + if (n == 3) { + evolution = 1; + return; + } + } + if (mode == 'happy' || mode == 'angry') { + return; + } + + if (mode == 'game') { + /* + if (gameTries > 3) { + mode = ""; + gameWins = 0; + gameTries = 0; + //tama.tired++; + } + */ + switch (n) { + case 1: + // pick left + gameChoice = 1; + drawScene(); + oldMode = 'game'; + break; + case 2: + // pick right + gameChoice = 2; + drawScene(); + oldMode = 'game'; + break; + case 3: + mode = ''; + // exit game + break; + } + return; + } + if (mode == 'eating') { + Bangle.buzz(); + return; + } + Bangle.beep(150); + + switch (n) { + case 1: + switch (mode) { + case 'clock': + useAmPm = !useAmPm; + drawScene(); + break; + case 'food': + case 'light': + lightSelect = lightSelect ? 0 : 1; + drawScene(); + break; + case 'status': + if (oldMode == 'clock') { + } else { + statusMode++; + drawScene(); + } + break; + default: + nextItem(); + drawScene(); + break; + } + break; + case 2: + switch (mode) { + case 'clock': + animateFromClock(); + break; + case 'status': + if (oldMode == 'clock') { + } else { + statusMode++; + drawScene(); + } + break; + case 'food': + animateFood(); + break; + case 'light': + mode = ''; + lightMode = lightSelect; + drawScene(); + break; + default: + activateItem(); + tool = -1; + drawScene(); + } + break; + case 3: + switch (mode) { + case 'clock': + animateFromClock(); + break; + case 'light': + case 'food': + mode = ''; + lightState = 0; + drawScene(); + break; + case 'status': + if (oldMode == 'clock') { + mode = 'clock'; + oldMode = ''; + } else { + mode = ''; + statusMode = 0; + drawScene(); + } + break; + default: + mode = ''; + tool = -1; + drawScene(); + break; + } + break; + } +} + +function drawGame () { + g.setColor(0, 0, 0); + + let one = frame % 2; + if (transition) { + one = 0; + g.drawImage(heart1, sx + w + (scale * 6), 40, { scale: scale }); + g.drawImage(heart1, sx + w + (scale * 16), 40, { scale: scale }); + g.drawImage(heart0, sx + w, 40 + (scale * 8), { scale: scale }); + g.drawImage(heart0, sx + w + (scale * 12), 40 + (scale * 8), { scale: scale }); + } else { + if (gameTries > 4) { + if (oldMode != '') { + if (gameWins > 2) { + animateHappy(); + } + } + mode = oldMode; + oldMode = ''; + // g.drawImage(); + } else { + g.drawImage(one ? tama06no1 : tama06no0, (scale * 7) + sx, 40, { scale: scale }); + } + } +} + +function drawClock () { + const d = new Date(); + let hh = ''; + if (useAmPm) { + const h = (d.getHours() > 12) ? d.getHours() - 12 : d.getHours(); + hh = (h < 10) ? ' ' + h : '' + h; + } else { + hh = (d.getHours() < 10) ? ' ' + d.getHours() : '' + d.getHours(); + } + const mm = (d.getMinutes() < 10) ? '0' + d.getMinutes() : '' + d.getMinutes(); + const ss = (d.getSeconds() < 10) ? '0' + d.getSeconds() : '' + d.getSeconds(); + const ts = hh + ':' + mm; + const useVector = false; + const wsx = w + sx + ((2.4) * scale); + + if (useVector) { + g.setFont('Vector', 60); + g.setColor(0, 0, 0); + g.drawString(ts, w + sx + 30, 54); + g.setFont('Vector', 24); + g.setColor(0, 0, 0); + g.drawString(ss, w + sx + (w - 20), 104); + } else { + const s0 = numbers[ts[0] - '0']; + const s1 = numbers[ts[1] - '0']; + const s2 = numbers[ts[3] - '0']; + const s3 = numbers[ts[4] - '0']; + const yy = 34; + // hours + if (s0) { + g.drawImage(s0, wsx, yy, { scale: scale }); + } + g.drawImage(s1, wsx + (5 * scale), yy, { scale: scale }); + g.drawImage(colon, wsx + (scale + scale + scale + (5 * scale)), yy, { scale: scale }); + // minutes + g.drawImage(s2, wsx + (2 * scale) + (5 * 2 * scale), yy, { scale: scale }); + g.drawImage(s3, wsx + (2 * scale) + (5 * 3 * scale), yy, { scale: scale }); + // seconds + const s4 = snumbers[ss[0] - '0']; + const s5 = snumbers[ss[1] - '0']; + g.drawImage(s4, wsx + (3 * scale) + (3 * 6 * scale), yy, { scale: scale }); + g.drawImage(s5, wsx + scale + (4 * 6 * scale), yy, { scale: scale }); + const arrows = [ + '00000', + '10000', + '11000', + '11100', + '11110', + '11111', + '01111', + '00111', + '00011', + '00001' + ]; + // arrow + for (let i = 0; i < 5; i++) { + const n = d.getSeconds() % 10; + const arrow = arrows[n]; + const img = (arrow[i] == '1') ? right1 : right0; + g.drawImage(img, wsx + (3 * i * scale) + (scale * 14), yy + (10 * scale), { scale: scale }); + } + } + if (useAmPm) { + if (d.getHours() < 13) { + g.drawImage(am, wsx, yy + (8 * scale), { scale: scale }); + } else { + g.drawImage(pm, wsx, yy + (8 * scale), { scale: scale }); + } + } else { + g.drawImage(h24, wsx, yy + (8 * scale), { scale: scale }); + // show something from tamagotchi stats + } +} + +setInterval(function () { + // if (animated) { + updateAnimation(); + drawScene(); + // } +}, 1000); + +let cacaLevel = 0; +let cacaBirth = null; + +setInterval(function () { + // poo maker + if (tama.hungry > 0 && !tama.sleep) { + const a = 0 | (cacaLevel / tama.tummy); + const b = 0 | ((cacaLevel + tama.hungry) / tama.tummy); + cacaLevel += tama.hungry; + if (a != b) { + if (tama.cacas == 0) { + cacaBirth = new Date(); + } + tama.hungry--; + tama.cacas++; + } + } + const d = new Date(); + const h = d.getHours(); + tama.sleep = (h > 22 || h < 8); + if (tama.awake > 0) { + tama.awake--; + tama.sleep = false; + } +}, 5000); + +setInterval(function () { + if (tama.sleep) { + return; + } + callForAttention = false; + + // health check + tama.sickness += tama.cacas; + if (tama.hungry == 0) { + callForAttention = true; + // tama.sickness++; + } + if (tama.hungry == 4) { + // tama.sickness++; + } + if (tama.sickness > tama.defenses) { + tama.sickness = 0; + tama.sick++; + } + if (tama.sick > 0) { + callForAttention = true; + } +}, 2000); + +updateAnimation(); + +Bangle.on('touch', function (r, s) { + const w4 = w / 3; + if (s.x > w - w4) { + if (s.y < 50) { + Bangle.beep(150); + if (oldMode == 'clock') { + oldMode = ''; + mode = 'clock'; + } else + if (mode == 'clock') { + mode = 'status'; + oldMode = 'clock'; + statusMode = 5; // battery + } else { + evolution = !evolution; + tool = -1; + } + drawScene(); + } else { + button(3); + } + } else if (s.x < w4) { + button(1); + } else { + button(2); + } +}); + diff --git a/apps/tabanchi/app.png b/apps/tabanchi/app.png new file mode 100644 index 0000000000000000000000000000000000000000..7e653301d7e4b879e9b33bee2c190f56d45e1732 GIT binary patch literal 224 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA1|-9oezpUt<(@8%AsP4H&hX|spuoc#TJ>Lh zd9-=skt5qy8fOb0eE9UT6a#}pV%0TQC8g8-FKU0vF8;;evsiT2R?dhEX}|YaEex=1 zHOXaCe6lb78c(a2#*?dV*211zx?2NYmdKI;Vst0E5F-IRF3v literal 0 HcmV?d00001 diff --git a/apps/tabanchi/metadata.json b/apps/tabanchi/metadata.json new file mode 100644 index 000000000..23de01869 --- /dev/null +++ b/apps/tabanchi/metadata.json @@ -0,0 +1,31 @@ +{ + "id": "tabanchi", + "name": "Tabanchi", + "shortName": "Tabanchi", + "version": "0.0.1", + "type": "app", + "description": "Tamagotchi WatchApp", + "icon": "app.png", + "allow_emulator": true, + "tags": "watch, pet", + "supports": [ + "BANGLEJS2" + ], + "readme": "README.md", + "storage": [ + { + "name": "tabanchi.app.js", + "url": "app.js" + }, + { + "name": "tabanchi.img", + "url": "app-icon.js", + "evaluate": true + } + ], + "screenshots": [ + { + "url": "screenshot.jpg" + } + ] +} diff --git a/apps/tabanchi/screenshot.jpg b/apps/tabanchi/screenshot.jpg new file mode 100644 index 0000000000000000000000000000000000000000..fcd97df84bd3b30b8c6900a1e9a6eeb2e9c65001 GIT binary patch literal 567394 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 + + + + diff --git a/apps/noteify/metadata.json b/apps/noteify/metadata.json index bedff0e5b..7e897d1f0 100644 --- a/apps/noteify/metadata.json +++ b/apps/noteify/metadata.json @@ -14,6 +14,7 @@ ], "data": [{"name":"noteify.json"}], "dependencies": {"scheduler":"type","textinput":"type"}, + "interface": "interface.html", "screenshots": [ {"url": "menu.png"}, {"url": "note.png"}, From 5ac85350f930a23a5cfd9eb7bdf7c31ccfad9b6c Mon Sep 17 00:00:00 2001 From: Arne Schauf Date: Thu, 14 Apr 2022 15:36:58 +0200 Subject: [PATCH 208/509] [terminalclock] Add altitude to terminalclock --- apps/terminalclock/ChangeLog | 1 + apps/terminalclock/app.js | 49 ++++++++++++++++++++++++++------ apps/terminalclock/metadata.json | 2 +- apps/terminalclock/settings.js | 9 ++++++ 4 files changed, 51 insertions(+), 10 deletions(-) diff --git a/apps/terminalclock/ChangeLog b/apps/terminalclock/ChangeLog index 4e53f6f8b..c136cdac6 100644 --- a/apps/terminalclock/ChangeLog +++ b/apps/terminalclock/ChangeLog @@ -2,3 +2,4 @@ 0.02: Rename "Activity" in "Motion" and display the true values for it 0.03: Add Banglejs 1 compatibility 0.04: Fix settings bug +0.05: Add altitude display diff --git a/apps/terminalclock/app.js b/apps/terminalclock/app.js index d219b84d8..904df8656 100644 --- a/apps/terminalclock/app.js +++ b/apps/terminalclock/app.js @@ -1,6 +1,7 @@ var locale = require("locale"); var fontColor = g.theme.dark ? "#0f0" : "#000"; var heartRate = 0; +var altitude = -9001; // handling the differents versions of the Banglejs smartwatch if (process.env.HWVERSION == 1){ @@ -26,13 +27,13 @@ function setFontSize(pos){ } function clearField(pos){ - var yStartPos = Bangle.appRect.y + - paddingY * (pos - 1) + - font6x8At4Size * Math.min(1, pos-1) + + var yStartPos = Bangle.appRect.y + + paddingY * (pos - 1) + + font6x8At4Size * Math.min(1, pos-1) + font6x8At2Size * Math.max(0, pos-2); - var yEndPos = Bangle.appRect.y + - paddingY * (pos - 1) + - font6x8At4Size * Math.min(1, pos) + + var yEndPos = Bangle.appRect.y + + paddingY * (pos - 1) + + font6x8At4Size * Math.min(1, pos) + font6x8At2Size * Math.max(0, pos-1); g.clearRect(Bangle.appRect.x, yStartPos, Bangle.appRect.x2, yEndPos); } @@ -44,9 +45,9 @@ function clearWatchIfNeeded(now){ function drawLine(line, pos){ setFontSize(pos); - var yPos = Bangle.appRect.y + - paddingY * (pos - 1) + - font6x8At4Size * Math.min(1, pos-1) + + var yPos = Bangle.appRect.y + + paddingY * (pos - 1) + + font6x8At4Size * Math.min(1, pos-1) + font6x8At2Size * Math.max(0, pos-2); g.drawString(line, 5, yPos, true); } @@ -84,6 +85,14 @@ function drawHRM(pos){ drawLine(">HR: unknown", pos); } +function drawAltitude(pos){ + clearField(pos); + if(altitude > 0) + drawLine(">Alt: " + altitude.toFixed(1) + "m", pos); + else + drawLine(">Alt: unknown", pos); +} + function drawActivity(pos){ clearField(pos); var health = Bangle.getHealthStatus('last'); @@ -104,6 +113,10 @@ function draw(){ drawDate(now, curPos); curPos++; } + if(settings.showAltitude){ + drawAltitude(curPos); + curPos++; + } if(settings.showHRM){ drawHRM(curPos); curPos++; @@ -124,6 +137,18 @@ Bangle.on('HRM',function(hrmInfo) { heartRate = hrmInfo.bpm; }); +var MEDIANLENGTH = 20; +var avr = [], median; +Bangle.on('pressure', function(e) { + while (avr.length>MEDIANLENGTH) avr.pop(); + avr.unshift(e.altitude); + median = avr.slice().sort(); + if (median.length>10) { + var mid = median.length>>1; + altitude = E.sum(median.slice(mid-4,mid+5)) / 9; + } +}); + // Clear the screen once, at startup g.clear(); @@ -135,7 +160,13 @@ var settings = Object.assign({ showHRM: true, showActivity: true, showStepCount: true, + showAltitude: true, }, require('Storage').readJSON("terminalclock.json", true) || {}); + +if(settings.showAltitude){ + Bangle.setBarometerPower(true, "app"); +} + // Show launcher when middle button pressed Bangle.setUI("clock"); // Load widgets diff --git a/apps/terminalclock/metadata.json b/apps/terminalclock/metadata.json index a34602913..7bc00bca4 100644 --- a/apps/terminalclock/metadata.json +++ b/apps/terminalclock/metadata.json @@ -3,7 +3,7 @@ "name": "Terminal Clock", "shortName":"Terminal Clock", "description": "A terminal cli like clock displaying multiple sensor data", - "version":"0.04", + "version":"0.05", "icon": "app.png", "type": "clock", "tags": "clock", diff --git a/apps/terminalclock/settings.js b/apps/terminalclock/settings.js index 6b686058b..7a85f3034 100644 --- a/apps/terminalclock/settings.js +++ b/apps/terminalclock/settings.js @@ -4,6 +4,7 @@ var settings = Object.assign({ HRMinConfidence: 50, showDate: true, + showAltitude: true, showHRM: true, showActivity: true, showStepCount: true, @@ -33,6 +34,14 @@ writeSettings(); } }, + 'Show Altitude': { + value: settings.showAltitude, + format: v => v?"Yes":"No", + onchange: v => { + settings.showAltitude = v; + writeSettings(); + } + }, 'Show HRM': { value: settings.showHRM, format: v => v?"Yes":"No", From c1cae40d80bfbaaed2926319f696f8f11a60cb7c Mon Sep 17 00:00:00 2001 From: Arne Schauf Date: Mon, 9 May 2022 14:15:30 +0200 Subject: [PATCH 209/509] Disable barometer/altitude stuff for Bangle.js 1 --- apps/terminalclock/ChangeLog | 2 +- apps/terminalclock/app.js | 4 ++-- apps/terminalclock/settings.js | 10 +++++++--- 3 files changed, 10 insertions(+), 6 deletions(-) diff --git a/apps/terminalclock/ChangeLog b/apps/terminalclock/ChangeLog index c136cdac6..b752c829d 100644 --- a/apps/terminalclock/ChangeLog +++ b/apps/terminalclock/ChangeLog @@ -2,4 +2,4 @@ 0.02: Rename "Activity" in "Motion" and display the true values for it 0.03: Add Banglejs 1 compatibility 0.04: Fix settings bug -0.05: Add altitude display +0.05: Add altitude display (only Bangle.js 2) diff --git a/apps/terminalclock/app.js b/apps/terminalclock/app.js index 904df8656..61861f745 100644 --- a/apps/terminalclock/app.js +++ b/apps/terminalclock/app.js @@ -160,10 +160,10 @@ var settings = Object.assign({ showHRM: true, showActivity: true, showStepCount: true, - showAltitude: true, + showAltitude: process.env.HWVERSION != 1 ? true : false, }, require('Storage').readJSON("terminalclock.json", true) || {}); -if(settings.showAltitude){ +if(settings.showAltitude && process.env.HWVERSION != 1){ Bangle.setBarometerPower(true, "app"); } diff --git a/apps/terminalclock/settings.js b/apps/terminalclock/settings.js index 7a85f3034..4b09aad6a 100644 --- a/apps/terminalclock/settings.js +++ b/apps/terminalclock/settings.js @@ -4,7 +4,7 @@ var settings = Object.assign({ HRMinConfidence: 50, showDate: true, - showAltitude: true, + showAltitude: process.env.HWVERSION != 1 ? true : false, showHRM: true, showActivity: true, showStepCount: true, @@ -15,7 +15,7 @@ } // Show the menu - E.showMenu({ + var menu = { "" : { "title" : "Terminal Clock" }, "< Back" : () => back(), 'HR confidence': { @@ -66,5 +66,9 @@ writeSettings(); } } - }); + } + if (process.env.HWVERSION == 1) { + delete menu['Show Altitude'] + } + E.showMenu(menu); }) From 130e969883f2dd2dc62cc6d762ebe6a684721fd2 Mon Sep 17 00:00:00 2001 From: sir-indy <53864146+sir-indy@users.noreply.github.com> Date: Mon, 9 May 2022 13:43:38 +0100 Subject: [PATCH 210/509] Update lib.js Updated with feedback from @Ganblejs http://forum.espruino.com/comments/16512632/ Keyboard doesn't work again after going into the help screen, how does layout to re-establish callbacks on button presses? --- apps/kbmulti/lib.js | 66 ++++++++++++++++++++++++++++----------------- 1 file changed, 42 insertions(+), 24 deletions(-) diff --git a/apps/kbmulti/lib.js b/apps/kbmulti/lib.js index ea7bf9ec3..527c8a8cc 100644 --- a/apps/kbmulti/lib.js +++ b/apps/kbmulti/lib.js @@ -10,20 +10,20 @@ exports.input = function(options) { var letters = { "1":".,!?1","2":"ABC2","3":"DEF3", "4":"GHI4","5":"JKL5","6":"MNO6", - "7":"PQRS7","8":"TUV8","9":"WXYZ9", - "0":"_@:/0" + "7":"PQRS7","8":"TUV80","9":"WXYZ9", + //"0":"_@:/0" }; + var helpMessage = 'swipe:\nRight: Space\nLeft:Backspace\nUp/Down: Caps lock\n'; var charTimeout; // timeout after a key is pressed var charCurrent; // current character (index in letters) var charIndex; // index in letters[charCurrent] var caps = true; var layout; - //var text = ""; function displayText() { layout.clear(layout.text); - layout.text.label = text; + layout.text.label = text.slice(-12); layout.render(layout.text); } @@ -46,7 +46,6 @@ exports.input = function(options) { } function newCharacter(ch) { - text = text.replace("_", " "); displayText(); charCurrent = ch; charIndex = 0; @@ -72,39 +71,58 @@ exports.input = function(options) { charTimeout = setTimeout(function() { charTimeout = undefined; newCharacter(); - }, 750); + }, 500); } + + function onSwipe(dirLeftRight, dirUpDown) { + if (dirUpDown) { + setCaps(); + } else if (dirLeftRight == 1) { + text += ' '; + newCharacter(); + } else if (dirLeftRight == -1) { + backspace(); + } + } + +function onHelp() { + Bangle.removeListener("swipe", onSwipe); + E.showPrompt( + helpMessage, {title: "Help", buttons : {"Ok":true}} + ).then(function(v) { + Bangle.on('swipe', onSwipe); + layout.render(); + }); +} + return new Promise((resolve,reject) => { layout = new Layout( { type:"v", c: [ - {type:"txt", font:"10%", label:"", id:"text", filly:1, fillx:1}, + {type:"txt", font:"10%", label:text, id:"text", cb: l=>onHelp(), fillx:1}, {type:"h", c: [ - {type:"btn", font:fontSize, label:letters[1], cb: l=>onKeyPad(1), id:'1', fillx:1 }, - {type:"btn", font:fontSize, label:letters[2], cb: l=>onKeyPad(2), id:'2', fillx:1 }, - {type:"btn", font:fontSize, label:letters[3], cb: l=>onKeyPad(3), id:'3', fillx:1 }, + {type:"btn", font:fontSize, label:letters[1], cb: l=>onKeyPad(1), id:'1', fillx:1, filly:1 }, + {type:"btn", font:fontSize, label:letters[2], cb: l=>onKeyPad(2), id:'2', fillx:1, filly:1 }, + {type:"btn", font:fontSize, label:letters[3], cb: l=>onKeyPad(3), id:'3', fillx:1, filly:1 }, ]}, - {type:"h", c: [ - {type:"btn", font:fontSize, label:letters[4], cb: l=>onKeyPad(4), id:'4', fillx:1 }, - {type:"btn", font:fontSize, label:letters[5], cb: l=>onKeyPad(5), id:'5', fillx:1 }, - {type:"btn", font:fontSize, label:letters[6], cb: l=>onKeyPad(6), id:'6', fillx:1 }, + {type:"h", filly:1, c: [ + {type:"btn", font:fontSize, label:letters[4], cb: l=>onKeyPad(4), id:'4', fillx:1, filly:1 }, + {type:"btn", font:fontSize, label:letters[5], cb: l=>onKeyPad(5), id:'5', fillx:1, filly:1 }, + {type:"btn", font:fontSize, label:letters[6], cb: l=>onKeyPad(6), id:'6', fillx:1, filly:1 }, ]}, - {type:"h", c: [ - {type:"btn", font:fontSize, label:letters[7], cb: l=>onKeyPad(7), id:'7', fillx:1 }, - {type:"btn", font:fontSize, label:letters[8], cb: l=>onKeyPad(8), id:'8', fillx:1 }, - {type:"btn", font:fontSize, label:letters[9], cb: l=>onKeyPad(9), id:'9', fillx:1 }, - ]}, - {type:"h", c: [ - {type:"btn", font:fontSize, label:letters[0], cb: l=>onKeyPad(0), id:'0', fillx:1 }, - {type:"btn", font:fontSize, label:"^", cb: l=>setCaps(), id:'caps', fillx:1}, - {type:"btn", font:fontSize, label:"<", cb: l=>backspace(), fillx:1 }, + {type:"h", filly:1, c: [ + {type:"btn", font:fontSize, label:letters[7], cb: l=>onKeyPad(7), id:'7', fillx:1, filly:1 }, + {type:"btn", font:fontSize, label:letters[8], cb: l=>onKeyPad(8), id:'8', fillx:1, filly:1 }, + {type:"btn", font:fontSize, label:letters[9], cb: l=>onKeyPad(9), id:'9', fillx:1, filly:1 }, ]}, ] },{back: ()=>{ Bangle.setUI(); + Bangle.removeListener("swipe", onSwipe); g.clearRect(Bangle.appRect); resolve(text); }}); g.clearRect(Bangle.appRect); + Bangle.on('swipe', onSwipe); layout.render(); }); -}; \ No newline at end of file +}; From 868956ea349aeccf8db11c3ddf480cbd1a065b6a Mon Sep 17 00:00:00 2001 From: Arne Schauf Date: Mon, 9 May 2022 16:07:08 +0200 Subject: [PATCH 211/509] [terminalclock] Update description for v0.05 --- apps/terminalclock/README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/apps/terminalclock/README.md b/apps/terminalclock/README.md index 5a54583d2..c7452397d 100644 --- a/apps/terminalclock/README.md +++ b/apps/terminalclock/README.md @@ -4,6 +4,7 @@ A clock displayed as a terminal cli. It can display : - time - date +- altitude - hrm - motion - steps From 3990c0ef32960c4756bea4d480e29ad7fbab675e Mon Sep 17 00:00:00 2001 From: Richard de Boer Date: Mon, 9 May 2022 20:55:31 +0200 Subject: [PATCH 212/509] kbmorse: new keyboard, for the Bangle.js 1 --- apps/kbmorse/ChangeLog | 1 + apps/kbmorse/README.md | 25 ++++ apps/kbmorse/app.png | Bin 0 -> 2919 bytes apps/kbmorse/demo.gif | Bin 0 -> 709710 bytes apps/kbmorse/lib.js | 247 ++++++++++++++++++++++++++++++++++++ apps/kbmorse/metadata.json | 15 +++ apps/kbmorse/screenshot.png | Bin 0 -> 4172 bytes 7 files changed, 288 insertions(+) create mode 100644 apps/kbmorse/ChangeLog create mode 100644 apps/kbmorse/README.md create mode 100644 apps/kbmorse/app.png create mode 100644 apps/kbmorse/demo.gif create mode 100644 apps/kbmorse/lib.js create mode 100644 apps/kbmorse/metadata.json create mode 100644 apps/kbmorse/screenshot.png diff --git a/apps/kbmorse/ChangeLog b/apps/kbmorse/ChangeLog new file mode 100644 index 000000000..f62348ec8 --- /dev/null +++ b/apps/kbmorse/ChangeLog @@ -0,0 +1 @@ +0.01: New Keyboard! \ No newline at end of file diff --git a/apps/kbmorse/README.md b/apps/kbmorse/README.md new file mode 100644 index 000000000..2d5aa166f --- /dev/null +++ b/apps/kbmorse/README.md @@ -0,0 +1,25 @@ +# Morse Keyboard + +A library that provides the ability to input text by entering morse code. + +![demo](demo.gif) + +## Usage + + +* Press `BTN1` to input a dot, `BTN3` to input a dash, and `BTN2` to accept the +character for your current input. +* Long-press `BTN1` to toggle UPPERCASE for your next character. +* Long-press `BTN2` to finish editing. +* Tap the left side of the screen for backspace. +* Swipe left/right to move the cursor. +* Input three spaces in a row for a newline. + +The top/bottom of the screen show which characters start with your current input, +so basically you just look which side includes the letter you want to type, and +press that button to narrow your selection, until it appears next to `BTN2`. + + +## For Developers + +See the README for `kbswipe`/`kbtouch` for instructions on how to use this in your app. \ No newline at end of file diff --git a/apps/kbmorse/app.png b/apps/kbmorse/app.png new file mode 100644 index 0000000000000000000000000000000000000000..0abc7e67d9bad51e0ddf249b53fd173071a58756 GIT binary patch literal 2919 zcmV-t3z+nYP)Xj@Ui z3N4?sooPq=p<}0x*v_c^(COHjwo}_Oqk=k85lFdIL<2~@H57zavBM>hSVFkuc9NW& z-S_E-J-cW3oISUYc$}&KPiLR^vd`^(F7GDr1^&OGO8N5T%a@yR6}{0CCb%@MMf`JY z+a@)p17li(&)7CZ%r-If{<_VZTMOZ#WD22rVUilIo)g;t;jm zxo5|g+FZOu213AmFtz!JQj8WrCeMUPGXNts!Lzh~mFoeiIqs8xo?JKsb+3T7l)%q{ z&z}N7O>?amx%obHq>K(rqf@7Vq++iD>ItqHWETUug8`RVNODq*7s7+gU0uoc63;ef$7sZ#R{vjs#;wfhf5LxPo+z znncU=+Yu3Bqb7TTG|ju8s^bShYsUkIUO{a1mEQWs`KuVxaDW#b%=G5P##~AB^uw~N#BS2LvHFfG@8BeiFN)`wEn0f->M zPFyR4von??$3q$+WpMVoJ2HBJ_L>>A)yxRB{^!092uoD{rYArPOLc@7KV=usxcj%~ zQe7uw_2KcYGlx;Ki zt#wp39Ljp#<)=AkJdKuK_$aw(Mk9~rL4Ymd{jp_&gi| z0hE+PcqowqM3c&EB@`Y?VdRb#D@GU+S&6|+(Q1f@{x8C= z+E*rSg|#~O>b1u0%l@@EZc$&iedC$F^3WgXlLEfEa@9|iG9J?~7$EgUN6^A2Vkf@0 z?JqC?y9LonaUcd6k;@3l)#nZR_}*+c$39)vw$R0E$w;vX!gvj~K>! z5kVOSQ>RR2?AUQcqh)kAR4h%kQqct(yGi6F$| zaV}iE$k1WKh?piRHJdcjclF8cP0kBk1s?~aiiQxVG&`$SK3)1mtM`b1#5 z<|T!EAE2tLn&HET)6)|tVOdE*9Z%3AXxpYU)=5uym#c&gk;?`}_bWw>zq0}m!*wBt zW*DY7He%%Ep0@Ywts@qTF=pHZ#*Q6NG!mhD=upnJoJ9!}QM_Q9hNpHznZZU#Oae`h zY5FXt93HgBL~+@OF`v#|c*PTMzrO8R&rp_rN=4KfK`Ly^V)obO(AC{dYg>mGqX2q( zdPwxfIdt%VM?&*ULo1Pxh9aW@Pn{o#nobMR-qDF?zvNiLvNEo_-0|=W%=`_G$CF|- z%J{<#3zz=FrN39Vqfra%06JqaPM$bHMR`SVEnwRg=g*xZ-rM6+|8(e`H=80oUDn+6 zBj9&`*F_DOgHjK=1GcT{?&;yGX!iB6I+JMx%d#Kv_6l)-Lm3-D(852k?O%fv znRQCFC`Cl0u2Uip3R12VkIq}TWXImuw>hcSmZ!vI4N!6T$cId*sUZ@HkVqul_o8i^ z#>P{g^|i&*0FkXPulp2uA%pug+_`c!20Z9KClVGS5RFC|I&@ed75cGj^DFCf?R)F8 zyPp>@MWmr_`<54TOnqVAl4X0bA+ty7=v&VT-H_ctNbiO-gh&a939++jnjY#4Y#sP>cN5wLTQ#0sd6xN7jHfKzL_Y?H(o6C9~H2Sqm25 zE{xe(4n;~2#+irGUW_Lg4A1TfQ0vb&p%AZMGEMLCdY>nGXEMW*~idClh@td`q z4&-7(D`PEU*8!LYYk>s-_4Tz~u=ciD3*Nm8tTmvPB$w0*tUI{(>luw&pW5MEXS@*W zUx?dJYSb1(sSV0BH(;0>L>U{jQX6d1AIw|4Y(}p2@9e7GBO-N4UIJbKYxM_j?cAg_ z&!@^>wf^9~-J8R@)Z&6*p=UgY^__7w*RqY8mtpbdLdU02vG{N(=gKWf>m9 z>BAAotZ+lJ0J%>i2iQcK$-Sx>-;^0#y&hQapKEd}J8bzHED_Z#}T) zB}1uu03&d*k>kRnKmV}V|D`8D^XPy`43ky+cW&EMh+>L?VJLNv@_9nAct|0e_50fN zr1s3-ba^xwY+G_~esPLNM1dhdS+tD7m6fD>K{{jpayZl@e9sbC>x}w6f}{fcmIuMM zH6j`W&YwT$vJkkh=r;wpKL%G;GI7$Cso;@xzw}#{u%;*DPSANs9U+ev+}BTY6$H@J z-Hl}>K;YcDmI19S4bNgeWcv$?g3I2J;}Q@$2Q6O-(ccK1{Y?I{-LdtrBK+2Oe(7+9 z4FEFI;H6mKA0N^O3bnp%+h|{Z5Edx=6OpV@{}QZUj3WHO(Y7q&@pzVb1ET~l2x{A= zE7lo!Ss)jaB`}5ryS#zY=kh596y_!U4I{&P+3NbRqfuyOn6p}Y76=W}Bp5piB1 z#Czkkx3{J8ct(EqrMZyjfb~5u$)4(hwLw~1O!K^fgm(mDu^1;hj}=$;`paB0OI$)| z`O4n(@OIC91C;fP+EAV%M!3MX@!)%+2$HbKFTFXUlFk_W1g1Y1^7x${{=#> ze`U>>o8vQ=0wj3XkBAbL?0vm6u0Sb;*v@+upiu4OzEu7Cdwmr03w(j>_#gC<;LrX= R&OQJD002ovPDHLkV1nV;o)Z87 literal 0 HcmV?d00001 diff --git a/apps/kbmorse/demo.gif b/apps/kbmorse/demo.gif new file mode 100644 index 0000000000000000000000000000000000000000..991c8c68df652e86eb83c6636f3f138a4027c6d1 GIT binary patch literal 709710 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⋘S;+{PfC9 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%0DsRwY1KhYCY5+j_`P275fClQri_ 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 FAdZNwI@s_ooVHl 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�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

          WX!TIA~tP=6pGZL*4 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 literal 0 HcmV?d00001 diff --git a/apps/kbmorse/lib.js b/apps/kbmorse/lib.js new file mode 100644 index 000000000..8bc177a46 --- /dev/null +++ b/apps/kbmorse/lib.js @@ -0,0 +1,247 @@ +exports.input = function(options) { + options = options || {}; + let text = options.text; + if ("string"!= typeof text) text = ""; + let code = "", + cur = text.length, // cursor position + uc = !text.length, // uppercase + spc = 0; // consecutive spaces entered + + const codes = { + // letters + "a": ".-", + "b": "-...", + "c": "-.-.", + "d": "-..", + "e": ".", + // no é + "f": "..-.", + "g": "--.", + "h": "....", + "i": "..", + "j": ".---", + "k": "-.-", + "l": ".-..", + "m": "--", + "n": "-.", + "o": "---", + "p": ".--.", + "q": "--.-", + "r": ".-.", + "s": "...", + "t": "-", + "u": "..-", + "v": "...-", + "w": ".--", + "x": "-..-", + "y": "-.--", + "z": "--..", + //digits + "1": ".----", + "2": "..---", + "3": "...--", + "4": "....-", + "5": ".....", + "6": "-....", + "7": "--...", + "8": "---..", + "9": "----.", + "0": "-----", + // punctuation + ".": ".-.-.-", + ",": "--..--", + ":": "---...", + "?": "..--..", + "!": "-.-.--", + "'": ".----.", + "-": "-....-", + "_": "..--.-", + "/": "-..-.", + "(": "-.--.", + ")": "-.--.-", + "\"": ".-..-.", + "=": "-...-", + "+": ".-.-.", + "*": "-..-", + "@": ".--.-.", + "$": "...-..-", + "&": ".-...", + }, chars = Object.keys(codes); + + function choices(start) { + return chars.filter(char => codes[char].startsWith(start)); + } + function char(code) { + if (code==="") return " "; + for(const char in codes) { + if (codes[char]===code) return char; + } + const c = choices(code); + if (c.length===1) return c[0]; // "-.-.-" is nothing, and only "-.-.--"(!) starts with it + return null; + } + + return new Promise((resolve, reject) => { + + function update() { + let dots = [], dashes = []; + layout.pick.label = (code==="" ? " " : ""); + choices(code).forEach(char => { + const c = codes[char]; + if (c===code) { + layout.pick.label = char; + } + const next = c.substring(code.length, code.length+1); + if (next===".") dots.push(char); + else if (next==="-") dashes.push(char); + }); + if (!code && spc>1) layout.pick.label = atob("ABIYAQAAAAAAAAAABwABwABwABwABwABwOBwOBwOBxwBxwBxwB/////////xwABwABwAAOAAOAAOAA=="); + g.setFont("6x8:2"); + const wrap = t => g.wrapString(t, Bangle.appRect.w-60).join("\n"); + layout.del.label = cur ? atob("AAwIAQ/hAiKkEiKhAg/gAA==") : " "; + layout.code.label = code; + layout.dots.label = wrap(dots.join(" ")); + layout.dashes.label = wrap(dashes.join(" ")); + if (uc) { + layout.pick.label = layout.pick.label.toUpperCase(); + layout.dots.label = layout.dots.label.toUpperCase(); + layout.dashes.label = layout.dashes.label.toUpperCase(); + } + let label = text.slice(0, cur)+"|"+text.slice(cur); + layout.text.label = g.wrapString(label, Bangle.appRect.w-80).join("\n") + .replace("|", atob("AAwQAfPPPAwAwAwAwAwAwAwAwAwAwAwAwPPPPA==")); + layout.update(); + layout.render(); + } + + function add(d) { + code += d; + const l = choices(code).length; + if (l===1) done(); + else if (l<1) { + Bangle.buzz(20); + code = code.slice(0, -1); + } else update(); + } + function del() { + if (code.length) code = code.slice(0, -1); // delete last dot/dash + else if (cur) { // delete char at cursor + text = text.slice(0, cur-1)+text.slice(cur); + cur--; + } else Bangle.buzz(20); // (already) at start of text + spc = 0; + uc = false; + update(); + } + + function done() { + let c = char(code); + if (c!==null) { + if (uc) c = c.toUpperCase(); + uc = false; + text = text.slice(0, cur)+c+text.slice(cur); + cur++; + code = ""; + if (c===" ") spc++; + else spc = 0; + if (spc>=3) { + text = text.slice(0, cur-3)+"\n"+text.slice(cur); + cur -= 2; + uc = true; + spc = 0; + } + update(); + } else { + console.log(`No char for ${code}!`); + Bangle.buzz(20); + } + } + + const Layout = require("Layout"); + let layout = new Layout({ + type: "h", c: [ + { + type: "v", width: Bangle.appRect.w-8, bgCol: g.theme.bg, c: [ + {id: "dots", type: "txt", font: "6x8:2", label: "", fillx: 1, bgCol: g.theme.bg}, + {filly: 1, bgCol: g.theme.bg}, + { + type: "h", fillx: 1, c: [ + {id: "del", type: "txt", font: "6x8", label: " + ({type: "txt", font: "6x8", height: Math.floor(Bangle.appRect.h/3), r: 1, label: l}) + ) + } + ] + }); + g.reset().clear(); + update(); + + if (Bangle.btnWatches) Bangle.btnWatches.forEach(clearWatch); + Bangle.btnWatches = []; + + // BTN1: press for dot, long-press to toggle uppercase + let ucTimeout; + const UC_TIME = 500; + Bangle.btnWatches.push(setWatch(e => { + if (ucTimeout) clearTimeout(ucTimeout); + ucTimeout = null; + if (e.state) { + // pressed: start UpperCase toggle timer + ucTimeout = setTimeout(() => { + ucTimeout = null; + uc = !uc; + update(); + }, UC_TIME); + } else if (e.time-e.lastTime { + if (enterTimeout) clearTimeout(enterTimeout); + enterTimeout = null; + if (e.state) { + // pressed: start UpperCase toggle timer + enterTimeout = setTimeout(() => { + enterTimeout = null; + resolve(text); + }, ENTER_TIME); + } else if (e.time-e.lastTime { + add("-"); + }, BTN3, {repeat: true, edge: "falling"})); + + // Left-hand side: backspace + if (Bangle.touchHandler) Bangle.removeListener("touch", Bangle.touchHandler); + Bangle.touchHandler = side => { + if (side===1) del(); + }; + Bangle.on("touch", Bangle.touchHandler); + + // swipe: move cursor + if (Bangle.swipeHandler) Bangle.removeListener("swipe", Bangle.swipeHandler); + Bangle.swipeHandler = dir => { + cur = Math.max(0, Math.min(text.length, cur+dir)); + update(); + }; + Bangle.on("swipe", Bangle.swipeHandler); + }); +}; \ No newline at end of file diff --git a/apps/kbmorse/metadata.json b/apps/kbmorse/metadata.json new file mode 100644 index 000000000..f9c5354f1 --- /dev/null +++ b/apps/kbmorse/metadata.json @@ -0,0 +1,15 @@ +{ + "id": "kbmorse", + "name": "Morse keyboard", + "version": "0.01", + "description": "A library for text input as morse code", + "icon": "app.png", + "type": "textinput", + "tags": "keyboard", + "supports" : ["BANGLEJS"], + "screenshots": [{"url":"screenshot.png"}], + "readme": "README.md", + "storage": [ + {"name":"textinput","url":"lib.js"} + ] +} diff --git a/apps/kbmorse/screenshot.png b/apps/kbmorse/screenshot.png new file mode 100644 index 0000000000000000000000000000000000000000..9050a45cd1e7466294dea7d72ab65b602bf19b01 GIT binary patch literal 4172 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 Date: Mon, 9 May 2022 20:45:22 -0700 Subject: [PATCH 213/509] 12h clock format, option to disable autocycle --- apps/rebble/rebble.app.js | 25 +++++++++++++++++++++++-- apps/rebble/rebble.settings.js | 10 +++++++++- 2 files changed, 32 insertions(+), 3 deletions(-) diff --git a/apps/rebble/rebble.app.js b/apps/rebble/rebble.app.js index 7c7d57939..03680eca8 100644 --- a/apps/rebble/rebble.app.js +++ b/apps/rebble/rebble.app.js @@ -1,8 +1,10 @@ var SunCalc = require("https://raw.githubusercontent.com/mourner/suncalc/master/suncalc.js"); const SETTINGS_FILE = "rebble.json"; const LOCATION_FILE = "mylocation.json"; +const GLOBAL_SETTINGS = "setting.json"; let settings; let location; +let is12Hour; Graphics.prototype.setFontLECO1976Regular22 = function(scale) { // Actual height 22 (21 - 0) @@ -34,11 +36,25 @@ function loadLocation() { function loadSettings() { settings = require("Storage").readJSON(SETTINGS_FILE,1)|| {'bg': '#0f0', 'color': 'Green'}; + is12Hour = (require("Storage").readJSON(GLOBAL_SETTINGS, 1) || {})["12hour"] || false; +} + +function formatHours(hh) { + if (is12Hour) { + let hours = parseInt(hh,10); + if (hours == 0) { + hours = 12; + } else if (hours >= 12) { + if (hours>12) hours -= 12; + } + hh = (" "+hours).substr(-2); + } + return hh; } function extractTime(d){ var h = d.getHours(), m = d.getMinutes(); - return(("0"+h).substr(-2) + ":" + ("0"+m).substr(-2)); + return(formatHours(("0"+h).substr(-2)) + ":" + ("0"+m).substr(-2)); } function updateSunRiseSunSet(lat, lon){ @@ -81,6 +97,9 @@ function draw() { let da = date.toString().split(" "); let hh = da[4].substr(0,2); let mm = da[4].substr(3,2); + + hh = formatHours(hh); + //const t = 6; if (drawCount % 60 == 0) @@ -260,7 +279,9 @@ function queueDraw() { if (drawTimeout) clearTimeout(drawTimeout); drawTimeout = setTimeout(function() { drawTimeout = undefined; - nextSidebar(); + if (!settings.autoCycle) { + nextSidebar(); + } draw(); }, 60000 - (Date.now() % 60000)); } diff --git a/apps/rebble/rebble.settings.js b/apps/rebble/rebble.settings.js index db3bab878..b4d96644d 100644 --- a/apps/rebble/rebble.settings.js +++ b/apps/rebble/rebble.settings.js @@ -2,7 +2,7 @@ const SETTINGS_FILE = "rebble.json"; // initialize with default settings... - let s = {'bg': '#0f0', 'color': 'Green'} + let s = {'bg': '#0f0', 'color': 'Green', 'autoCycle': true} // ...and overwrite them with any saved values // This way saved values are preserved if a new version adds more settings @@ -33,6 +33,14 @@ s.bg = bg_code[v]; save(); }, + }, + 'Auto Cycle': { + value: "autoCycle" in s ? s.autoCycle : true, + format: () => (s.autoCycle ? 'Yes' : 'No'), + onchange: () => { + s.autoCycle = !s.autoCycle; + save(); + } } }); }) From 7822c4489d0ffadcbe8b0cad518cc89c76dafa96 Mon Sep 17 00:00:00 2001 From: Zach Dixon Date: Mon, 9 May 2022 22:30:20 -0700 Subject: [PATCH 214/509] Fix settings variable conflict and updated version --- apps/rebble/ChangeLog | 3 ++- apps/rebble/metadata.json | 2 +- apps/rebble/rebble.app.js | 2 +- apps/rebble/rebble.settings.js | 20 ++++++++++---------- 4 files changed, 14 insertions(+), 13 deletions(-) diff --git a/apps/rebble/ChangeLog b/apps/rebble/ChangeLog index b80dfef94..667dc0ad0 100644 --- a/apps/rebble/ChangeLog +++ b/apps/rebble/ChangeLog @@ -2,4 +2,5 @@ 0.02: Fix typo to Purple 0.03: Added dependancy on Pedometer Widget 0.04: Fixed icon and png to 48x48 pixels -0.05: added charging icon \ No newline at end of file +0.05: added charging icon +0.06: Add 12h support and autocycle control \ No newline at end of file diff --git a/apps/rebble/metadata.json b/apps/rebble/metadata.json index b26fb6a27..c44d1c279 100644 --- a/apps/rebble/metadata.json +++ b/apps/rebble/metadata.json @@ -2,7 +2,7 @@ "id": "rebble", "name": "Rebble Clock", "shortName": "Rebble", - "version": "0.05", + "version": "0.06", "description": "A Pebble style clock, with configurable background, three sidebars including steps, day, date, sunrise, sunset, long live the rebellion", "readme": "README.md", "icon": "rebble.png", diff --git a/apps/rebble/rebble.app.js b/apps/rebble/rebble.app.js index 03680eca8..251087ae1 100644 --- a/apps/rebble/rebble.app.js +++ b/apps/rebble/rebble.app.js @@ -35,7 +35,7 @@ function loadLocation() { } function loadSettings() { - settings = require("Storage").readJSON(SETTINGS_FILE,1)|| {'bg': '#0f0', 'color': 'Green'}; + settings = require("Storage").readJSON(SETTINGS_FILE,1)|| {'bg': '#0f0', 'color': 'Green', 'autoCycle': true}; is12Hour = (require("Storage").readJSON(GLOBAL_SETTINGS, 1) || {})["12hour"] || false; } diff --git a/apps/rebble/rebble.settings.js b/apps/rebble/rebble.settings.js index b4d96644d..91142d72d 100644 --- a/apps/rebble/rebble.settings.js +++ b/apps/rebble/rebble.settings.js @@ -2,19 +2,19 @@ const SETTINGS_FILE = "rebble.json"; // initialize with default settings... - let s = {'bg': '#0f0', 'color': 'Green', 'autoCycle': true} + let localSettings = {'bg': '#0f0', 'color': 'Green', 'autoCycle': true} // ...and overwrite them with any saved values // This way saved values are preserved if a new version adds more settings const storage = require('Storage') - let settings = storage.readJSON(SETTINGS_FILE, 1) || s; + let settings = storage.readJSON(SETTINGS_FILE, 1) || localSettings; const saved = settings || {} for (const key in saved) { - s[key] = saved[key] + localSettings[key] = saved[key] } function save() { - settings = s + settings = localSettings storage.write(SETTINGS_FILE, settings) } @@ -25,20 +25,20 @@ '': { 'title': 'Rebble Clock' }, '< Back': back, 'Colour': { - value: 0 | color_options.indexOf(s.color), + value: 0 | color_options.indexOf(localSettings.color), min: 0, max: 5, format: v => color_options[v], onchange: v => { - s.color = color_options[v]; - s.bg = bg_code[v]; + localSettings.color = color_options[v]; + localSettings.bg = bg_code[v]; save(); }, }, 'Auto Cycle': { - value: "autoCycle" in s ? s.autoCycle : true, - format: () => (s.autoCycle ? 'Yes' : 'No'), + value: "autoCycle" in localSettings ? localSettings.autoCycle : true, + format: () => (localSettings.autoCycle ? 'Yes' : 'No'), onchange: () => { - s.autoCycle = !s.autoCycle; + localSettings.autoCycle = !localSettings.autoCycle; save(); } } From 18967ef7ccdf02b77ddde822ae72bb79101bd896 Mon Sep 17 00:00:00 2001 From: sir-indy <53864146+sir-indy@users.noreply.github.com> Date: Tue, 10 May 2022 13:23:41 +0100 Subject: [PATCH 215/509] Update lib.js Updated with more feedback http://forum.espruino.com/comments/16515847/ Next to add the settings app, update README and screenshots and release. --- apps/kbmulti/lib.js | 81 +++++++++++++++++++++++++++------------------ 1 file changed, 49 insertions(+), 32 deletions(-) diff --git a/apps/kbmulti/lib.js b/apps/kbmulti/lib.js index 527c8a8cc..0b41cc9d0 100644 --- a/apps/kbmulti/lib.js +++ b/apps/kbmulti/lib.js @@ -5,13 +5,16 @@ exports.input = function(options) { var text = options.text; if ("string"!=typeof text) text=""; + var settings = require('Storage').readJSON("kbmulti.settings.json", true) || {}; + if (settings.firstLaunch==undefined) { settings.firstLaunch = true; } + if (settings.charTimeout==undefined) { settings.charTimeout = 500; } + var fontSize = "6x15"; var Layout = require("Layout"); var letters = { "1":".,!?1","2":"ABC2","3":"DEF3", "4":"GHI4","5":"JKL5","6":"MNO6", "7":"PQRS7","8":"TUV80","9":"WXYZ9", - //"0":"_@:/0" }; var helpMessage = 'swipe:\nRight: Space\nLeft:Backspace\nUp/Down: Caps lock\n'; @@ -71,7 +74,7 @@ exports.input = function(options) { charTimeout = setTimeout(function() { charTimeout = undefined; newCharacter(); - }, 500); + }, settings.charTimeout); } function onSwipe(dirLeftRight, dirUpDown) { @@ -85,44 +88,58 @@ exports.input = function(options) { } } -function onHelp() { - Bangle.removeListener("swipe", onSwipe); - E.showPrompt( - helpMessage, {title: "Help", buttons : {"Ok":true}} - ).then(function(v) { - Bangle.on('swipe', onSwipe); - layout.render(); - }); -} + function onHelp(resolve,reject) { + Bangle.removeListener("swipe", onSwipe); + E.showPrompt( + helpMessage, {title: "Help", buttons : {"Ok":true}} + ).then(function(v) { + Bangle.on('swipe', onSwipe); + generateLayout(resolve,reject); + layout.render(); + }); + } - return new Promise((resolve,reject) => { + function generateLayout(resolve,reject) { layout = new Layout( { - type:"v", c: [ - {type:"txt", font:"10%", label:text, id:"text", cb: l=>onHelp(), fillx:1}, - {type:"h", c: [ - {type:"btn", font:fontSize, label:letters[1], cb: l=>onKeyPad(1), id:'1', fillx:1, filly:1 }, - {type:"btn", font:fontSize, label:letters[2], cb: l=>onKeyPad(2), id:'2', fillx:1, filly:1 }, - {type:"btn", font:fontSize, label:letters[3], cb: l=>onKeyPad(3), id:'3', fillx:1, filly:1 }, - ]}, - {type:"h", filly:1, c: [ - {type:"btn", font:fontSize, label:letters[4], cb: l=>onKeyPad(4), id:'4', fillx:1, filly:1 }, - {type:"btn", font:fontSize, label:letters[5], cb: l=>onKeyPad(5), id:'5', fillx:1, filly:1 }, - {type:"btn", font:fontSize, label:letters[6], cb: l=>onKeyPad(6), id:'6', fillx:1, filly:1 }, - ]}, - {type:"h", filly:1, c: [ - {type:"btn", font:fontSize, label:letters[7], cb: l=>onKeyPad(7), id:'7', fillx:1, filly:1 }, - {type:"btn", font:fontSize, label:letters[8], cb: l=>onKeyPad(8), id:'8', fillx:1, filly:1 }, - {type:"btn", font:fontSize, label:letters[9], cb: l=>onKeyPad(9), id:'9', fillx:1, filly:1 }, - ]}, - ] + type:"v", c: [ + {type:"h", c: [ + {type:"txt", font:"12x20", label:text.slice(-12), id:"text", fillx:1}, + {type:"btn", font:'6x8', label:'?', cb: l=>onHelp(resolve,reject), filly:1 }, + ]}, + {type:"h", c: [ + {type:"btn", font:fontSize, label:letters[1], cb: l=>onKeyPad(1), id:'1', fillx:1, filly:1 }, + {type:"btn", font:fontSize, label:letters[2], cb: l=>onKeyPad(2), id:'2', fillx:1, filly:1 }, + {type:"btn", font:fontSize, label:letters[3], cb: l=>onKeyPad(3), id:'3', fillx:1, filly:1 }, + ]}, + {type:"h", filly:1, c: [ + {type:"btn", font:fontSize, label:letters[4], cb: l=>onKeyPad(4), id:'4', fillx:1, filly:1 }, + {type:"btn", font:fontSize, label:letters[5], cb: l=>onKeyPad(5), id:'5', fillx:1, filly:1 }, + {type:"btn", font:fontSize, label:letters[6], cb: l=>onKeyPad(6), id:'6', fillx:1, filly:1 }, + ]}, + {type:"h", filly:1, c: [ + {type:"btn", font:fontSize, label:letters[7], cb: l=>onKeyPad(7), id:'7', fillx:1, filly:1 }, + {type:"btn", font:fontSize, label:letters[8], cb: l=>onKeyPad(8), id:'8', fillx:1, filly:1 }, + {type:"btn", font:fontSize, label:letters[9], cb: l=>onKeyPad(9), id:'9', fillx:1, filly:1 }, + ]}, + ] },{back: ()=>{ Bangle.setUI(); Bangle.removeListener("swipe", onSwipe); g.clearRect(Bangle.appRect); resolve(text); }}); + } + + return new Promise((resolve,reject) => { g.clearRect(Bangle.appRect); - Bangle.on('swipe', onSwipe); - layout.render(); + if (settings.firstLaunch) { + onHelp(resolve,reject); + settings.firstLaunch = false; + require('Storage').writeJSON("kbmulti.settings.json", settings); + } else { + generateLayout(resolve,reject); + Bangle.on('swipe', onSwipe); + layout.render(); + } }); }; From 0b3de60a79a46697d5bd2e6eaa6808dc9191711a Mon Sep 17 00:00:00 2001 From: sir-indy <53864146+sir-indy@users.noreply.github.com> Date: Tue, 10 May 2022 20:20:43 +0100 Subject: [PATCH 216/509] Update ready for pull request --- apps/kbmulti/README.md | 7 +++++++ apps/kbmulti/lib.js | 4 ++-- apps/kbmulti/metadata.json | 4 +++- apps/kbmulti/screenshot_1.png | Bin 4592 -> 23790 bytes apps/kbmulti/screenshot_2.png | Bin 4507 -> 23357 bytes apps/kbmulti/settings.js | 31 +++++++++++++++++++++++++++++++ 6 files changed, 43 insertions(+), 3 deletions(-) create mode 100644 apps/kbmulti/settings.js diff --git a/apps/kbmulti/README.md b/apps/kbmulti/README.md index 40aaca9c5..d40b2dd07 100644 --- a/apps/kbmulti/README.md +++ b/apps/kbmulti/README.md @@ -2,8 +2,15 @@ A library that provides the ability to input text in a style familiar to anyone who had a mobile phone before they went all touchscreen. +Swipe right for Space, left for Backspace, and up/down for Caps lock. Tap the '?' button in the app if you need a reminder! + +At time of writing, only the [Noteify app](http://microco.sm/out/Ffe9i) uses a keyboard. + Uses the multitap keypad logic originally from here: http://www.espruino.com/Morse+Code+Texting ![](screenshot_1.png) ![](screenshot_2.png) +Written by: [Sir Indy](https://github.com/sir-indy) and [Thyttan](https://github.com/thyttan) + +For support and discussion please post in the [Bangle JS Forum](http://forum.espruino.com/microcosms/1424/) \ No newline at end of file diff --git a/apps/kbmulti/lib.js b/apps/kbmulti/lib.js index 0b41cc9d0..79c2d861a 100644 --- a/apps/kbmulti/lib.js +++ b/apps/kbmulti/lib.js @@ -6,8 +6,8 @@ exports.input = function(options) { if ("string"!=typeof text) text=""; var settings = require('Storage').readJSON("kbmulti.settings.json", true) || {}; - if (settings.firstLaunch==undefined) { settings.firstLaunch = true; } - if (settings.charTimeout==undefined) { settings.charTimeout = 500; } + if (settings.firstLaunch===undefined) { settings.firstLaunch = true; } + if (settings.charTimeout===undefined) { settings.charTimeout = 500; } var fontSize = "6x15"; var Layout = require("Layout"); diff --git a/apps/kbmulti/metadata.json b/apps/kbmulti/metadata.json index 4d3631b70..1257b6b64 100644 --- a/apps/kbmulti/metadata.json +++ b/apps/kbmulti/metadata.json @@ -9,6 +9,8 @@ "screenshots": [{"url":"screenshot_1.png"},{"url":"screenshot_2.png"}], "readme": "README.md", "storage": [ - {"name":"textinput","url":"lib.js"} + {"name":"textinput","url":"lib.js"}, + {"name":"kbmulti.settings.js","url":"settings.js"}, + {"name":"kbmulti.settings.json","url":"kbmulti.settings.json"} ] } diff --git a/apps/kbmulti/screenshot_1.png b/apps/kbmulti/screenshot_1.png index 8c3d716ea4b5f8c18e261d1c0155f7a5bdeef599..37e6e5da2fc58e582338c185c6ebd904d31d99f4 100644 GIT binary patch literal 23790 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%0DWlyA#ytcw|!9sCfIB!7J7uZ$l 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 literal 4507 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 diff --git a/apps/kbmulti/settings.js b/apps/kbmulti/settings.js new file mode 100644 index 000000000..d3148eca7 --- /dev/null +++ b/apps/kbmulti/settings.js @@ -0,0 +1,31 @@ +(function(back) { + function settings() { + var settings = require('Storage').readJSON("kbmulti.settings.json", true) || {}; + if (settings.firstLaunch===undefined) { settings.firstLaunch = true; } + if (settings.charTimeout===undefined) { settings.charTimeout = 500; } + return settings; + } + + function updateSetting(setting, value) { + var settings = require('Storage').readJSON("kbmulti.settings.json", true) || {}; + settings[setting] = value; + require('Storage').writeJSON("kbmulti.settings.json", settings); + } + + var mainmenu = { + "" : { "title" : /*LANG*/"Multitap keyboard" }, + "< Back" : back, + /*LANG*/'Character selection timeout [ms]': { + value: settings().charTimeout, + min: 200, max: 1500, step : 50, + format: v => v, + onchange: v => updateSetting("charTimeout", v), + }, + /*LANG*/'Show help on first launch': { + value: !!settings().firstLaunch, + format: v => v?"Yes":"No", + onchange: v => updateSetting("firstLaunch", v) + } + }; + E.showMenu(mainmenu); + }) \ No newline at end of file From 3f24c798e9370647c57851bff36778acf3aae91f Mon Sep 17 00:00:00 2001 From: sir-indy <53864146+sir-indy@users.noreply.github.com> Date: Tue, 10 May 2022 20:23:55 +0100 Subject: [PATCH 217/509] Correct metadata.json --- apps/kbmulti/metadata.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/kbmulti/metadata.json b/apps/kbmulti/metadata.json index 1257b6b64..ed2968017 100644 --- a/apps/kbmulti/metadata.json +++ b/apps/kbmulti/metadata.json @@ -11,6 +11,6 @@ "storage": [ {"name":"textinput","url":"lib.js"}, {"name":"kbmulti.settings.js","url":"settings.js"}, - {"name":"kbmulti.settings.json","url":"kbmulti.settings.json"} + {"name":"kbmulti.settings.json"} ] } From 00ad4c4eed301e9d5979c32a5d145c5c23289090 Mon Sep 17 00:00:00 2001 From: sir-indy <53864146+sir-indy@users.noreply.github.com> Date: Tue, 10 May 2022 20:28:28 +0100 Subject: [PATCH 218/509] Actually correct metadata.json this time --- apps/kbmulti/metadata.json | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/apps/kbmulti/metadata.json b/apps/kbmulti/metadata.json index ed2968017..6c813e321 100644 --- a/apps/kbmulti/metadata.json +++ b/apps/kbmulti/metadata.json @@ -1,6 +1,6 @@ { "id": "kbmulti", "name": "Multitap keyboard", - "version":"0.04", + "version":"0.01", "description": "A library for text input via multitap/T9 style keypad", "icon": "app.png", "type":"textinput", @@ -10,7 +10,9 @@ "readme": "README.md", "storage": [ {"name":"textinput","url":"lib.js"}, - {"name":"kbmulti.settings.js","url":"settings.js"}, + {"name":"kbmulti.settings.js","url":"settings.js"} + ], + "data": [ {"name":"kbmulti.settings.json"} ] } From 4e8136dc4a529784835ddaebb0c04ed2ad4ccde2 Mon Sep 17 00:00:00 2001 From: ps-igel <60899838+ps-igel@users.noreply.github.com> Date: Tue, 10 May 2022 22:53:08 +0200 Subject: [PATCH 219/509] fix clockmode setting --- apps/game1024/settings.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/apps/game1024/settings.js b/apps/game1024/settings.js index c8e393663..24a972600 100644 --- a/apps/game1024/settings.js +++ b/apps/game1024/settings.js @@ -32,10 +32,10 @@ } }, "Exit press:": { - value: !settings.debugMode, // ! converts undefined to true + value: !settings.clockMode, // ! converts undefined to true format: v => v?"short":"long", onchange: v => { - settings.debugMode = v; + settings.clockMode = v; writeSettings(); }, }, @@ -67,4 +67,4 @@ } // Show the menu E.showMenu(settingsMenu); - }) \ No newline at end of file + }) From a9d705767acb84935e777d313fc988be0ea89780 Mon Sep 17 00:00:00 2001 From: ps-igel <60899838+ps-igel@users.noreply.github.com> Date: Tue, 10 May 2022 22:54:02 +0200 Subject: [PATCH 220/509] fix clockmode setting --- apps/game1024/ChangeLog | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/apps/game1024/ChangeLog b/apps/game1024/ChangeLog index 29838413e..b404e04db 100644 --- a/apps/game1024/ChangeLog +++ b/apps/game1024/ChangeLog @@ -6,4 +6,5 @@ 0.06: Fixed issue 1609 added a message popup state handler to control unwanted screen redraw 0.07: Optimized the mover algorithm for efficiency (work in progress) 0.08: Bug fix at end of the game with victorious splash and glorious orchestra -0.09: Added settings menu, removed symbol selection button (*), added highscore reset \ No newline at end of file +0.09: Added settings menu, removed symbol selection button (*), added highscore reset +0.10 fixed clockmode in settings From 868b5a7d0013ae02a43bc5f3c81780474495962a Mon Sep 17 00:00:00 2001 From: ps-igel <60899838+ps-igel@users.noreply.github.com> Date: Tue, 10 May 2022 22:55:44 +0200 Subject: [PATCH 221/509] fix clockmode setting --- apps/game1024/metadata.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/game1024/metadata.json b/apps/game1024/metadata.json index e2c4bdb3e..728b5dc0e 100644 --- a/apps/game1024/metadata.json +++ b/apps/game1024/metadata.json @@ -1,7 +1,7 @@ { "id": "game1024", "name": "1024 Game", "shortName" : "1024 Game", - "version": "0.09", + "version": "0.10", "icon": "game1024.png", "screenshots": [ {"url":"screenshot.png" } ], "readme":"README.md", From 45eeaff0d928432b2f2a8589984209995f0468c8 Mon Sep 17 00:00:00 2001 From: Gordon Williams Date: Wed, 11 May 2022 08:27:16 +0100 Subject: [PATCH 222/509] tweak --- apps/game1024/ChangeLog | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/game1024/ChangeLog b/apps/game1024/ChangeLog index b404e04db..800fa6b9d 100644 --- a/apps/game1024/ChangeLog +++ b/apps/game1024/ChangeLog @@ -7,4 +7,4 @@ 0.07: Optimized the mover algorithm for efficiency (work in progress) 0.08: Bug fix at end of the game with victorious splash and glorious orchestra 0.09: Added settings menu, removed symbol selection button (*), added highscore reset -0.10 fixed clockmode in settings +0.10: fixed clockmode in settings From f0b9425f5d8c05025d2d27b9247ef24bab47cbb2 Mon Sep 17 00:00:00 2001 From: Kane Date: Wed, 11 May 2022 11:09:34 +0200 Subject: [PATCH 223/509] calibration: app v1.0 added --- apps/calibration/README.md | 11 ++++ apps/calibration/app-icon.js | 1 + apps/calibration/app.js | 85 +++++++++++++++++++++++++++++++ apps/calibration/boot.js | 14 +++++ apps/calibration/calibration.png | Bin 0 -> 451 bytes apps/calibration/metadata.json | 17 +++++++ apps/calibration/settings.js | 23 +++++++++ 7 files changed, 151 insertions(+) create mode 100644 apps/calibration/README.md create mode 100644 apps/calibration/app-icon.js create mode 100644 apps/calibration/app.js create mode 100644 apps/calibration/boot.js create mode 100644 apps/calibration/calibration.png create mode 100644 apps/calibration/metadata.json create mode 100644 apps/calibration/settings.js diff --git a/apps/calibration/README.md b/apps/calibration/README.md new file mode 100644 index 000000000..37f637d21 --- /dev/null +++ b/apps/calibration/README.md @@ -0,0 +1,11 @@ +# Banglejs - Touchscreen calibration +A simple calibration app for the touchscreen + +## Usage + +Once lauched touch the cross that appear on the screen to make +another spawn elsewhere. + +each new touch on the screen will help to calibrate the offset +of your finger on the screen. After five or more input, press +the button to save the calibration and close the application. \ No newline at end of file diff --git a/apps/calibration/app-icon.js b/apps/calibration/app-icon.js new file mode 100644 index 000000000..af66c3f68 --- /dev/null +++ b/apps/calibration/app-icon.js @@ -0,0 +1 @@ +require("heatshrink").decompress(atob("mEwwkB/4AJ+EPBhQXg+BBDCyJaGGR5zIDBoQEL4QYOLYR3GBIouJR5AYBGBILBU5QMGFwgiFX4wwIEI4XGGBAgHd44+HD44XHNw4XWM5IIHCIoXWV5IXICQgXvLxAAKCYYXh5nMC6n8C4PPC5MAAA8PC4ZxBACAXOI653hU5zvJABASEC5PwHI4XcMBIXICIoXXJBAXHCAwXXJBAXHB5AfGC4ygJEAwXGQ5BoIQxoiDBYgXECwIuIBgb5ECIQJFGBQmCC4QHEDBwAFCxoYICx5ZELZoZJFiIXpA=")) \ No newline at end of file diff --git a/apps/calibration/app.js b/apps/calibration/app.js new file mode 100644 index 000000000..d3823de63 --- /dev/null +++ b/apps/calibration/app.js @@ -0,0 +1,85 @@ +class BanglejsApp { + constructor() { + this.x = 0; + this.y = 0; + this.settings = { + xoffset: 0, + yoffset: 0, + }; + } + + load_settings() { + let settings = require('Storage').readJSON('calibration.json', true) || {active: false}; + + // do nothing if the calibration is deactivated + if (settings.active === true) { + // cancel the calibration offset + Bangle.on('touch', function(button, xy) { + xy.x += settings.xoffset; + xy.y += settings.yoffset; + }); + } + if (!settings.xoffset) settings.xoffset = 0; + if (!settings.yoffset) settings.yoffset = 0; + + console.log('loaded settings:'); + console.log(settings); + + return settings; + } + + save_settings() { + this.settings.active = true; + this.settings.reload = false; + require('Storage').writeJSON('calibration.json', this.settings); + + console.log('saved settings:'); + console.log(this.settings); + } + + explain() { + /* + * TODO: + * Present how to use the application + * + */ + } + + drawTarget() { + this.x = 16 + Math.floor(Math.random() * (g.getWidth() - 32)); + this.y = 40 + Math.floor(Math.random() * (g.getHeight() - 80)); + + g.clearRect(0, 24, g.getWidth(), g.getHeight() - 24); + g.drawLine(this.x, this.y - 5, this.x, this.y + 5); + g.drawLine(this.x - 5, this.y, this.x + 5, this.y); + g.setFont('Vector', 10); + g.drawString('current offset: ' + this.settings.xoffset + ', ' + this.settings.yoffset, 0, 24); + } + + setOffset(xy) { + this.settings.xoffset = Math.round((this.settings.xoffset + (this.x - Math.floor((this.x + xy.x)/2)))/2); + this.settings.yoffset = Math.round((this.settings.yoffset + (this.y - Math.floor((this.y + xy.y)/2)))/2); + } +} + + +E.srand(Date.now()); +Bangle.loadWidgets(); +Bangle.drawWidgets(); + +calibration = new BanglejsApp(); +calibration.load_settings(); + +let modes = { + mode : 'custom', + btn : function(n) { + calibration.save_settings(this.settings); + load(); + }, + touch : function(btn, xy) { + calibration.setOffset(xy); + calibration.drawTarget(); + }, +}; +Bangle.setUI(modes); +calibration.drawTarget(); diff --git a/apps/calibration/boot.js b/apps/calibration/boot.js new file mode 100644 index 000000000..237fb2e0d --- /dev/null +++ b/apps/calibration/boot.js @@ -0,0 +1,14 @@ +let cal_settings = require('Storage').readJSON("calibration.json", true) || {active: false}; +Bangle.on('touch', function(button, xy) { + // do nothing if the calibration is deactivated + if (cal_settings.active === false) return; + + // reload the calibration offset at each touch event /!\ bad for the flash memory + if (cal_settings.reload === true) { + cal_settings = require('Storage').readJSON("calibration.json", true); + } + + // apply the calibration offset + xy.x += cal_settings.xoffset; + xy.y += cal_settings.yoffset; +}); diff --git a/apps/calibration/calibration.png b/apps/calibration/calibration.png new file mode 100644 index 0000000000000000000000000000000000000000..3fb44beee035702bc84aa5d10fd313587db3b770 GIT binary patch literal 451 zcmV;!0X+VRP)Px$eMv+?RA_t-b3tR_+0z}XE5OEPe&b>}+WSH4) z&)kKyGZE>oVPwNwnkEAJ;6-;5ZPP=dNg%TYYCIuPB``90;Ss6L^TQRl^p#YPTlGlX>y-RKdp594EpjO_g zhnShuld*jl`XaDm8MV6OSqc!XrGn+%be;l4Yp7tI42lZOB;grrswFgogm)%uo`I1h zo(z back(), + 'Active': { + value: !!settings.active, + format: v => v? "On":"Off", + onchange: v => { + settings.active = v; + writeSettings(); + } + }, + }); +}) \ No newline at end of file From 24634330a50a64c07e9e1f7f6dafb70e9883bb44 Mon Sep 17 00:00:00 2001 From: thyttan <97237430+thyttan@users.noreply.github.com> Date: Wed, 11 May 2022 17:56:36 +0200 Subject: [PATCH 224/509] Update ChangeLog --- apps/kbmulti/ChangeLog | 1 + 1 file changed, 1 insertion(+) diff --git a/apps/kbmulti/ChangeLog b/apps/kbmulti/ChangeLog index 04b2430bb..894a609ec 100644 --- a/apps/kbmulti/ChangeLog +++ b/apps/kbmulti/ChangeLog @@ -1 +1,2 @@ 0.01: New keyboard +0.02: Introduce setting "Show help button". Remove the firstLaunch setting from settings.js. From da2aaaf16dd963d23d8be211bb8b55931f5c05b4 Mon Sep 17 00:00:00 2001 From: thyttan <97237430+thyttan@users.noreply.github.com> Date: Wed, 11 May 2022 18:21:20 +0200 Subject: [PATCH 225/509] Update settings.js --- apps/kbmulti/settings.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/apps/kbmulti/settings.js b/apps/kbmulti/settings.js index d3148eca7..c698aca8a 100644 --- a/apps/kbmulti/settings.js +++ b/apps/kbmulti/settings.js @@ -21,11 +21,11 @@ format: v => v, onchange: v => updateSetting("charTimeout", v), }, - /*LANG*/'Show help on first launch': { - value: !!settings().firstLaunch, + /*LANG*/'Show help button': { + value: !!settings().showHelpBtn, format: v => v?"Yes":"No", - onchange: v => updateSetting("firstLaunch", v) + onchange: v => updateSetting("showHelpBtn", v) } }; E.showMenu(mainmenu); - }) \ No newline at end of file + }) From 824ab9859ec524be2ebc4c7a7fc1021199938b54 Mon Sep 17 00:00:00 2001 From: thyttan <97237430+thyttan@users.noreply.github.com> Date: Wed, 11 May 2022 18:21:47 +0200 Subject: [PATCH 226/509] Update metadata.json --- apps/kbmulti/metadata.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/kbmulti/metadata.json b/apps/kbmulti/metadata.json index 6c813e321..1efdb8847 100644 --- a/apps/kbmulti/metadata.json +++ b/apps/kbmulti/metadata.json @@ -1,6 +1,6 @@ { "id": "kbmulti", "name": "Multitap keyboard", - "version":"0.01", + "version":"0.02", "description": "A library for text input via multitap/T9 style keypad", "icon": "app.png", "type":"textinput", From 87756ece9ef8fec132409303756d0ab3e0d371c2 Mon Sep 17 00:00:00 2001 From: thyttan <97237430+thyttan@users.noreply.github.com> Date: Wed, 11 May 2022 18:23:31 +0200 Subject: [PATCH 227/509] Update lib.js --- apps/kbmulti/lib.js | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/apps/kbmulti/lib.js b/apps/kbmulti/lib.js index 79c2d861a..ff987c2cc 100644 --- a/apps/kbmulti/lib.js +++ b/apps/kbmulti/lib.js @@ -6,8 +6,9 @@ exports.input = function(options) { if ("string"!=typeof text) text=""; var settings = require('Storage').readJSON("kbmulti.settings.json", true) || {}; - if (settings.firstLaunch===undefined) { settings.firstLaunch = true; } + //if (settings.firstLaunch===undefined) { settings.firstLaunch = true; } if (settings.charTimeout===undefined) { settings.charTimeout = 500; } + if (settings.showHelpBtn===undefined) { settings.showHelpBtn = true; } var fontSize = "6x15"; var Layout = require("Layout"); @@ -104,7 +105,7 @@ exports.input = function(options) { type:"v", c: [ {type:"h", c: [ {type:"txt", font:"12x20", label:text.slice(-12), id:"text", fillx:1}, - {type:"btn", font:'6x8', label:'?', cb: l=>onHelp(resolve,reject), filly:1 }, + (settings.showHelpBtn ? {type:"btn", font:'6x8', label:'?', cb: l=>onHelp(resolve,reject), filly:1 } : {}), ]}, {type:"h", c: [ {type:"btn", font:fontSize, label:letters[1], cb: l=>onKeyPad(1), id:'1', fillx:1, filly:1 }, @@ -132,7 +133,7 @@ exports.input = function(options) { return new Promise((resolve,reject) => { g.clearRect(Bangle.appRect); - if (settings.firstLaunch) { + if (!settings.firstLaunch) { onHelp(resolve,reject); settings.firstLaunch = false; require('Storage').writeJSON("kbmulti.settings.json", settings); From d6db4e6be355486fbee91a6ae0b83e81b285e6df Mon Sep 17 00:00:00 2001 From: thyttan <97237430+thyttan@users.noreply.github.com> Date: Wed, 11 May 2022 19:49:40 +0200 Subject: [PATCH 228/509] Update lib.js --- apps/kbmulti/lib.js | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/apps/kbmulti/lib.js b/apps/kbmulti/lib.js index ff987c2cc..052fd86a1 100644 --- a/apps/kbmulti/lib.js +++ b/apps/kbmulti/lib.js @@ -1,14 +1,14 @@ //Multitap logic originally from here: http://www.espruino.com/Morse+Code+Texting exports.input = function(options) { - options = options||{}; + var options = options||{}; var text = options.text; if ("string"!=typeof text) text=""; var settings = require('Storage').readJSON("kbmulti.settings.json", true) || {}; //if (settings.firstLaunch===undefined) { settings.firstLaunch = true; } if (settings.charTimeout===undefined) { settings.charTimeout = 500; } - if (settings.showHelpBtn===undefined) { settings.showHelpBtn = true; } + if (settings.showHelpBtn===undefined) { settings.showHelpBtn = false; } var fontSize = "6x15"; var Layout = require("Layout"); @@ -25,9 +25,9 @@ exports.input = function(options) { var caps = true; var layout; - function displayText() { + function displayText(charTimeout) { layout.clear(layout.text); - layout.text.label = text.slice(-12); + layout.text.label = text.slice(settings.showHelpBtn ? -12 : -13) + (charTimeout ? " " : "_"); layout.render(layout.text); } @@ -70,12 +70,12 @@ exports.input = function(options) { } var newLetter = letters[charCurrent][charIndex]; text += (caps ? newLetter.toUpperCase() : newLetter.toLowerCase()); - displayText(); // set a timeout charTimeout = setTimeout(function() { charTimeout = undefined; newCharacter(); }, settings.charTimeout); + displayText(charTimeout); } function onSwipe(dirLeftRight, dirUpDown) { @@ -139,6 +139,7 @@ exports.input = function(options) { require('Storage').writeJSON("kbmulti.settings.json", settings); } else { generateLayout(resolve,reject); + displayText(false); Bangle.on('swipe', onSwipe); layout.render(); } From b34a3415b9b9e1a85a1fb25d5a156d80310e00e1 Mon Sep 17 00:00:00 2001 From: thyttan <97237430+thyttan@users.noreply.github.com> Date: Wed, 11 May 2022 19:54:37 +0200 Subject: [PATCH 229/509] Update ChangeLog --- apps/kbmulti/ChangeLog | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/kbmulti/ChangeLog b/apps/kbmulti/ChangeLog index 894a609ec..191517b30 100644 --- a/apps/kbmulti/ChangeLog +++ b/apps/kbmulti/ChangeLog @@ -1,2 +1,2 @@ 0.01: New keyboard -0.02: Introduce setting "Show help button". Remove the firstLaunch setting from settings.js. +0.02: Introduce setting "Show help button". Make setting firstLaunch invisible by removing corresponding code from settings.js. Add marker that shows when character selection timeout has run out. From 7b1bcd8b76dbc1da8b8db937546d46a021bdd0ca Mon Sep 17 00:00:00 2001 From: thyttan <97237430+thyttan@users.noreply.github.com> Date: Wed, 11 May 2022 20:01:49 +0200 Subject: [PATCH 230/509] Update lib.js --- apps/kbmulti/lib.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/apps/kbmulti/lib.js b/apps/kbmulti/lib.js index 052fd86a1..d578a81b0 100644 --- a/apps/kbmulti/lib.js +++ b/apps/kbmulti/lib.js @@ -6,7 +6,7 @@ exports.input = function(options) { if ("string"!=typeof text) text=""; var settings = require('Storage').readJSON("kbmulti.settings.json", true) || {}; - //if (settings.firstLaunch===undefined) { settings.firstLaunch = true; } + if (settings.firstLaunch===undefined) { settings.firstLaunch = true; } if (settings.charTimeout===undefined) { settings.charTimeout = 500; } if (settings.showHelpBtn===undefined) { settings.showHelpBtn = false; } @@ -133,13 +133,13 @@ exports.input = function(options) { return new Promise((resolve,reject) => { g.clearRect(Bangle.appRect); - if (!settings.firstLaunch) { + if (settings.firstLaunch==true) { onHelp(resolve,reject); settings.firstLaunch = false; require('Storage').writeJSON("kbmulti.settings.json", settings); } else { generateLayout(resolve,reject); - displayText(false); + displayText(true); Bangle.on('swipe', onSwipe); layout.render(); } From 8eefdaa706eb560a4cfd9a12d97080ec45a4fbc6 Mon Sep 17 00:00:00 2001 From: thyttan <97237430+thyttan@users.noreply.github.com> Date: Wed, 11 May 2022 20:11:08 +0200 Subject: [PATCH 231/509] Update lib.js --- apps/kbmulti/lib.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/kbmulti/lib.js b/apps/kbmulti/lib.js index d578a81b0..8dd92d6f3 100644 --- a/apps/kbmulti/lib.js +++ b/apps/kbmulti/lib.js @@ -1,7 +1,7 @@ //Multitap logic originally from here: http://www.espruino.com/Morse+Code+Texting exports.input = function(options) { - var options = options||{}; + options = options||{}; var text = options.text; if ("string"!=typeof text) text=""; From ad63cafec6dfb12a69dddb6397b93ef77a0bfff3 Mon Sep 17 00:00:00 2001 From: thyttan <97237430+thyttan@users.noreply.github.com> Date: Wed, 11 May 2022 20:14:37 +0200 Subject: [PATCH 232/509] Update lib.js --- apps/kbmulti/lib.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/kbmulti/lib.js b/apps/kbmulti/lib.js index 8dd92d6f3..54d600fcb 100644 --- a/apps/kbmulti/lib.js +++ b/apps/kbmulti/lib.js @@ -6,7 +6,7 @@ exports.input = function(options) { if ("string"!=typeof text) text=""; var settings = require('Storage').readJSON("kbmulti.settings.json", true) || {}; - if (settings.firstLaunch===undefined) { settings.firstLaunch = true; } + //if (settings.firstLaunch===undefined) { settings.firstLaunch = true; } if (settings.charTimeout===undefined) { settings.charTimeout = 500; } if (settings.showHelpBtn===undefined) { settings.showHelpBtn = false; } @@ -133,7 +133,7 @@ exports.input = function(options) { return new Promise((resolve,reject) => { g.clearRect(Bangle.appRect); - if (settings.firstLaunch==true) { + if (!settings.firstLaunch) { onHelp(resolve,reject); settings.firstLaunch = false; require('Storage').writeJSON("kbmulti.settings.json", settings); From 8dec7e503be0a22ef2c2f66e99e86b1ec9e5ce97 Mon Sep 17 00:00:00 2001 From: thyttan <97237430+thyttan@users.noreply.github.com> Date: Wed, 11 May 2022 20:17:15 +0200 Subject: [PATCH 233/509] Update lib.js --- apps/kbmulti/lib.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/kbmulti/lib.js b/apps/kbmulti/lib.js index 54d600fcb..b0d6ae3eb 100644 --- a/apps/kbmulti/lib.js +++ b/apps/kbmulti/lib.js @@ -8,7 +8,7 @@ exports.input = function(options) { var settings = require('Storage').readJSON("kbmulti.settings.json", true) || {}; //if (settings.firstLaunch===undefined) { settings.firstLaunch = true; } if (settings.charTimeout===undefined) { settings.charTimeout = 500; } - if (settings.showHelpBtn===undefined) { settings.showHelpBtn = false; } + if (settings.showHelpBtn===undefined) { settings.showHelpBtn = true; } var fontSize = "6x15"; var Layout = require("Layout"); From c8b1d166973aa47c3c1f46e497181261a4b511c6 Mon Sep 17 00:00:00 2001 From: thyttan <97237430+thyttan@users.noreply.github.com> Date: Wed, 11 May 2022 20:18:09 +0200 Subject: [PATCH 234/509] Update lib.js --- apps/kbmulti/lib.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/kbmulti/lib.js b/apps/kbmulti/lib.js index b0d6ae3eb..da3894f0b 100644 --- a/apps/kbmulti/lib.js +++ b/apps/kbmulti/lib.js @@ -27,7 +27,7 @@ exports.input = function(options) { function displayText(charTimeout) { layout.clear(layout.text); - layout.text.label = text.slice(settings.showHelpBtn ? -12 : -13) + (charTimeout ? " " : "_"); + layout.text.label = text.slice(settings.showHelpBtn ? -11 : -13) + (charTimeout ? " " : "_"); layout.render(layout.text); } From efa1254673a84231f5a997dfc1a74609777aaed8 Mon Sep 17 00:00:00 2001 From: thyttan <97237430+thyttan@users.noreply.github.com> Date: Wed, 11 May 2022 20:24:30 +0200 Subject: [PATCH 235/509] Update lib.js --- apps/kbmulti/lib.js | 1 + 1 file changed, 1 insertion(+) diff --git a/apps/kbmulti/lib.js b/apps/kbmulti/lib.js index da3894f0b..f1f706216 100644 --- a/apps/kbmulti/lib.js +++ b/apps/kbmulti/lib.js @@ -124,6 +124,7 @@ exports.input = function(options) { ]}, ] },{back: ()=>{ + charTimeout = undefined; Bangle.setUI(); Bangle.removeListener("swipe", onSwipe); g.clearRect(Bangle.appRect); From 7c747889ab718731b4c2bc7edd14e56df9bfbab4 Mon Sep 17 00:00:00 2001 From: thyttan <97237430+thyttan@users.noreply.github.com> Date: Wed, 11 May 2022 20:38:41 +0200 Subject: [PATCH 236/509] Update lib.js --- apps/kbmulti/lib.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/apps/kbmulti/lib.js b/apps/kbmulti/lib.js index f1f706216..0d5b73d5f 100644 --- a/apps/kbmulti/lib.js +++ b/apps/kbmulti/lib.js @@ -6,7 +6,7 @@ exports.input = function(options) { if ("string"!=typeof text) text=""; var settings = require('Storage').readJSON("kbmulti.settings.json", true) || {}; - //if (settings.firstLaunch===undefined) { settings.firstLaunch = true; } + //if (settings.firstLaunch===undefined) { settings.firstLaunch = true; } // Unnecessary if doing if(!settings.firstLaunch) down inside the promise. But maybe it's good to keep it as in v0.01 for readability? if (settings.charTimeout===undefined) { settings.charTimeout = 500; } if (settings.showHelpBtn===undefined) { settings.showHelpBtn = true; } @@ -27,7 +27,7 @@ exports.input = function(options) { function displayText(charTimeout) { layout.clear(layout.text); - layout.text.label = text.slice(settings.showHelpBtn ? -11 : -13) + (charTimeout ? " " : "_"); + layout.text.label = text.slice(settings.showHelpBtn ? -11 : -13) + (charTimeout ? " " : "_"); // Implemented marker here. layout.render(layout.text); } @@ -124,7 +124,7 @@ exports.input = function(options) { ]}, ] },{back: ()=>{ - charTimeout = undefined; + // charTimeout = undefined; // Tried this to see if it would stop the text from being drawn after closing keyboard when doing it too soon after pressing a key. It didn't help. This problem goes back to how I've implemented the marker above. Bangle.setUI(); Bangle.removeListener("swipe", onSwipe); g.clearRect(Bangle.appRect); From c4647bfc68c45ef9e3627785c2673cd3041cf320 Mon Sep 17 00:00:00 2001 From: thyttan <97237430+thyttan@users.noreply.github.com> Date: Wed, 11 May 2022 20:43:01 +0200 Subject: [PATCH 237/509] Update settings.js --- apps/kbmulti/settings.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/kbmulti/settings.js b/apps/kbmulti/settings.js index c698aca8a..4fad8a428 100644 --- a/apps/kbmulti/settings.js +++ b/apps/kbmulti/settings.js @@ -1,7 +1,7 @@ (function(back) { function settings() { var settings = require('Storage').readJSON("kbmulti.settings.json", true) || {}; - if (settings.firstLaunch===undefined) { settings.firstLaunch = true; } + if (settings.showHelpBtn===undefined) { settings.firstLaunch = true; } if (settings.charTimeout===undefined) { settings.charTimeout = 500; } return settings; } From cb6d46d9c8aa787296e21c07c1055ad322ab498d Mon Sep 17 00:00:00 2001 From: thyttan <97237430+thyttan@users.noreply.github.com> Date: Wed, 11 May 2022 20:50:02 +0200 Subject: [PATCH 238/509] Update lib.js --- apps/kbmulti/lib.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/kbmulti/lib.js b/apps/kbmulti/lib.js index 0d5b73d5f..2d38539e8 100644 --- a/apps/kbmulti/lib.js +++ b/apps/kbmulti/lib.js @@ -6,7 +6,7 @@ exports.input = function(options) { if ("string"!=typeof text) text=""; var settings = require('Storage').readJSON("kbmulti.settings.json", true) || {}; - //if (settings.firstLaunch===undefined) { settings.firstLaunch = true; } // Unnecessary if doing if(!settings.firstLaunch) down inside the promise. But maybe it's good to keep it as in v0.01 for readability? + if (settings.firstLaunch===undefined) { settings.firstLaunch = true; } if (settings.charTimeout===undefined) { settings.charTimeout = 500; } if (settings.showHelpBtn===undefined) { settings.showHelpBtn = true; } @@ -134,7 +134,7 @@ exports.input = function(options) { return new Promise((resolve,reject) => { g.clearRect(Bangle.appRect); - if (!settings.firstLaunch) { + if (settings.firstLaunch) { onHelp(resolve,reject); settings.firstLaunch = false; require('Storage').writeJSON("kbmulti.settings.json", settings); From 04679ba3243b2686be809a7d9af1525cbbb42636 Mon Sep 17 00:00:00 2001 From: thyttan <97237430+thyttan@users.noreply.github.com> Date: Wed, 11 May 2022 20:55:11 +0200 Subject: [PATCH 239/509] Update settings.js --- apps/kbmulti/settings.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/kbmulti/settings.js b/apps/kbmulti/settings.js index 4fad8a428..ab0e26806 100644 --- a/apps/kbmulti/settings.js +++ b/apps/kbmulti/settings.js @@ -1,7 +1,7 @@ (function(back) { function settings() { var settings = require('Storage').readJSON("kbmulti.settings.json", true) || {}; - if (settings.showHelpBtn===undefined) { settings.firstLaunch = true; } + if (settings.showHelpBtn===undefined) { settings.showHelpBtn = true; } if (settings.charTimeout===undefined) { settings.charTimeout = 500; } return settings; } From 28c6103242a0ad6a168cf43de5314b6c2b82fb03 Mon Sep 17 00:00:00 2001 From: thyttan <97237430+thyttan@users.noreply.github.com> Date: Wed, 11 May 2022 20:55:54 +0200 Subject: [PATCH 240/509] Update settings.js --- apps/kbmulti/settings.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/kbmulti/settings.js b/apps/kbmulti/settings.js index ab0e26806..8a66cd8f0 100644 --- a/apps/kbmulti/settings.js +++ b/apps/kbmulti/settings.js @@ -21,7 +21,7 @@ format: v => v, onchange: v => updateSetting("charTimeout", v), }, - /*LANG*/'Show help button': { + /*LANG*/'Show help button?': { value: !!settings().showHelpBtn, format: v => v?"Yes":"No", onchange: v => updateSetting("showHelpBtn", v) From 4f296ac43438e8ca744b3556e262e55b75bc9788 Mon Sep 17 00:00:00 2001 From: thyttan <97237430+thyttan@users.noreply.github.com> Date: Wed, 11 May 2022 20:59:49 +0200 Subject: [PATCH 241/509] Update ChangeLog --- apps/kbmulti/ChangeLog | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/kbmulti/ChangeLog b/apps/kbmulti/ChangeLog index 191517b30..4d2380bfa 100644 --- a/apps/kbmulti/ChangeLog +++ b/apps/kbmulti/ChangeLog @@ -1,2 +1,2 @@ 0.01: New keyboard -0.02: Introduce setting "Show help button". Make setting firstLaunch invisible by removing corresponding code from settings.js. Add marker that shows when character selection timeout has run out. +0.02: Introduce setting "Show help button". Make setting firstLaunch invisible by removing corresponding code from settings.js. Add marker that shows when character selection timeout has run out. Display opened text on launch when editing existing text string. From 8fae68bccc2271c2c9c1e77e6e647631874fabd3 Mon Sep 17 00:00:00 2001 From: thyttan <97237430+thyttan@users.noreply.github.com> Date: Wed, 11 May 2022 21:19:09 +0200 Subject: [PATCH 242/509] Update ChangeLog --- apps/kbmulti/ChangeLog | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/kbmulti/ChangeLog b/apps/kbmulti/ChangeLog index 4d2380bfa..c6c606bff 100644 --- a/apps/kbmulti/ChangeLog +++ b/apps/kbmulti/ChangeLog @@ -1,2 +1,2 @@ 0.01: New keyboard -0.02: Introduce setting "Show help button". Make setting firstLaunch invisible by removing corresponding code from settings.js. Add marker that shows when character selection timeout has run out. Display opened text on launch when editing existing text string. +0.02: Introduce setting "Show help button?". Make setting firstLaunch invisible by removing corresponding code from settings.js. Add marker that shows when character selection timeout has run out. Display opened text on launch when editing existing text string. From 08718a504d259d13bd6e80e5c1a7fefd3a7e92b3 Mon Sep 17 00:00:00 2001 From: Stiralbios Date: Wed, 11 May 2022 21:58:00 +0200 Subject: [PATCH 243/509] [ActivityReminder] First attempt to rework the inactivity detection --- apps/activityreminder/ChangeLog | 1 + apps/activityreminder/README.md | 4 +- apps/activityreminder/app.js | 50 ++++++----- apps/activityreminder/boot.js | 46 +++++----- apps/activityreminder/lib.js | 41 +++++++-- apps/activityreminder/metadata.json | 4 +- apps/activityreminder/settings.js | 126 +++++++++++++++------------- 7 files changed, 160 insertions(+), 112 deletions(-) diff --git a/apps/activityreminder/ChangeLog b/apps/activityreminder/ChangeLog index ef387d098..d4b5100a2 100644 --- a/apps/activityreminder/ChangeLog +++ b/apps/activityreminder/ChangeLog @@ -2,3 +2,4 @@ 0.02: Fix the settings bug and some tweaking 0.03: Do not alarm while charging 0.04: Obey system quiet mode +0.05: Battery optimisation, add the pause option, bug fixes diff --git a/apps/activityreminder/README.md b/apps/activityreminder/README.md index e8be66f3c..25e2c8d35 100644 --- a/apps/activityreminder/README.md +++ b/apps/activityreminder/README.md @@ -7,8 +7,8 @@ Different settings can be personalized: - Enable : Enable/Disable the app - Start hour: Hour to start the reminder - End hour: Hour to end the reminder -- Max inactivity: Maximum inactivity time to allow before the alert. From 15 to 60 min +- Max inactivity: Maximum inactivity time to allow before the alert. From 15 to 120 min - Dismiss delay: Delay added before the next alert if the alert is dismissed. From 5 to 60 min - Notice: If Dissmiss delay > Max inactivity then it will be equal Max inactivity +- Pause delay: Same as Dismiss delay but longer (usefull for meetings and such). From 30 to 240 min - Min steps: Minimal amount of steps to count as an activity diff --git a/apps/activityreminder/app.js b/apps/activityreminder/app.js index 811399ca6..fbf1b377e 100644 --- a/apps/activityreminder/app.js +++ b/apps/activityreminder/app.js @@ -1,40 +1,44 @@ -function drawAlert(){ - E.showPrompt("Inactivity detected",{ - title:"Activity reminder", - buttons : {"Ok": true,"Dismiss": false} - }).then(function(v) { - if(v == true){ - stepsArray = stepsArray.slice(0, activityreminder.maxInnactivityMin - 3); - require("activityreminder").saveStepsArray(stepsArray); - } - if(v == false){ - stepsArray = stepsArray.slice(0, activityreminder.maxInnactivityMin - activityreminder.dismissDelayMin); - require("activityreminder").saveStepsArray(stepsArray); - } +function drawAlert() { + E.showPrompt("Inactivity detected", { + title: "Activity reminder", + buttons: { "Ok": 1, "Dismiss": 2, "Pause": 3 } + }).then(function (v) { + if (v == 1) { + activityreminder_data.okDate = new Date(); + } + if (v == 2) { + activityreminder_data.dismissDate = new Date(); + } + if (v == 3) { + activityreminder_data.pauseDate = new Date(); + } + activityreminder.saveData(activityreminder_data); load(); }); // Obey system quiet mode: - if (!(require('Storage').readJSON('setting.json',1)||{}).quiet) { + if (!(storage.readJSON('setting.json', 1) || {}).quiet) { Bangle.buzz(400); } setTimeout(load, 20000); } -function run(){ - if(stepsArray.length == activityreminder.maxInnactivityMin){ - if (stepsArray[0] - stepsArray[stepsArray.length-1] < activityreminder.minSteps){ - drawAlert(); - } - }else{ - eval(require("Storage").read("activityreminder.settings.js"))(()=>load()); +function run() { + if (activityreminder.mustAlert(activityreminder_data, activityreminder_settings)) { + if (stepsArray[0] - stepsArray[stepsArray.length - 1] < activityreminder_settings.minSteps) { + drawAlert(); } + } else { + eval(storage.read("activityreminder.settings.js"))(() => load()); + } } +const activityreminder = require("activityreminder"); +const storage = require("Storage"); g.clear(); Bangle.loadWidgets(); Bangle.drawWidgets(); -activityreminder = require("activityreminder").loadSettings(); -stepsArray = require("activityreminder").loadStepsArray(); +activityreminder_settings = activityreminder.loadSettings(); +activityreminder_data = activityreminder.loadData(); run(); diff --git a/apps/activityreminder/boot.js b/apps/activityreminder/boot.js index 09aa9d757..1c08f6c9c 100644 --- a/apps/activityreminder/boot.js +++ b/apps/activityreminder/boot.js @@ -1,30 +1,38 @@ -function run(){ - if (Bangle.isCharging()) return; +function run() { + if (isNotWorn()) return; var now = new Date(); var h = now.getHours(); - if(h >= activityreminder.startHour && h < activityreminder.endHour){ - var health = Bangle.getHealthStatus("day"); - stepsArray.unshift(health.steps); - stepsArray = stepsArray.slice(0, activityreminder.maxInnactivityMin); - require("activityreminder").saveStepsArray(stepsArray); - } - else{ - if(stepsArray != []){ - stepsArray = []; - require("activityreminder").saveStepsArray(stepsArray); + var doAlert = false; + var doSave = false; + var health = Bangle.getHealthStatus("day"); + + if (h >= activityreminder_settings.startHour && h < activityreminder_settings.endHour) { + if (health.steps - activityreminder_data.stepsOnDate >= activityreminder_settings.minSteps) { + activityreminder_data.stepsOnDate = health.steps; + activityreminder_data.stepsDate = now; + doSave = true; } + doAlert = activityreminder.mustAlert(activityreminder_data, activityreminder_settings); } - if(stepsArray.length >= activityreminder.maxInnactivityMin){ - if (stepsArray[0] - stepsArray[stepsArray.length-1] < activityreminder.minSteps){ - load('activityreminder.app.js'); - } + + if (doSave) { + activityreminder.saveData(activityreminder_data); + } + if (doAlert) { + load('activityreminder.app.js'); } } +function isNotWorn() { + // todo check temperature and mouvement in a futur release + return Bangle.isCharging(); +} -activityreminder = require("activityreminder").loadSettings(); -if(activityreminder.enabled) { - stepsArray = require("activityreminder").loadStepsArray(); +const activityreminder = require("activityreminder"); +activityreminder_settings = activityreminder.loadSettings(); +if (activityreminder_settings.enabled) { + activityreminder_data = activityreminder.loadData(); + activityreminder.saveData(activityreminder_data); setInterval(run, 60000); } diff --git a/apps/activityreminder/lib.js b/apps/activityreminder/lib.js index 712842fba..e33428b06 100644 --- a/apps/activityreminder/lib.js +++ b/apps/activityreminder/lib.js @@ -1,22 +1,45 @@ -exports.loadSettings = function() { +const storage = require("Storage"); + +exports.loadSettings = function () { return Object.assign({ enabled: true, startHour: 9, endHour: 20, maxInnactivityMin: 30, dismissDelayMin: 15, + pauseDelayMin: 120, minSteps: 50 - }, require("Storage").readJSON("activityreminder.s.json", true) || {}); + }, storage.readJSON("activityreminder.s.json", true) || {}); }; -exports.writeSettings = function(settings){ - require("Storage").writeJSON("activityreminder.s.json", settings); +exports.writeSettings = function (settings) { + storage.writeJSON("activityreminder.s.json", settings); }; -exports.saveStepsArray = function(stepsArray) { - require("Storage").writeJSON("activityreminder.sa.json", stepsArray); +exports.saveData = function (data) { + storage.writeJSON("activityreminder.data.json", data); }; -exports.loadStepsArray = function(){ - return require("Storage").readJSON("activityreminder.sa.json") || []; -}; \ No newline at end of file +exports.loadData = function () { + var health = Bangle.getHealthStatus("day"); + return Object.assign({ + stepsDate: new Date(), + stepsOnDate: health.steps, + okDate: new Date('1/1/1970'), + dismissDate: new Date('1/1/1970'), + pauseDate: new Date('1/1/1970'), + }, + storage.readJSON("activityreminder.data.json") || {}); +}; + +exports.mustAlert = function(activityreminder_data, activityreminder_settings) { + var now = new Date(); + if ((now - activityreminder_data.stepsDate) / 60000 > activityreminder_settings.maxInnactivityMin) { // inactivity detected + if ((now - activityreminder_settings.okDate) / 60000 > 3 && // last alert was more than 3 min ago + (now - activityreminder_settings.dismissDate) / 60000 > activityreminder_settings.dismissDelayMin && // last alert was more than dismissDelayMin ago + (now - activityreminder_settings.pauseDate) / 60000 > activityreminder_settings.pauseDelayMin) { // last alert was more than pauseDelayMin ago + return true; + } + } + return false; +} \ No newline at end of file diff --git a/apps/activityreminder/metadata.json b/apps/activityreminder/metadata.json index 89b0fbc0b..15f10f2ed 100644 --- a/apps/activityreminder/metadata.json +++ b/apps/activityreminder/metadata.json @@ -3,7 +3,7 @@ "name": "Activity Reminder", "shortName":"Activity Reminder", "description": "A reminder to take short walks for the ones with a sedentary lifestyle", - "version":"0.04", + "version":"0.05", "icon": "app.png", "type": "app", "tags": "tool,activity", @@ -18,6 +18,6 @@ ], "data": [ {"name": "activityreminder.s.json"}, - {"name": "activityreminder.sa.json"} + {"name": "activityreminder.data.json"} ] } diff --git a/apps/activityreminder/settings.js b/apps/activityreminder/settings.js index e4f44efc6..6cd42913a 100644 --- a/apps/activityreminder/settings.js +++ b/apps/activityreminder/settings.js @@ -1,64 +1,76 @@ -(function(back) { +(function (back) { // Load settings - var settings = require("activityreminder").loadSettings(); + const storage = require("Storage"); + var settings = storage.loadSettings(); // Show the menu E.showMenu({ - "" : { "title" : "Activity Reminder" }, - "< Back" : () => back(), - 'Enable': { - value: settings.enabled, - format: v => v?"Yes":"No", - onchange: v => { - settings.enabled = v; - require("activityreminder").writeSettings(settings); - } + "": { "title": "Activity Reminder" }, + "< Back": () => back(), + 'Enable': { + value: settings.enabled, + format: v => v ? "Yes" : "No", + onchange: v => { + settings.enabled = v; + storage.writeSettings(settings); + } + }, + 'Start hour': { + value: settings.startHour, + min: 0, max: 24, + onchange: v => { + settings.startHour = v; + storage.writeSettings(settings); + } + }, + 'End hour': { + value: settings.endHour, + min: 0, max: 24, + onchange: v => { + settings.endHour = v; + storage.writeSettings(settings); + } + }, + 'Max inactivity': { + value: settings.maxInnactivityMin, + min: 15, max: 120, + onchange: v => { + settings.maxInnactivityMin = v; + storage.writeSettings(settings); }, - 'Start hour': { - value: settings.startHour, - min: 0, max: 24, - onchange: v => { - settings.startHour = v; - require("activityreminder").writeSettings(settings); - } - }, - 'End hour': { - value: settings.endHour, - min: 0, max: 24, - onchange: v => { - settings.endHour = v; - require("activityreminder").writeSettings(settings); - } - }, - 'Max inactivity': { - value: settings.maxInnactivityMin, - min: 15, max: 120, - onchange: v => { - settings.maxInnactivityMin = v; - require("activityreminder").writeSettings(settings); - }, - format: x => { - return x + " min"; - } - }, - 'Dismiss delay': { - value: settings.dismissDelayMin, - min: 5, max: 60, - onchange: v => { - settings.dismissDelayMin = v; - require("activityreminder").writeSettings(settings); - }, - format: x => { - return x + " min"; - } - }, - 'Min steps': { - value: settings.minSteps, - min: 10, max: 500, - onchange: v => { - settings.minSteps = v; - require("activityreminder").writeSettings(settings); - } - } + format: x => { + return x + " min"; + } + }, + 'Dismiss delay': { + value: settings.dismissDelayMin, + min: 5, max: 60, + onchange: v => { + settings.dismissDelayMin = v; + storage.writeSettings(settings); + }, + format: x => { + return x + " min"; + } + }, + 'Pause delay': { + value: settings.pauseDelayMin, + min: 30, max: 240, + onchange: v => { + settings.dismissDelayMin = v; + storage.writeSettings(settings); + }, + format: x => { + return x + " min"; + } + }, + 'Min steps': { + value: settings.minSteps, + min: 10, max: 500, + onchange: v => { + settings.minSteps = v; + storage.writeSettings(settings); + } + } }); }) From 76c80c6f934997d72ea30c30621c11964f409220 Mon Sep 17 00:00:00 2001 From: Stiralbios Date: Wed, 11 May 2022 22:11:33 +0200 Subject: [PATCH 244/509] [ActivityReminder] Try to fix settings --- apps/activityreminder/settings.js | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/apps/activityreminder/settings.js b/apps/activityreminder/settings.js index 6cd42913a..0557826df 100644 --- a/apps/activityreminder/settings.js +++ b/apps/activityreminder/settings.js @@ -1,7 +1,6 @@ (function (back) { // Load settings - const storage = require("Storage"); - var settings = storage.loadSettings(); + var settings = require("Storage").loadSettings(); // Show the menu E.showMenu({ @@ -12,7 +11,7 @@ format: v => v ? "Yes" : "No", onchange: v => { settings.enabled = v; - storage.writeSettings(settings); + require("Storage").writeSettings(settings); } }, 'Start hour': { @@ -20,7 +19,7 @@ min: 0, max: 24, onchange: v => { settings.startHour = v; - storage.writeSettings(settings); + require("Storage").writeSettings(settings); } }, 'End hour': { @@ -28,7 +27,7 @@ min: 0, max: 24, onchange: v => { settings.endHour = v; - storage.writeSettings(settings); + require("Storage").writeSettings(settings); } }, 'Max inactivity': { @@ -36,7 +35,7 @@ min: 15, max: 120, onchange: v => { settings.maxInnactivityMin = v; - storage.writeSettings(settings); + require("Storage").writeSettings(settings); }, format: x => { return x + " min"; @@ -47,7 +46,7 @@ min: 5, max: 60, onchange: v => { settings.dismissDelayMin = v; - storage.writeSettings(settings); + require("Storage").writeSettings(settings); }, format: x => { return x + " min"; @@ -57,8 +56,8 @@ value: settings.pauseDelayMin, min: 30, max: 240, onchange: v => { - settings.dismissDelayMin = v; - storage.writeSettings(settings); + settings.pauseDelayMin = v; + require("Storage").writeSettings(settings); }, format: x => { return x + " min"; @@ -69,7 +68,7 @@ min: 10, max: 500, onchange: v => { settings.minSteps = v; - storage.writeSettings(settings); + require("Storage").writeSettings(settings); } } }); From 5516a87b7734bdb800bb3e0b603ee70c84065817 Mon Sep 17 00:00:00 2001 From: Stiralbios Date: Wed, 11 May 2022 22:24:02 +0200 Subject: [PATCH 245/509] [ActivityReminder] fix my mistake with settings --- apps/activityreminder/settings.js | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/apps/activityreminder/settings.js b/apps/activityreminder/settings.js index 0557826df..134279f41 100644 --- a/apps/activityreminder/settings.js +++ b/apps/activityreminder/settings.js @@ -1,6 +1,7 @@ (function (back) { // Load settings - var settings = require("Storage").loadSettings(); + const activityreminder = require("activityreminder"); + var settings = activityreminder.loadSettings(); // Show the menu E.showMenu({ @@ -11,7 +12,7 @@ format: v => v ? "Yes" : "No", onchange: v => { settings.enabled = v; - require("Storage").writeSettings(settings); + activityreminder.writeSettings(settings); } }, 'Start hour': { @@ -19,7 +20,7 @@ min: 0, max: 24, onchange: v => { settings.startHour = v; - require("Storage").writeSettings(settings); + activityreminder.writeSettings(settings); } }, 'End hour': { @@ -27,7 +28,7 @@ min: 0, max: 24, onchange: v => { settings.endHour = v; - require("Storage").writeSettings(settings); + activityreminder.writeSettings(settings); } }, 'Max inactivity': { @@ -35,7 +36,7 @@ min: 15, max: 120, onchange: v => { settings.maxInnactivityMin = v; - require("Storage").writeSettings(settings); + activityreminder.writeSettings(settings); }, format: x => { return x + " min"; @@ -46,7 +47,7 @@ min: 5, max: 60, onchange: v => { settings.dismissDelayMin = v; - require("Storage").writeSettings(settings); + activityreminder.writeSettings(settings); }, format: x => { return x + " min"; @@ -57,7 +58,7 @@ min: 30, max: 240, onchange: v => { settings.pauseDelayMin = v; - require("Storage").writeSettings(settings); + activityreminder.writeSettings(settings); }, format: x => { return x + " min"; @@ -68,7 +69,7 @@ min: 10, max: 500, onchange: v => { settings.minSteps = v; - require("Storage").writeSettings(settings); + activityreminder.writeSettings(settings); } } }); From a5085c93c21e8f7f444a8ff2ffcc0d07d4c37a87 Mon Sep 17 00:00:00 2001 From: Stiralbios Date: Wed, 11 May 2022 22:31:34 +0200 Subject: [PATCH 246/509] [ActivityReminder] Fix default dates for the data --- apps/activityreminder/lib.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/apps/activityreminder/lib.js b/apps/activityreminder/lib.js index e33428b06..329087649 100644 --- a/apps/activityreminder/lib.js +++ b/apps/activityreminder/lib.js @@ -25,9 +25,9 @@ exports.loadData = function () { return Object.assign({ stepsDate: new Date(), stepsOnDate: health.steps, - okDate: new Date('1/1/1970'), - dismissDate: new Date('1/1/1970'), - pauseDate: new Date('1/1/1970'), + okDate: new Date(1970, 1, 1), + dismissDate: new Date(1970, 1, 1), + pauseDate: new Date(1970, 1, 1), }, storage.readJSON("activityreminder.data.json") || {}); }; From ffcf550beaa8297c83514cd84a27796eb66ca983 Mon Sep 17 00:00:00 2001 From: Stiralbios Date: Wed, 11 May 2022 23:51:46 +0200 Subject: [PATCH 247/509] [ActivityReminder] Remove a forgotten part of the old code --- apps/activityreminder/app.js | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/apps/activityreminder/app.js b/apps/activityreminder/app.js index fbf1b377e..7338984dc 100644 --- a/apps/activityreminder/app.js +++ b/apps/activityreminder/app.js @@ -25,9 +25,7 @@ function drawAlert() { function run() { if (activityreminder.mustAlert(activityreminder_data, activityreminder_settings)) { - if (stepsArray[0] - stepsArray[stepsArray.length - 1] < activityreminder_settings.minSteps) { - drawAlert(); - } + drawAlert(); } else { eval(storage.read("activityreminder.settings.js"))(() => load()); } From 689e6e74702dc1018daa22f7b242888ad3aece95 Mon Sep 17 00:00:00 2001 From: Stiralbios Date: Thu, 12 May 2022 10:30:11 +0200 Subject: [PATCH 248/509] Fix dates loading from file --- apps/activityreminder/boot.js | 24 +++++++++++------------- apps/activityreminder/lib.js | 24 ++++++++++++++++++------ 2 files changed, 29 insertions(+), 19 deletions(-) diff --git a/apps/activityreminder/boot.js b/apps/activityreminder/boot.js index 1c08f6c9c..bc07ebc28 100644 --- a/apps/activityreminder/boot.js +++ b/apps/activityreminder/boot.js @@ -2,25 +2,21 @@ function run() { if (isNotWorn()) return; var now = new Date(); var h = now.getHours(); - var doAlert = false; - var doSave = false; var health = Bangle.getHealthStatus("day"); if (h >= activityreminder_settings.startHour && h < activityreminder_settings.endHour) { - if (health.steps - activityreminder_data.stepsOnDate >= activityreminder_settings.minSteps) { + if (health.steps - activityreminder_data.stepsOnDate >= activityreminder_settings.minSteps // more steps made than needed + || health.steps < activityreminder_data.stepsOnDate) { // new day or reboot of the watch activityreminder_data.stepsOnDate = health.steps; activityreminder_data.stepsDate = now; - doSave = true; + activityreminder.saveData(activityreminder_data); + } + + if(activityreminder.mustAlert(activityreminder_data, activityreminder_settings)){ + load('activityreminder.app.js'); } - doAlert = activityreminder.mustAlert(activityreminder_data, activityreminder_settings); } - if (doSave) { - activityreminder.saveData(activityreminder_data); - } - if (doAlert) { - load('activityreminder.app.js'); - } } function isNotWorn() { @@ -32,7 +28,9 @@ const activityreminder = require("activityreminder"); activityreminder_settings = activityreminder.loadSettings(); if (activityreminder_settings.enabled) { activityreminder_data = activityreminder.loadData(); - activityreminder.saveData(activityreminder_data); + if(activityreminder_data.firstLoad){ + activityreminder_data.firstLoad =false; + activityreminder.saveData(activityreminder_data); + } setInterval(run, 60000); } - diff --git a/apps/activityreminder/lib.js b/apps/activityreminder/lib.js index 329087649..141579cae 100644 --- a/apps/activityreminder/lib.js +++ b/apps/activityreminder/lib.js @@ -22,20 +22,32 @@ exports.saveData = function (data) { exports.loadData = function () { var health = Bangle.getHealthStatus("day"); - return Object.assign({ + var data = Object.assign({ + firstLoad: true, stepsDate: new Date(), stepsOnDate: health.steps, - okDate: new Date(1970, 1, 1), - dismissDate: new Date(1970, 1, 1), - pauseDate: new Date(1970, 1, 1), + okDate: new Date(1970), + dismissDate: new Date(1970), + pauseDate: new Date(1970), }, - storage.readJSON("activityreminder.data.json") || {}); + storage.readJSON("activityreminder.data.json") || {}); + + if(typeof(data.stepsDate) == "string") + data.stepsDate = new Date(data.stepsDate); + if(typeof(data.okDate) == "string") + data.okDate = new Date(data.okDate); + if(typeof(data.dismissDate) == "string") + data.dismissDate = new Date(data.dismissDate); + if(typeof(data.stepsDate) == "string") + data.pauseDate = new Date(data.pauseDate); + + return data; }; exports.mustAlert = function(activityreminder_data, activityreminder_settings) { var now = new Date(); if ((now - activityreminder_data.stepsDate) / 60000 > activityreminder_settings.maxInnactivityMin) { // inactivity detected - if ((now - activityreminder_settings.okDate) / 60000 > 3 && // last alert was more than 3 min ago + if ((now - activityreminder_settings.okDate) / 60000 > 3 && // last alert anwsered with ok was more than 3 min ago (now - activityreminder_settings.dismissDate) / 60000 > activityreminder_settings.dismissDelayMin && // last alert was more than dismissDelayMin ago (now - activityreminder_settings.pauseDate) / 60000 > activityreminder_settings.pauseDelayMin) { // last alert was more than pauseDelayMin ago return true; From 740b81e07667cc375d9d4dca91d0c6fdf1f914b9 Mon Sep 17 00:00:00 2001 From: Stiralbios Date: Thu, 12 May 2022 11:34:42 +0200 Subject: [PATCH 249/509] Fix mustAlert, and, hopefully use let and const the JS way --- apps/activityreminder/app.js | 4 ++-- apps/activityreminder/boot.js | 10 +++++----- apps/activityreminder/lib.js | 6 +++--- apps/activityreminder/settings.js | 2 +- 4 files changed, 11 insertions(+), 11 deletions(-) diff --git a/apps/activityreminder/app.js b/apps/activityreminder/app.js index 7338984dc..f3d72976e 100644 --- a/apps/activityreminder/app.js +++ b/apps/activityreminder/app.js @@ -37,6 +37,6 @@ const storage = require("Storage"); g.clear(); Bangle.loadWidgets(); Bangle.drawWidgets(); -activityreminder_settings = activityreminder.loadSettings(); -activityreminder_data = activityreminder.loadData(); +const activityreminder_settings = activityreminder.loadSettings(); +const activityreminder_data = activityreminder.loadData(); run(); diff --git a/apps/activityreminder/boot.js b/apps/activityreminder/boot.js index bc07ebc28..12e91bc12 100644 --- a/apps/activityreminder/boot.js +++ b/apps/activityreminder/boot.js @@ -1,8 +1,8 @@ function run() { if (isNotWorn()) return; - var now = new Date(); - var h = now.getHours(); - var health = Bangle.getHealthStatus("day"); + let now = new Date(); + let h = now.getHours(); + let health = Bangle.getHealthStatus("day"); if (h >= activityreminder_settings.startHour && h < activityreminder_settings.endHour) { if (health.steps - activityreminder_data.stepsOnDate >= activityreminder_settings.minSteps // more steps made than needed @@ -25,9 +25,9 @@ function isNotWorn() { } const activityreminder = require("activityreminder"); -activityreminder_settings = activityreminder.loadSettings(); +const activityreminder_settings = activityreminder.loadSettings(); if (activityreminder_settings.enabled) { - activityreminder_data = activityreminder.loadData(); + const activityreminder_data = activityreminder.loadData(); if(activityreminder_data.firstLoad){ activityreminder_data.firstLoad =false; activityreminder.saveData(activityreminder_data); diff --git a/apps/activityreminder/lib.js b/apps/activityreminder/lib.js index 141579cae..677e4cc0b 100644 --- a/apps/activityreminder/lib.js +++ b/apps/activityreminder/lib.js @@ -21,8 +21,8 @@ exports.saveData = function (data) { }; exports.loadData = function () { - var health = Bangle.getHealthStatus("day"); - var data = Object.assign({ + let health = Bangle.getHealthStatus("day"); + const data = Object.assign({ firstLoad: true, stepsDate: new Date(), stepsOnDate: health.steps, @@ -45,7 +45,7 @@ exports.loadData = function () { }; exports.mustAlert = function(activityreminder_data, activityreminder_settings) { - var now = new Date(); + let now = new Date(); if ((now - activityreminder_data.stepsDate) / 60000 > activityreminder_settings.maxInnactivityMin) { // inactivity detected if ((now - activityreminder_settings.okDate) / 60000 > 3 && // last alert anwsered with ok was more than 3 min ago (now - activityreminder_settings.dismissDate) / 60000 > activityreminder_settings.dismissDelayMin && // last alert was more than dismissDelayMin ago diff --git a/apps/activityreminder/settings.js b/apps/activityreminder/settings.js index 134279f41..9dff61f48 100644 --- a/apps/activityreminder/settings.js +++ b/apps/activityreminder/settings.js @@ -1,7 +1,7 @@ (function (back) { // Load settings const activityreminder = require("activityreminder"); - var settings = activityreminder.loadSettings(); + const settings = activityreminder.loadSettings(); // Show the menu E.showMenu({ From f46159ef8e80db516938017255eff71ee308b17e Mon Sep 17 00:00:00 2001 From: Stiralbios Date: Thu, 12 May 2022 12:21:21 +0200 Subject: [PATCH 250/509] [ActivityReminder] Actually commiting the fix to mustAlert --- apps/activityreminder/boot.js | 11 ++++++++++- apps/activityreminder/lib.js | 6 +++--- 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/apps/activityreminder/boot.js b/apps/activityreminder/boot.js index 12e91bc12..7c094f521 100644 --- a/apps/activityreminder/boot.js +++ b/apps/activityreminder/boot.js @@ -10,6 +10,10 @@ function run() { activityreminder_data.stepsOnDate = health.steps; activityreminder_data.stepsDate = now; activityreminder.saveData(activityreminder_data); + /* todo in a futur release + add settimer to trigger like 10 secs after the stepsDate + minSteps + cancel all other timers of this app + */ } if(activityreminder.mustAlert(activityreminder_data, activityreminder_settings)){ @@ -20,7 +24,7 @@ function run() { } function isNotWorn() { - // todo check temperature and mouvement in a futur release + // todo in a futur release check temperature and mouvement in a futur release return Bangle.isCharging(); } @@ -33,4 +37,9 @@ if (activityreminder_settings.enabled) { activityreminder.saveData(activityreminder_data); } setInterval(run, 60000); + /* todo in a futur release + increase setInterval time to something that is still sensible (5 mins ?) + add settimer to trigger like 10 secs after the stepsDate + minSteps + cancel all other timers of this app + */ } diff --git a/apps/activityreminder/lib.js b/apps/activityreminder/lib.js index 677e4cc0b..7cc01c938 100644 --- a/apps/activityreminder/lib.js +++ b/apps/activityreminder/lib.js @@ -47,9 +47,9 @@ exports.loadData = function () { exports.mustAlert = function(activityreminder_data, activityreminder_settings) { let now = new Date(); if ((now - activityreminder_data.stepsDate) / 60000 > activityreminder_settings.maxInnactivityMin) { // inactivity detected - if ((now - activityreminder_settings.okDate) / 60000 > 3 && // last alert anwsered with ok was more than 3 min ago - (now - activityreminder_settings.dismissDate) / 60000 > activityreminder_settings.dismissDelayMin && // last alert was more than dismissDelayMin ago - (now - activityreminder_settings.pauseDate) / 60000 > activityreminder_settings.pauseDelayMin) { // last alert was more than pauseDelayMin ago + if ((now - activityreminder_data.okDate) / 60000 > 3 && // last alert anwsered with ok was more than 3 min ago + (now - activityreminder_data.dismissDate) / 60000 > activityreminder_settings.dismissDelayMin && // last alert was more than dismissDelayMin ago + (now - activityreminder_data.pauseDate) / 60000 > activityreminder_settings.pauseDelayMin) { // last alert was more than pauseDelayMin ago return true; } } From 255abe9c13b137295e139cab344c521730502ce7 Mon Sep 17 00:00:00 2001 From: Stiralbios Date: Thu, 12 May 2022 14:18:33 +0200 Subject: [PATCH 251/509] [ActivityReminder] fix bug on pauseDate --- apps/activityreminder/lib.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/activityreminder/lib.js b/apps/activityreminder/lib.js index 7cc01c938..5b7959827 100644 --- a/apps/activityreminder/lib.js +++ b/apps/activityreminder/lib.js @@ -38,7 +38,7 @@ exports.loadData = function () { data.okDate = new Date(data.okDate); if(typeof(data.dismissDate) == "string") data.dismissDate = new Date(data.dismissDate); - if(typeof(data.stepsDate) == "string") + if(typeof(data.pauseDate) == "string") data.pauseDate = new Date(data.pauseDate); return data; From 94690a81ee6fd651d078f8ee213bbe7eb4a76907 Mon Sep 17 00:00:00 2001 From: Alessandro Cocco Date: Wed, 11 May 2022 23:03:10 +0200 Subject: [PATCH 252/509] Add new time_utils module and move some functions from sched module to it --- apps/sched/ChangeLog | 1 + apps/sched/lib.js | 17 ------------ apps/sched/metadata.json | 2 +- apps/sched/sched.js | 4 +-- modules/time_utils.js | 57 ++++++++++++++++++++++++++++++++++++++++ 5 files changed, 61 insertions(+), 20 deletions(-) create mode 100644 modules/time_utils.js diff --git a/apps/sched/ChangeLog b/apps/sched/ChangeLog index 914bd7002..c68653a76 100644 --- a/apps/sched/ChangeLog +++ b/apps/sched/ChangeLog @@ -7,3 +7,4 @@ 0.07: Update settings Correct `decodeTime(t)` to return a more likely expected time 0.08: add day of week check to getActiveAlarms() +0.09: Move some functions to new time_utils module diff --git a/apps/sched/lib.js b/apps/sched/lib.js index ff35c94cb..fb1a7e4d6 100644 --- a/apps/sched/lib.js +++ b/apps/sched/lib.js @@ -113,20 +113,3 @@ exports.getSettings = function () { exports.setSettings = function(settings) { require("Storage").writeJSON("sched.settings.json", settings); }; - -// time in ms -> { hrs, mins } -exports.decodeTime = function(t) { - t = Math.ceil(t / 60000); // sanitise to full minutes - let hrs = 0 | (t / 60); - return { hrs: hrs, mins: t - hrs * 60 }; -} - -// time in { hrs, mins } -> ms -exports.encodeTime = function(o) { - return o.hrs * 3600000 + o.mins * 60000; -} - -exports.formatTime = function(t) { - let o = exports.decodeTime(t); - return o.hrs + ":" + ("0" + o.mins).substr(-2); -} diff --git a/apps/sched/metadata.json b/apps/sched/metadata.json index 089fffe31..b962326e3 100644 --- a/apps/sched/metadata.json +++ b/apps/sched/metadata.json @@ -1,7 +1,7 @@ { "id": "sched", "name": "Scheduler", - "version": "0.08", + "version": "0.09", "description": "Scheduling library for alarms and timers", "icon": "app.png", "type": "scheduler", diff --git a/apps/sched/sched.js b/apps/sched/sched.js index 7c97600d9..f4d1bc9ad 100644 --- a/apps/sched/sched.js +++ b/apps/sched/sched.js @@ -9,7 +9,7 @@ function showAlarm(alarm) { const settings = require("sched").getSettings(); let msg = ""; - msg += alarm.timer ? require("sched").formatTime(alarm.timer) : require("sched").formatTime(alarm.t); + msg += require("time_utils").formatTime(alarm.timer ? alarm.timer : alarm.t); if (alarm.msg) { msg += "\n"+alarm.msg; } else { @@ -26,7 +26,7 @@ function showAlarm(alarm) { E.showPrompt(msg,{ title:alarm.timer ? /*LANG*/"TIMER!" : /*LANG*/"ALARM!", - buttons : {/*LANG*/"Snooze":true,/*LANG*/"Ok":false} // default is sleep so it'll come back in 10 mins + buttons : {/*LANG*/"Snooze":true,/*LANG*/"Stop":false} // default is sleep so it'll come back in 10 mins }).then(function(sleep) { buzzCount = 0; if (sleep) { diff --git a/modules/time_utils.js b/modules/time_utils.js new file mode 100644 index 000000000..152de2fd0 --- /dev/null +++ b/modules/time_utils.js @@ -0,0 +1,57 @@ +// module "time_utils" +// +// Utility functions useful to work with time and durations. +// Functions usually receive or return a {h, m} object or a +// number of milliseconds representing a time or a duration. +// + +/** + * @param {object} time {h, m} + * @returns the milliseconds contained in the passed time object + */ +exports.encodeTime = (time) => time.h * 3600000 + time.m * 60000; + +/** + * @param {int} millis the number of milliseconds + * @returns a time object {h, m} built from the milliseconds + */ +exports.decodeTime = (millis) => { + millis = Math.ceil(millis / 60000); + var h = 0 | (millis / 60); + return { + h: h, + m: millis - h * 60 + }; +} + +/** + * @param {object|int} value {h,m} object or milliseconds + * @returns an human-readable time string like "10:25" + */ +exports.formatTime = (value) => { + var time = (value.h === undefined || value.m === undefined) ? exports.decodeTime(value) : value; + return time.h + ":" + ("0" + time.m).substr(-2); +} + +/** + * @param {object|int} value {h,m} object or milliseconds + * @returns an human-readable duration string like "1h 10m" + */ +exports.formatDuration = (value) => { + var duration; + + var time = (value.h === undefined || value.m === undefined) ? exports.decodeTime(value) : value; + + if (time.h == 0) { + duration = time.m + "m" + } else { + duration = time.h + "h" + (time.m ? (" " + time.m + "m") : "") + } + + return duration +} + +exports.getCurrentTimeMillis = () => { + var time = new Date(); + return (time.getHours() * 3600 + time.getMinutes() * 60 + time.getSeconds()) * 1000; +} From ee663ef1691f94172d3d5b60bfa54ebb4f5b38a8 Mon Sep 17 00:00:00 2001 From: Alessandro Cocco Date: Thu, 12 May 2022 22:51:41 +0200 Subject: [PATCH 253/509] [sleepphasealarm] Update to new time_utils module --- apps/sleepphasealarm/ChangeLog | 1 + apps/sleepphasealarm/app.js | 4 ++-- apps/sleepphasealarm/metadata.json | 2 +- 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/apps/sleepphasealarm/ChangeLog b/apps/sleepphasealarm/ChangeLog index ec3fe3a23..208058472 100644 --- a/apps/sleepphasealarm/ChangeLog +++ b/apps/sleepphasealarm/ChangeLog @@ -6,3 +6,4 @@ 0.06: Add logging use Layout library and display ETA 0.07: Add check for day of week +0.08: Update to new time_utils module diff --git a/apps/sleepphasealarm/app.js b/apps/sleepphasealarm/app.js index 8ccd43eb2..febc8a259 100644 --- a/apps/sleepphasealarm/app.js +++ b/apps/sleepphasealarm/app.js @@ -46,8 +46,8 @@ function calc_ess(acc_magn) { var nextAlarm; active.forEach(alarm => { const now = new Date(); - const t = require("sched").decodeTime(alarm.t); - var dateAlarm = new Date(now.getFullYear(), now.getMonth(), now.getDate(), t.hrs, t.mins); + const time = require("time_utils").decodeTime(alarm.t); + var dateAlarm = new Date(now.getFullYear(), now.getMonth(), now.getDate(), time.h, time.m); if (dateAlarm < now) { // dateAlarm in the past, add 24h dateAlarm.setTime(dateAlarm.getTime() + (24*60*60*1000)); } diff --git a/apps/sleepphasealarm/metadata.json b/apps/sleepphasealarm/metadata.json index d74590704..c74a617ab 100644 --- a/apps/sleepphasealarm/metadata.json +++ b/apps/sleepphasealarm/metadata.json @@ -2,7 +2,7 @@ "id": "sleepphasealarm", "name": "SleepPhaseAlarm", "shortName": "SleepPhaseAlarm", - "version": "0.07", + "version": "0.08", "description": "Uses the accelerometer to estimate sleep and wake states with the principle of Estimation of Stationary Sleep-segments (ESS, see https://ubicomp.eti.uni-siegen.de/home/datasets/ichi14/index.html.en). This app will read the next alarm from the alarm application and will wake you up to 30 minutes early at the best guessed time when you are almost already awake.", "icon": "app.png", "tags": "alarm", From f22f113687a2a3cf9943806ff73e28a8257c1777 Mon Sep 17 00:00:00 2001 From: Alessandro Cocco Date: Thu, 12 May 2022 22:59:03 +0200 Subject: [PATCH 254/509] [Alarms & Timers] Full UI rewrite --- apps/alarm/ChangeLog | 1 + apps/alarm/app.js | 488 +++++++++++++++++++++++---------------- apps/alarm/metadata.json | 2 +- apps/sched/lib.js | 6 +- 4 files changed, 288 insertions(+), 209 deletions(-) diff --git a/apps/alarm/ChangeLog b/apps/alarm/ChangeLog index ca1417b5b..b952b1dcd 100644 --- a/apps/alarm/ChangeLog +++ b/apps/alarm/ChangeLog @@ -26,3 +26,4 @@ Add "Enable All", "Disable All" and "Remove All" actions 0.25: Fix redrawing selected Alarm/Timer entry inside edit submenu 0.26: Add support for Monday as first day of the week (#1780) +0.27: New UI! diff --git a/apps/alarm/app.js b/apps/alarm/app.js index cf46823d6..0cf1f3d6f 100644 --- a/apps/alarm/app.js +++ b/apps/alarm/app.js @@ -1,20 +1,160 @@ Bangle.loadWidgets(); Bangle.drawWidgets(); +// 0 = Sunday (default), 1 = Monday +const firstDayOfWeek = (require("Storage").readJSON("setting.json", true) || {}).firstDayOfWeek || 0; +const WORKDAYS = 62 +const WEEKEND = firstDayOfWeek ? 192 : 65; +const EVERY_DAY = firstDayOfWeek ? 254 : 127; + +const iconAlarmOn = "\0" + atob("GBiBAAAAAAAAAAYAYA4AcBx+ODn/nAP/wAf/4A/n8A/n8B/n+B/n+B/n+B/n+B/h+B/4+A/+8A//8Af/4AP/wAH/gAB+AAAAAAAAAA=="); +const iconAlarmOff = "\0" + (g.theme.dark + ? atob("GBjBAP////8AAAAAAAAGAGAOAHAcfjg5/5wD/8AH/+AP5/AP5/Af5/gf5/gf5wAf5gAf4Hgf+f4P+bYP8wMH84cD84cB8wMAebYAAf4AAHg=") + : atob("GBjBAP//AAAAAAAAAAAGAGAOAHAcfjg5/5wD/8AH/+AP5/AP5/Af5/gf5/gf5wAf5gAf4Hgf+f4P+bYP8wMH84cD84cB8wMAebYAAf4AAHg=")); + +const iconTimerOn = "\0" + (g.theme.dark + ? atob("GBjBAP////8AAAAAAAAAAAAH/+AH/+ABgYABgYABgYAA/wAA/wAAfgAAPAAAPAAAfgAA5wAAwwABgYABgYABgYAH/+AH/+AAAAAAAAAAAAA=") + : atob("GBjBAP//AAAAAAAAAAAAAAAH/+AH/+ABgYABgYABgYAA/wAA/wAAfgAAPAAAPAAAfgAA5wAAwwABgYABgYABgYAH/+AH/+AAAAAAAAAAAAA=")); +const iconTimerOff = "\0" + (g.theme.dark + ? atob("GBjBAP////8AAAAAAAAAAAAH/+AH/+ABgYABgYABgYAA/wAA/wAAfgAAPAAAPAAAfgAA5HgAwf4BgbYBgwMBg4cH84cH8wMAAbYAAf4AAHg=") + : atob("GBjBAP//AAAAAAAAAAAAAAAH/+AH/+ABgYABgYABgYAA/wAA/wAAfgAAPAAAPAAAfgAA5HgAwf4BgbYBgwMBg4cH84cH8wMAAbYAAf4AAHg=")); + // An array of alarm objects (see sched/README.md) var alarms = require("sched").getAlarms(); -// 0 = Sunday -// 1 = Monday -var firstDayOfWeek = (require("Storage").readJSON("setting.json", true) || {}).firstDayOfWeek || 0; +function handleFirstDayOfWeek(dow) { + if (firstDayOfWeek == 1) { + if ((dow & 1) == 1) { + // In the scheduler API Sunday is 1. + // Here the week starts on Monday and Sunday is ON so + // when I read the dow I need to move Sunday to 128... + dow += 127; + } else if ((dow & 128) == 128) { + // ... and then when I write the dow I need to move Sunday back to 1. + dow -= 127; + } + } + return dow; +} -function getCurrentTime() { - var time = new Date(); - return ( - time.getHours() * 3600000 + - time.getMinutes() * 60000 + - time.getSeconds() * 1000 - ); +// Check the first day of week and update the dow field accordingly. +alarms.forEach(alarm => alarm.dow = handleFirstDayOfWeek(alarm.dow)); + +function showMainMenu() { + const menu = { + "": { "title": /*LANG*/"Alarms & Timers" }, + "< Back": () => load(), + /*LANG*/"New...": () => showNewMenu() + }; + + alarms.forEach((e, index) => { + var label = e.timer + ? require("time_utils").formatDuration(e.timer) + : require("time_utils").formatTime(e.t) + (e.dow > 0 ? (" " + decodeDOW(e)) : ""); + menu[label] = { + value: e.on ? (e.timer ? iconTimerOn : iconAlarmOn) : (e.timer ? iconTimerOff : iconAlarmOff), + onchange: () => setTimeout(e.timer ? showEditTimerMenu : showEditAlarmMenu, 10, e, index) + }; + }); + + menu[/*LANG*/"Advanced"] = () => showAdvancedMenu(); + + E.showMenu(menu); +} + +function showNewMenu() { + E.showMenu({ + "": { "title": /*LANG*/"New..." }, + "< Back": () => showMainMenu(), + /*LANG*/"Alarm": () => showEditAlarmMenu(undefined, undefined), + /*LANG*/"Timer": () => showEditTimerMenu(undefined, undefined) + }); +} + +function showEditAlarmMenu(selectedAlarm, alarmIndex) { + var isNew = alarmIndex === undefined; + + var alarm = require("sched").newDefaultAlarm(); + alarm.dow = handleFirstDayOfWeek(alarm.dow); + + if (selectedAlarm) { + Object.assign(alarm, selectedAlarm); + } + + var time = require("time_utils").decodeTime(alarm.t); + + const menu = { + "": { "title": isNew ? /*LANG*/"New Alarm" : /*LANG*/"Edit Alarm" }, + "< Back": () => { + saveAlarm(alarm, alarmIndex, time); + showMainMenu(); + }, + /*LANG*/"Hour": { + value: time.h, + format: v => ("0" + v).substr(-2), + min: 0, + max: 23, + wrap: true, + onchange: v => time.h = v + }, + /*LANG*/"Minute": { + value: time.m, + format: v => ("0" + v).substr(-2), + min: 0, + max: 59, + wrap: true, + onchange: v => time.m = v + }, + /*LANG*/"Enabled": { + value: alarm.on, + onchange: v => alarm.on = v + }, + /*LANG*/"Repeat": { + value: decodeDOW(alarm), + onchange: () => setTimeout(showEditRepeatMenu, 100, alarm.dow, dow => { + alarm.rp = dow > 0; + alarm.dow = dow; + alarm.t = require("time_utils").encodeTime(time); + setTimeout(showEditAlarmMenu, 10, alarm, alarmIndex); + }) + }, + /*LANG*/"Vibrate": require("buzz_menu").pattern(alarm.vibrate, v => alarm.vibrate = v), + /*LANG*/"Auto Snooze": { + value: alarm.as, + onchange: v => alarm.as = v + }, + /*LANG*/"Cancel": () => showMainMenu() + }; + + if (!isNew) { + menu[/*LANG*/"Delete"] = () => { + E.showPrompt(/*LANG*/"Are you sure?", { title: /*LANG*/"Delete Alarm" }).then((confirm) => { + if (confirm) { + alarms.splice(alarmIndex, 1); + saveAndReload(); + showMainMenu(); + } else { + alarm.t = require("time_utils").encodeTime(time); + setTimeout(showEditAlarmMenu, 10, alarm, alarmIndex); + } + }); + }; + } + + E.showMenu(menu); +} + +function saveAlarm(alarm, alarmIndex, time) { + alarm.t = require("time_utils").encodeTime(time); + alarm.last = alarm.t < require("time_utils").getCurrentTimeMillis() ? new Date().getDate() : 0; + + if (alarmIndex === undefined) { + alarms.push(alarm); + } else { + alarms[alarmIndex] = alarm; + } + + saveAndReload(); } function saveAndReload() { @@ -23,249 +163,187 @@ function saveAndReload() { require("sched").setAlarms(alarms); require("sched").reload(); + + // Fix after save + alarms.forEach(a => a.dow = handleFirstDayOfWeek(a.dow, firstDayOfWeek)); } -function showMainMenu() { - // Timer img "\0"+atob("DhKBAP////MDDAwwMGGBzgPwB4AeAPwHOBhgwMMzDez////w") - // Alarm img "\0"+atob("FBSBAABgA4YcMPDGP8Zn/mx/48//PP/zD/8A//AP/wD/8A//AP/wH/+D//w//8AAAADwAAYA") - const menu = { - '': { 'title': /*LANG*/'Alarms&Timers' }, - /*LANG*/'< Back': () => { load(); }, - /*LANG*/'New Alarm': () => editAlarm(-1), - /*LANG*/'New Timer': () => editTimer(-1) - }; - alarms.forEach((alarm, idx) => { - alarm.dow = handleFirstDayOfWeek(alarm.dow, firstDayOfWeek); +function decodeDOW(alarm) { + return alarm.rp + ? require("date_utils") + .dows(firstDayOfWeek, 2) + .map((day, index) => alarm.dow & (1 << (index + firstDayOfWeek)) ? day : "_") + .join("") + .toLowerCase() + : "Once" +} - var type, txt; // a leading space is currently required (JS error in Espruino 2v12) - if (alarm.timer) { - type = /*LANG*/"Timer"; - txt = " " + require("sched").formatTime(alarm.timer); - } else { - type = /*LANG*/"Alarm"; - txt = " " + require("sched").formatTime(alarm.t); +function showEditRepeatMenu(dow, dowChangeCallback) { + var originalDow = dow; + var isCustom = dow > 0 && dow != WORKDAYS && dow != WEEKEND && dow != EVERY_DAY; + + const menu = { + "": { "title": /*LANG*/"Repeat Alarm" }, + "< Back": () => dowChangeCallback(dow), + /*LANG*/"Once": { // No days set: the alarm will fire once + value: dow == 0, + onchange: () => dowChangeCallback(0) + }, + /*LANG*/"Workdays": { + value: dow == WORKDAYS, + onchange: () => dowChangeCallback(WORKDAYS) + }, + /*LANG*/"Weekends": { + value: dow == WEEKEND, + onchange: () => dowChangeCallback(WEEKEND) + }, + /*LANG*/"Every Day": { + value: dow == EVERY_DAY, + onchange: () => dowChangeCallback(EVERY_DAY) + }, + /*LANG*/"Custom": { + value: isCustom ? decodeDOW({ rp: true, dow: dow }) : false, + onchange: () => setTimeout(showCustomDaysMenu, 10, isCustom ? dow : EVERY_DAY, dowChangeCallback, originalDow) } - if (alarm.rp) txt += "\0" + atob("FBaBAAABgAAcAAHn//////wAHsABzAAYwAAMAADAAAAAAwAAMAADGAAzgAN4AD//////54AAOAABgAA="); - // rename duplicate alarms - if (menu[type + txt]) { - var n = 2; - while (menu[type + " " + n + txt]) n++; - txt = type + " " + n + txt; - } else txt = type + txt; - // add to menu - menu[txt] = { - value: "\0" + atob(alarm.on ? "EhKBAH//v/////////////5//x//j//H+eP+Mf/A//h//z//////////3//g" : "EhKBAH//v//8AA8AA8AA8AA8AA8AA8AA8AA8AA8AA8AA8AA8AA8AA///3//g"), - onchange: function () { - setTimeout(alarm.timer ? editTimer : editAlarm, 10, idx, alarm); - } - }; - }); + }; - if (alarms.some(e => !e.on)) { - menu[/*LANG*/"Enable All"] = () => enableAll(true); - } - if (alarms.some(e => e.on)) { - menu[/*LANG*/"Disable All"] = () => enableAll(false); - } - if (alarms.length > 0) { - menu[/*LANG*/"Delete All"] = () => deleteAll(); - } - - if (WIDGETS["alarm"]) WIDGETS["alarm"].reload(); - return E.showMenu(menu); + E.showMenu(menu); } -function editDOW(dow, onchange) { +function showCustomDaysMenu(dow, dowChangeCallback, originalDow) { const menu = { - '': { 'title': /*LANG*/'Days of Week' }, - /*LANG*/'< Back': () => onchange(dow) + "": { "title": /*LANG*/"Custom Days" }, + "< Back": () => dowChangeCallback(dow), }; require("date_utils").dows(firstDayOfWeek).forEach((day, i) => { menu[day] = { value: !!(dow & (1 << (i + firstDayOfWeek))), - format: v => v ? /*LANG*/"Yes" : /*LANG*/"No", onchange: v => v ? (dow |= 1 << (i + firstDayOfWeek)) : (dow &= ~(1 << (i + firstDayOfWeek))) }; }); + menu[/*LANG*/"Cancel"] = () => setTimeout(showEditRepeatMenu, 10, originalDow, dowChangeCallback) + E.showMenu(menu); } -function editAlarm(alarmIndex, alarm) { - var newAlarm = alarmIndex < 0; - var a = require("sched").newDefaultAlarm(); - a.dow = handleFirstDayOfWeek(a.dow, firstDayOfWeek); +function showEditTimerMenu(selectedTimer, timerIndex) { + var isNew = timerIndex === undefined; - if (!newAlarm) Object.assign(a, alarms[alarmIndex]); - if (alarm) Object.assign(a, alarm); - var t = require("sched").decodeTime(a.t); + var timer = require("sched").newDefaultTimer(); + + if (selectedTimer) { + Object.assign(timer, selectedTimer); + } + + var time = require("time_utils").decodeTime(timer.timer); const menu = { - '': { 'title': /*LANG*/'Alarm' }, - /*LANG*/'< Back': () => { - saveAlarm(newAlarm, alarmIndex, a, t); + "": { "title": isNew ? /*LANG*/"New Timer" : /*LANG*/"Edit Timer" }, + "< Back": () => { + saveTimer(timer, timerIndex, time); showMainMenu(); }, - /*LANG*/'Hours': { - value: t.hrs, min: 0, max: 23, wrap: true, - onchange: v => t.hrs = v + /*LANG*/"Hours": { + value: time.h, + min: 0, + max: 23, + wrap: true, + onchange: v => time.h = v }, - /*LANG*/'Minutes': { - value: t.mins, min: 0, max: 59, wrap: true, - onchange: v => t.mins = v + /*LANG*/"Minutes": { + value: time.m, + min: 0, + max: 59, + wrap: true, + onchange: v => time.m = v }, - /*LANG*/'Enabled': { - value: a.on, - format: v => v ? /*LANG*/"On" : /*LANG*/"Off", - onchange: v => a.on = v + /*LANG*/"Enabled": { + value: timer.on, + onchange: v => timer.on = v }, - /*LANG*/'Repeat': { - value: a.rp, - format: v => v ? /*LANG*/"Yes" : /*LANG*/"No", - onchange: v => a.rp = v - }, - /*LANG*/'Days': { - value: decodeDOW(a.dow), - onchange: () => setTimeout(editDOW, 100, a.dow, d => { - a.dow = d; - a.t = require("sched").encodeTime(t); - editAlarm(alarmIndex, a); - }) - }, - /*LANG*/'Vibrate': require("buzz_menu").pattern(a.vibrate, v => a.vibrate = v), - /*LANG*/'Auto Snooze': { - value: a.as, - format: v => v ? /*LANG*/"Yes" : /*LANG*/"No", - onchange: v => a.as = v - } + /*LANG*/"Vibrate": require("buzz_menu").pattern(timer.vibrate, v => timer.vibrate = v), }; - menu[/*LANG*/"Cancel"] = () => showMainMenu(); - - if (!newAlarm) { - menu[/*LANG*/"Delete"] = function () { - alarms.splice(alarmIndex, 1); - saveAndReload(); - showMainMenu(); + if (!isNew) { + menu[/*LANG*/"Delete"] = () => { + E.showPrompt(/*LANG*/"Are you sure?", { title: /*LANG*/"Delete Timer" }).then((confirm) => { + if (confirm) { + alarms.splice(timerIndex, 1); + saveAndReload(); + showMainMenu(); + } else { + timer.timer = require("time_utils").encodeTime(time); + setTimeout(showEditTimerMenu, 10, timer, timerIndex) + } + }); }; } - return E.showMenu(menu); + E.showMenu(menu); } -function saveAlarm(newAlarm, alarmIndex, a, t) { - a.t = require("sched").encodeTime(t); - a.last = (a.t < getCurrentTime()) ? (new Date()).getDate() : 0; +function saveTimer(timer, timerIndex, time) { + timer.timer = require("time_utils").encodeTime(time); + timer.t = require("time_utils").getCurrentTimeMillis() + timer.timer; + timer.last = 0; - if (newAlarm) { - alarms.push(a); + if (timerIndex === undefined) { + alarms.push(timer); } else { - alarms[alarmIndex] = a; + alarms[timerIndex] = timer; } saveAndReload(); } -function editTimer(alarmIndex, alarm) { - var newAlarm = alarmIndex < 0; - var a = require("sched").newDefaultTimer(); - if (!newAlarm) Object.assign(a, alarms[alarmIndex]); - if (alarm) Object.assign(a, alarm); - var t = require("sched").decodeTime(a.timer); - - const menu = { - '': { 'title': /*LANG*/'Timer' }, - /*LANG*/'< Back': () => { - saveTimer(newAlarm, alarmIndex, a, t); - showMainMenu(); - }, - /*LANG*/'Hours': { - value: t.hrs, min: 0, max: 23, wrap: true, - onchange: v => t.hrs = v - }, - /*LANG*/'Minutes': { - value: t.mins, min: 0, max: 59, wrap: true, - onchange: v => t.mins = v - }, - /*LANG*/'Enabled': { - value: a.on, - format: v => v ? /*LANG*/"On" : /*LANG*/"Off", - onchange: v => a.on = v - }, - /*LANG*/'Vibrate': require("buzz_menu").pattern(a.vibrate, v => a.vibrate = v), - }; - - menu[/*LANG*/"Cancel"] = () => showMainMenu(); - - if (!newAlarm) { - menu[/*LANG*/"Delete"] = function () { - alarms.splice(alarmIndex, 1); - saveAndReload(); - showMainMenu(); - }; - } - return E.showMenu(menu); -} - -function saveTimer(newAlarm, alarmIndex, a, t) { - a.timer = require("sched").encodeTime(t); - a.t = getCurrentTime() + a.timer; - a.last = 0; - - if (newAlarm) { - alarms.push(a); - } else { - alarms[alarmIndex] = a; - } - - saveAndReload(); -} - -function handleFirstDayOfWeek(dow, firstDayOfWeek) { - if (firstDayOfWeek == 1) { - if ((dow & 1) == 1) { - // By default 1 = Sunday. - // Here the week starts on Monday and Sunday is ON so move Sunday to 128. - dow += 127; - } else if ((dow & 128) == 128) { - dow -= 127; - } - } - return dow; -} - -function decodeDOW(dow) { - return require("date_utils") - .dows(firstDayOfWeek, 2) - .map((day, index) => dow & (1 << (index + firstDayOfWeek)) ? day : "_") - .join(""); +function showAdvancedMenu() { + E.showMenu({ + "": { "title": /*LANG*/"Advanced" }, + "< Back": () => showMainMenu(), + /*LANG*/"Scheduler Settings": () => eval(require("Storage").read("sched.settings.js"))(() => showAdvancedMenu()), + /*LANG*/"Enable All": () => enableAll(true), + /*LANG*/"Disable All": () => enableAll(false), + /*LANG*/"Delete All": () => deleteAll() + }); } function enableAll(on) { - E.showPrompt(/*LANG*/"Are you sure?", { - title: on ? /*LANG*/"Enable All" : /*LANG*/"Disable All" - }).then((confirm) => { - if (confirm) { - alarms.forEach(alarm => alarm.on = on); - saveAndReload(); - } - - showMainMenu(); - }); + if (alarms.filter(e => e.on == !on).length == 0) { + E.showPrompt(on ? /*LANG*/"Nothing to Enable" : /*LANG*/"Nothing to Disable", { + title: on ? /*LANG*/"Enable All" : /*LANG*/"Disable All", + buttons: { /*LANG*/"Ok": true } + }).then(() => showAdvancedMenu()); + } else { + E.showPrompt(/*LANG*/"Are you sure?", { title: on ? "/*LANG*/Enable All" : /*LANG*/"Disable All" }).then((confirm) => { + if (confirm) { + alarms.forEach(alarm => alarm.on = on); + saveAndReload(); + showMainMenu(); + } else { + showAdvancedMenu(); + } + }); + } } function deleteAll() { - E.showPrompt(/*LANG*/"Are you sure?", { - title: /*LANG*/"Delete All" - }).then((confirm) => { - if (confirm) { - alarms = []; - saveAndReload(); - } - - showMainMenu(); - }); + if (alarms.length == 0) { + E.showPrompt(/*LANG*/"Nothing to delete", { title: /*LANG*/"Delete All", buttons: { /*LANG*/"Ok": true } }).then(() => showAdvancedMenu()); + } else { + E.showPrompt(/*LANG*/"Are you sure?", { + title: /*LANG*/"Delete All" + }).then((confirm) => { + if (confirm) { + alarms = []; + saveAndReload(); + showMainMenu(); + } else { + showAdvancedMenu(); + } + }); + } } showMainMenu(); diff --git a/apps/alarm/metadata.json b/apps/alarm/metadata.json index c062b030d..d51e9fa19 100644 --- a/apps/alarm/metadata.json +++ b/apps/alarm/metadata.json @@ -2,7 +2,7 @@ "id": "alarm", "name": "Alarms & Timers", "shortName": "Alarms", - "version": "0.26", + "version": "0.27", "description": "Set alarms and timers on your Bangle", "icon": "app.png", "tags": "tool,alarm,widget", diff --git a/apps/sched/lib.js b/apps/sched/lib.js index fb1a7e4d6..063402e3d 100644 --- a/apps/sched/lib.js +++ b/apps/sched/lib.js @@ -61,12 +61,12 @@ exports.reload = function() { exports.newDefaultAlarm = function () { const settings = exports.getSettings(); - let alarm = { + var alarm = { t: 12 * 3600000, // Default to 12:00 on: true, rp: settings.defaultRepeat, as: settings.defaultAutoSnooze, - dow: 0b1111111, + dow: settings.defaultRepeat ? 0b1111111 : 0b0000000, last: 0, vibrate: settings.defaultAlarmPattern, }; @@ -79,7 +79,7 @@ exports.newDefaultAlarm = function () { exports.newDefaultTimer = function () { const settings = exports.getSettings(); - let timer = { + var timer = { timer: 5 * 60 * 1000, // 5 minutes on: true, rp: false, From dc0c8d7f0cf42bdf63026c08973dd524a4052135 Mon Sep 17 00:00:00 2001 From: Alessandro Cocco Date: Fri, 13 May 2022 12:05:23 +0200 Subject: [PATCH 255/509] [Alarms & Timers] Add screenshots --- apps/alarm/metadata.json | 23 ++++++++++++++++++----- apps/alarm/screenshot-1.png | Bin 0 -> 1752 bytes apps/alarm/screenshot-10.png | Bin 0 -> 1979 bytes apps/alarm/screenshot-11.png | Bin 0 -> 2326 bytes apps/alarm/screenshot-2.png | Bin 0 -> 1451 bytes apps/alarm/screenshot-3.png | Bin 0 -> 2402 bytes apps/alarm/screenshot-4.png | Bin 0 -> 2053 bytes apps/alarm/screenshot-5.png | Bin 0 -> 1948 bytes apps/alarm/screenshot-6.png | Bin 0 -> 2277 bytes apps/alarm/screenshot-7.png | Bin 0 -> 2144 bytes apps/alarm/screenshot-8.png | Bin 0 -> 2360 bytes apps/alarm/screenshot-9.png | Bin 0 -> 2274 bytes 12 files changed, 18 insertions(+), 5 deletions(-) create mode 100644 apps/alarm/screenshot-1.png create mode 100644 apps/alarm/screenshot-10.png create mode 100644 apps/alarm/screenshot-11.png create mode 100644 apps/alarm/screenshot-2.png create mode 100644 apps/alarm/screenshot-3.png create mode 100644 apps/alarm/screenshot-4.png create mode 100644 apps/alarm/screenshot-5.png create mode 100644 apps/alarm/screenshot-6.png create mode 100644 apps/alarm/screenshot-7.png create mode 100644 apps/alarm/screenshot-8.png create mode 100644 apps/alarm/screenshot-9.png diff --git a/apps/alarm/metadata.json b/apps/alarm/metadata.json index d51e9fa19..b9ce55756 100644 --- a/apps/alarm/metadata.json +++ b/apps/alarm/metadata.json @@ -6,12 +6,25 @@ "description": "Set alarms and timers on your Bangle", "icon": "app.png", "tags": "tool,alarm,widget", - "supports": ["BANGLEJS","BANGLEJS2"], + "supports": [ "BANGLEJS", "BANGLEJS2" ], "readme": "README.md", - "dependencies": {"scheduler":"type"}, + "dependencies": { "scheduler":"type" }, "storage": [ - {"name":"alarm.app.js","url":"app.js"}, - {"name":"alarm.img","url":"app-icon.js","evaluate":true}, - {"name":"alarm.wid.js","url":"widget.js"} + { "name": "alarm.app.js", "url": "app.js" }, + { "name": "alarm.img", "url": "app-icon.js", "evaluate": true }, + { "name": "alarm.wid.js", "url": "widget.js" } + ], + "screenshots": [ + { "url": "screenshot-1.png" }, + { "url": "screenshot-2.png" }, + { "url": "screenshot-3.png" }, + { "url": "screenshot-4.png" }, + { "url": "screenshot-5.png" }, + { "url": "screenshot-6.png" }, + { "url": "screenshot-7.png" }, + { "url": "screenshot-8.png" }, + { "url": "screenshot-9.png" }, + { "url": "screenshot-10.png" }, + { "url": "screenshot-11.png" } ] } diff --git a/apps/alarm/screenshot-1.png b/apps/alarm/screenshot-1.png new file mode 100644 index 0000000000000000000000000000000000000000..d2bd3a409955c711e18d5e3f093ab488df21a64a GIT binary patch literal 1752 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 literal 0 HcmV?d00001 diff --git a/apps/alarm/screenshot-11.png b/apps/alarm/screenshot-11.png new file mode 100644 index 0000000000000000000000000000000000000000..197c8419449afd37afa1482a31903d8975e2afd5 GIT binary patch literal 2326 zcmZvedpHw}7suV3HLTa%!fd2Ql)IS3$o=PD$#RKYD|=nCScI&Z+bEP~6w4*%-NPvZfCLKu4NFN!KI%^0NG=vJ% zGNs_hl$R*cwP!)x%uUsJb67xvxX4R2c~;sfi?6;QsCvtKUlS81sIZV=9=UHvOt}ib zMJN#V&~+U+c0O9}o6DH-$81yw%;!q{<^x&b_UMDf8*>>OFC&y=XCK*G(F9{0wZwA2 zqB4mxyTckrq^O7cMDz_}0#e#;eg?lY0acmjn4k_oT8#bptfCkmhgUNH2t^IIlEOK< zn|xfW$jQ4O7*UBBdZe~Tgho7!Rk`96BW1pzh-Tm4dF=aGGn#MnSmcES1TMf7HtS9E$Xp5%BpZF z1m{)?YQXeKFxG12CR+h;?_@Zs=;(JfVO_?aE3#o(#CWIkY2t>2O65Y`K3#uJlh2)U8=ey; zClrm+w4`z;iB06&UG_(Ci5Q$%LH!lUefIB`>sBwjK*8X~<@yZ2LZRo1@}cAAS=z11 z#wYeoD7~`#4wgfcJFfsbZ6DM!o^znrwugQtrTR5O-d=(@+=z;jJw}~|5Kwf-831G{&waAD@Lnh z&w=d~^_@|xRyoZGp*R zg;#ZqT!!8sT**+7CQ9O6>j+@fk~DUEtjLTyQoo(kd>cxcwo`A7T(!GgyukJe_DOV< zCmHNb8>oXT?VzpdFVwjm$6eH3md5zS+pyCo-q!vge^Bgq58tvuCvJuw8(dT>#pdO9 z9=yHYl~h8NX2gCU7_I#=o?t$;QnIs^wzk%(RLZSrx=?~L>+4gYcw9#=S(UC?c+Sf@ zz6E^FjqR}lElqb1VM)Bi@WxX?QqG*_)9^Y5acqZJU~|J#j#Nf2tkPoIX&9p&6(aK@ zdpFeFKtUrg0^bZovK$I0MOrO(_m!~r@_IayaV z^?jcEAwzh}8`EZvb2L%>Rk*$aXqV!e|D{e*pdi8(;Dr#$N&b^I0CvN$++Y7b7$)5P zR|-f(PaKj2aT`_L^y020kj zS)r%CZQ~8C`<8*L<5lA-8_`T|n8rFHHSYpFLzgb91*H}v#FK}Hv4>O1U}6yP)Ax!f zZ)3Imsuj`@rfd)UP-L6;!YJhVnZ~K(z&9R3Li0WYT>Gm!q)TA$IJ0myYtuVSXa&UOHv!_Zv z+wOZ){X;K@?J}7Ze|~H7)jTFL3d1NSLpjCmtq$CA5}tplrkSQKH|TNsizP{q|?Z}0n_~Q{7d}S0;J32#Ww7MUIAMI(SD1$*Z{$8RzphfUD45K56QOFRO>aR zI!%Shl*&iPhE^ox!QUWlT+QgsR2B<8_vD^WkmCG3P%EXdEy!Pe-1watPG=-QNT@}) z#zUMu_B+q~3tnM-5*{U>P@^kK7Q_oEcol&EXAe;T4(Q7+^c66@(AffRA@+X*0Kj&4 zcxTcIMehecoyreN6!1gPXzLy zZNnAi-;Okf_V)qZf@dFP6;*;|F|1ietagGt(gt^(Ngw^k<1A)$YbYqDKal7BLnk(K zZJX<_vG)Bl@SC!dgZk?-vbIN$sk}_-SnaU|*y?OP&@IyhX%O|=5BV_6vfH!FJ@|>w zYg!E5$AjUpZd90ccM~l(QgyAY!!$n$wWBkDmcux;4nX}W4mwhQK>7_9A)*BldgY&` z!2#{M`O~^on6RLrUXIn%U>HF_;VvPmH%163sQ2610k9PnyA=y_MOE)>yZ?@W{Yhu* JT9kjve*rl9J~{vZ literal 0 HcmV?d00001 diff --git a/apps/alarm/screenshot-2.png b/apps/alarm/screenshot-2.png new file mode 100644 index 0000000000000000000000000000000000000000..1cbc255a92c2d568765feb3cbf104f10a33d013b GIT binary patch literal 1451 zcmcgseKgYx7@oB;%KS*0w&}NZTU~A+B+YP5TU}1_)!fQ=Tj%DME-q^=6x%W@A4Mu+ zP9<9TNMfWR8%aVDbr)l*Rld&VW{KHVf8EZxf8Rge_dVzN=Xu`eJnt*;^ZCWpWR(d7 z0x|XSqy{X`J6{U{UF_hCIAaI|{-+n!gLb@NqVU<>>mWe2uhHwDOmYQRQ_lOtwrUIb zq6^T;)LN{dtMDBgDfixkz|pQeER6M4(yV0970_5$4khQZF+IWZQCg4L6nkj1ppv^} z;^;D!|Ey9@P}fvVHOKT^d3(XB>GM0U#1>C^xVP(2k;!#JgJU}fl49iVX)eEH& z7K4`wTJaTe^}C8XU2jq^uK$nMej&WKFqi(+?430~*Mdsn@n+_m{Fh17c||X0c&j*M zQx?8o*2o;)w;Z{Z2b8q53$L%J+}D#c&)YO^r*xO7@*0)_C2XNxX@e>|#VwwY$HNj1 zDEusgS0T-{2kur9y3jM_WEor9zgBfN=`ne^7VO4L^4qID`2?r9v_uefmg!q1UH4T$ zQBhNH2}X}aZ3pX6Us0smv!3>}rh=E6PGDu#J zpyL;+P|_Algc4x+*{OqynsMZ2TpAJfau}dupiwahr9b~>BQGzCcRP}8_-qVNFgmB_ zXQzLfQU$ro-9`Z;*=gpnnNOPc?Xy-+W{-w=R?=h6yqax_MmJ<^F@;Bwd?8WQvpV`5 zokMq9$TALejVUU zXmxrthGj*B(Y`kgk2G*1!p!*)^kHvvI0g#qu;48E4e~*gHvo7C>0$XFMxW$Iip&f~ zKZKP!R8F3Iz+GXHYrZLCDRzw37Io8%UuQh1n20|?{uH`f>B&d%PZW*dXE`KZ8S**4IiGSK#fVpu z=D3!`Vj@eFL}j8d(q4S){r-Bd?~mtsuIqlD=b!s}?)!RfJ3C^fB@Rh|Kp<&5Ta1ga zHvb9;SeRAEL&ZTLaikr_$~Cg&Yw2{$eN`!HMd-|KuBpPGwyNT@SnJK7ItCfw%0%CC zTr8ybOXNyP=&+9`c_{sJRC3Ce#(U*V&$G#qIL6EPC$6iJ+@)!)N$Pc}CD&CySmH+_0EH_9{A8Z8K!NGXd777%Xbmli5jkUEmh zf*v*_sQ=q>KXvQENX7TP+8_xZwRE+^JQV8CfvPlY$jqf{TuB4(9V$B(PJkN*7Emxh zS+0S>et|vy0A5cTx^U=wl`>DOF4q{UY)>Xt|< zjRz%zL}&LFhQDgf+mht+*~7>gh4yM6B&E+HKaL_r@M!dX`LO!l#>54??y32^KL$K? z`5i07Px)(a?_cqX_IZCUe{J$>SLu;6QawLa1S7tCpwDBuPLjEX!<&AQZC&w0vati6-(Mpg|jO1%Bi)1m1R-MG&3)uPVh!w0wmhCxY3yvFxyy>}9D zL9n0{tB2_tnp{e4%aI6O@-!h2f-8!yvtt-IE-LQ z2C#2S%qG6%<+Mo`p^#SIj$TA{GpJgbjcdv~P61qWQ$X*EGL1kzDjuxVN&N(z}_f*u!kA;di37v=Ga;5=afdNLyTFt8B+=gJ4JajcR_;jz&QAg{Y` zd^h8D%b{_pJ1Q}-ZfA$LI&{{G?qiFwW-VrL>!TIAGT&fBvT+Wj6K-^GuTyU*u5P90 zW5+_EpVdGw=_Oe_%n0j>SE4T$Ntgty!TR58?x)d znNAmXzuaVMSdYP=>i!CW)%I9)r+-FdFH zC&Fnb14;)^`(7u}T4n-CtHUl(=gF|r!RT&{8ipb9fwdO@+#^cq;Ny2D`4!4U+A7kX zPV3mH?k8WU1-wizq;ok%JXedpiR`nm)8pA=H~tFiGt2#?#k5TD^WCVvuzNzsISj(j zV*ijZh@$tQZttEKj6Do49i$N%J1?4+tHZU(ySn}2RcV*&_0Id5(A^*m)12#l6yITHSA%FJv!rC!%YxDS!EP;@7rA{l?nEz2IXqX_m!(F(uc}Q zXv*?bMMT76ds+@^Mf`z_%b@EQ$+DJW;`Zb9s(y)V-tUC;uBd!OVyxO~)3B?16OcV? z>qUZ3>VwUXJU_d7G%&n$5KFAt?RaO@azcc%p5~x}n^!^dvORy3s|t)r_vbM=uY6kT z_KhxO^k?r*!k#fF?*V+}5@Xa1?)l5lZHvtvzBZTF-*Br=yk@g)k6`DFX%jcD2FL8u zxi^T*S(c{J#(%tR*<*G!Cto%0!N+O&`>pcE6TjiB=%b5tHh zcglfgXNc-8qgqdKXNYA_OXA;d&jgx9nZj#{f)Fd^gn0blRy7nSz?`FXDkkHFzZ1yL L+7UxXdnWuB4r*zu literal 0 HcmV?d00001 diff --git a/apps/alarm/screenshot-4.png b/apps/alarm/screenshot-4.png new file mode 100644 index 0000000000000000000000000000000000000000..7fd7e99b65434752c2a7886124ee704c2ce3b8f1 GIT binary patch literal 2053 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 T$r{bO?_J0eXJcMvcJ20G*^k@2 literal 0 HcmV?d00001 diff --git a/apps/alarm/screenshot-5.png b/apps/alarm/screenshot-5.png new file mode 100644 index 0000000000000000000000000000000000000000..4174c5670eb9800beb19a71ca3e1acc8f58132a6 GIT binary patch literal 1948 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 literal 0 HcmV?d00001 diff --git a/apps/alarm/screenshot-7.png b/apps/alarm/screenshot-7.png new file mode 100644 index 0000000000000000000000000000000000000000..49da44710d70b2d5882b399dffade0827a9ed76e GIT binary patch literal 2144 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 Ug0Ds8;B(+HH?cy|khjAA0;8-7=l}o! literal 0 HcmV?d00001 diff --git a/apps/alarm/screenshot-8.png b/apps/alarm/screenshot-8.png new file mode 100644 index 0000000000000000000000000000000000000000..86d69cd93ca3141b1b3c47cab200e5a4bcfc129a GIT binary patch literal 2360 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 literal 0 HcmV?d00001 diff --git a/apps/alarm/screenshot-9.png b/apps/alarm/screenshot-9.png new file mode 100644 index 0000000000000000000000000000000000000000..2d8c7fc83045f4ce09531eec84c155eb314406e6 GIT binary patch literal 2274 zcmV<82p#u{P)V{QoaA4|X8|62cv=vmdgm1p_D?kk(k|oRP8C7-Ndrz{#j@qRn@R>wFG$ zjz`dR6O#@hdr^1<^U#j-j+^*tbX1!ejH7Vj`)=Y#NNaEhW^)Z`_QH4H#838UvpcW= zwoi<>i60>wIF^D=bnq!ScCNgJfk;flTJ_aU^Kthsd;EL4s1W`%JWyz^k@kt|htG6i^EZ^~5aGHALzNtc81~sL+WhQ|X-VzrTBKIrL){*2cr0T>B9>5lMCWy^p`g0;x#kx+zyf6Cu^;>k6*Y%^?ygBE+$SH z*-?A_$&Isz@}@?q6hhO~cZ?4(eGQS~yAC(;hsWhPJ4*F`Mw66W0ilL%WZe#I^;A?H zV%O*wuH7|fS6$`kTz@3I2hO?v1%Xgu&FRHfH&;xP{Zn zA;3JasGP!cpEx!wD)smoJ)5+?K1#AvmA;GYZS~QMO0MXWH-d)jnQmZ-jcWC94qcl4ATy+^0jwba0UhE94v`0Q_{P**IeDuMYY0HVlmQ6n5P*OV z0SK86VPSvFhG0<%2t*-H=&i7Obpi?j2v7)ECwbN>9%S}8!&L9h@*eJ+ z?a${uaIKJA_jIeo-w`AFsZ$95XF4d0qq9Flv3gJlj#Q_|D1`ay1lL35bLBi551LT| zg^0NCSNMGxc%Qu+7_Jz3Z7`yrCn>}b5AU;tOGLk^Qd9!Q&p3rhb{(u?cP#WC!n4wS3w<4g z`aj)9+}B5Z9A)ov!#;$NqzuMT}5e0uZoPSgH0Aze6iZLq-mEro?fpBxcMYL0Zr(EGHERg&d8#UA#^yCd z?HnnW+g693x}9L}CM=6n*)W$!$MybeJs9S9n};V_!kRdh#qkt9@n`xk6NA#P68vhR z)`PE4TOGo6%tLL&eFf&lsf@}q%nZ~PK~heQ%4#d3wv=ZvcBhg&c3SiI1Sr_cQ$E$X z>~SNWE2mbJ-du;TW)w?5)3(9+!5dTWdCI6_*i**K?EO%>yC%&RaVp!XdLsW#eoGf%&(q*nCJt@eaEG}`rXDxnZ3v*F9Fp46v|&J*g;Q}bFDDMZ>^v$1AUe1w;5lI)@C z^YCIG%_r(dg`qiDA?}M3#CIa`7!)y}ggBLX58;fM^RLMhwj%wyE2;x`HRP+bT_Mtz z=IcL7Ar{1d>W^gAJibp3RHadfRKlk#1eeD!zgK$Dv_(EwUxxz~!qvp7RK=KzQmwUV zD(As4zgKz?+LABjify;OuV zCL28?tu0%JU@0KfLGZ9wA+9T6X)E$0gz;0ehWM_}z0LN!vLEKSoZ2%_YdrMVp{;KH z_AYu^oXR`HcX&Exq-y$dxsUT_X-aAH&|inPx{XzcMR6*>K3se}>=UI(l<|H*>R&8f z@Nmbt^uH=S6kAd7Ag Date: Fri, 13 May 2022 15:04:46 +0200 Subject: [PATCH 256/509] [Alarms & Timers] Update README --- apps/alarm/README.md | 32 ++++++++++++++++++++++++++++---- 1 file changed, 28 insertions(+), 4 deletions(-) diff --git a/apps/alarm/README.md b/apps/alarm/README.md index e979dbaf1..741946b0c 100644 --- a/apps/alarm/README.md +++ b/apps/alarm/README.md @@ -1,7 +1,31 @@ -Alarms & Timers -=============== +# Alarms & Timers This app allows you to add/modify any alarms and timers. -It uses the [`sched` library](https://github.com/espruino/BangleApps/blob/master/apps/sched) -to handle the alarm scheduling in an efficient way that can work alongside other apps. +It uses the [`sched` library](https://github.com/espruino/BangleApps/blob/master/apps/sched) to handle the alarm scheduling in an efficient way that can work alongside other apps. + +## Menu overview + +- `New...` + - `New Alarm` → Configure a new alarm + - `Repeat` → Select when the alarm will fire. You can select a predefined option (_Once_, _Every Day_, _Workdays_ or _Weekends_ or you can configure the days freely) + - `New Timer` → Configure a new timer +- `Advanced` + - `Scheduler settings` → Open the [Scheduler](https://github.com/espruino/BangleApps/tree/master/apps/sched) settings page, see its [README](https://github.com/espruino/BangleApps/blob/master/apps/sched/README.md) for details + - `Enable All` → Enable _all_ disabled alarms & timers + - `Disable All` → Disable _all_ enabled alarms & timers + - `Delete All` → Delete _all_ alarms & timers + +## Creator + +- [Gordon Williams](https://github.com/gfwilliams) + +## Main Contributors + +- [Alessandro Cocco](https://github.com/alessandrococco) - New UI, full rewrite, new features +- [Sabin Iacob](https://github.com/m0n5t3r) - Auto snooze support +- [storm64](https://github.com/storm64) - Fix redrawing in submenus + +## Attributions + +All icons used in this app are from [icons8](https://icons8.com). From 229d0dc1580b423385a1a82c809233094dcee889 Mon Sep 17 00:00:00 2001 From: kirktrekkie Date: Sat, 14 May 2022 10:05:42 +0200 Subject: [PATCH 257/509] Adding Dice-n-Roll app. --- apps/diceroll/ChangeLog | 1 + apps/diceroll/app-icon.js | 1 + apps/diceroll/app.js | 108 ++++++++++++++++++++++++++ apps/diceroll/app.png | Bin 0 -> 637 bytes apps/diceroll/diceroll_screenshot.png | Bin 0 -> 2408 bytes apps/diceroll/metadata.json | 14 ++++ 6 files changed, 124 insertions(+) create mode 100644 apps/diceroll/ChangeLog create mode 100644 apps/diceroll/app-icon.js create mode 100644 apps/diceroll/app.js create mode 100644 apps/diceroll/app.png create mode 100644 apps/diceroll/diceroll_screenshot.png create mode 100644 apps/diceroll/metadata.json diff --git a/apps/diceroll/ChangeLog b/apps/diceroll/ChangeLog new file mode 100644 index 000000000..89dff4011 --- /dev/null +++ b/apps/diceroll/ChangeLog @@ -0,0 +1 @@ +0.01: App created \ No newline at end of file diff --git a/apps/diceroll/app-icon.js b/apps/diceroll/app-icon.js new file mode 100644 index 000000000..4d6e7da16 --- /dev/null +++ b/apps/diceroll/app-icon.js @@ -0,0 +1 @@ +E.toArrayBuffer(atob("ICABAAAAAAAAAAAAAAAAAAHAAAAP8AAAfn4AA/APwA+DwfAPg8HwD+AH8Az4HzAMPnwwDAfgMAwBgDAMCYAwDA2YMAwhmDAMIZAwDCGDMA2BgzAMgYAwDAGAMA8BgPADwYPAAPGPgAB9ngAAH/gAAAfgAAABgAAAAAAAAAAAAAAAAAA=")) diff --git a/apps/diceroll/app.js b/apps/diceroll/app.js new file mode 100644 index 000000000..d514ce92f --- /dev/null +++ b/apps/diceroll/app.js @@ -0,0 +1,108 @@ +var init_message = true; +var acc_data; +var die_roll = 1; +var selected_die = 0; +var roll = 0; +const dices = [4, 6, 10, 12, 20]; + +g.setFontAlign(0,0); + +Bangle.on('touch', function(button, xy) { + // Change die if not rolling + if(roll < 1){ + if(selected_die <= 3){ + selected_die++; + }else{ + selected_die = 0; + } + } + //Disable initial message + init_message = false; +}); + +function rect(){ + x1 = g.getWidth()/2 - 35; + x2 = g.getWidth()/2 + 35; + y1 = g.getHeight()/2 - 35; + y2 = g.getHeight()/2 + 35; + g.drawRect(x1, y1, x2, y2); +} + +function pentagon(){ + x1 = g.getWidth()/2; + y1 = g.getHeight()/2 - 50; + x2 = g.getWidth()/2 - 50; + y2 = g.getHeight()/2 - 10; + x3 = g.getWidth()/2 - 30; + y3 = g.getHeight()/2 + 30; + x4 = g.getWidth()/2 + 30; + y4 = g.getHeight()/2 + 30; + x5 = g.getWidth()/2 + 50; + y5 = g.getHeight()/2 - 10; + g.drawPoly([x1, y1, x2, y2, x3, y3, x4, y4, x5, y5], true); +} + +function triangle(){ + x1 = g.getWidth()/2; + y1 = g.getHeight()/2 - 57; + x2 = g.getWidth()/2 - 50; + y2 = g.getHeight()/2 + 23; + x3 = g.getWidth()/2 + 50; + y3 = g.getHeight()/2 + 23; + g.drawPoly([x1, y1, x2, y2, x3, y3], true); +} + +function drawDie(variant) { + if(variant == 1){ + //Rect, 6 + rect(); + }else if(variant == 3){ + //Pentagon, 12 + pentagon(); + }else{ + //Triangle, 4, 10, 20 + triangle(); + } +} + +function initMessage(){ + g.setFont("6x8", 2); + g.drawString("Dice-n-Roll", g.getWidth()/2, 20); + g.drawString("Shake to roll", g.getWidth()/2, 60); + g.drawString("Tap to change", g.getWidth()/2, 80); + g.drawString("Tap to start", g.getWidth()/2, 150); +} + +function rollDie(){ + acc_data = Bangle.getAccel(); + if(acc_data.diff > 0.3){ + roll = 3; + } + //Mange the die "roll" by chaning the number a few times + if(roll > 0){ + g.drawString("Rolling!", g.getWidth()/2, 150); + die_roll = Math.abs(E.hwRand()) % dices[selected_die] + 1; + roll--; + } + //Draw dice graphics + drawDie(selected_die); + //Draw dice number + g.setFontAlign(0,0); + g.setFont("Vector", 45); + g.drawString(die_roll, g.getWidth()/2, g.getHeight()/2); + //Draw selected die in right corner + g.setFont("6x8", 2); + g.drawString(dices[selected_die], g.getWidth()-15, 15); +} + +function main() { + g.clear(); + if(init_message){ + initMessage(); + }else{ + rollDie(); + } + Bangle.setLCDPower(1); +} + +var interval = setInterval(main, 300); \ No newline at end of file diff --git a/apps/diceroll/app.png b/apps/diceroll/app.png new file mode 100644 index 0000000000000000000000000000000000000000..b695b7080ae9fb84e30140aa653c221fc2c7aecd GIT binary patch literal 637 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 LA>Lvy%K3i-A)as# literal 0 HcmV?d00001 diff --git a/apps/diceroll/metadata.json b/apps/diceroll/metadata.json new file mode 100644 index 000000000..81a2f8bfd --- /dev/null +++ b/apps/diceroll/metadata.json @@ -0,0 +1,14 @@ +{ "id": "diceroll", + "name": "Dice-n-Roll", + "shortName":"Dice-n-Roll", + "icon": "app.png", + "version":"0.01", + "description": "A dice app with a few different dice.", + "screenshots": [{"url":"diceroll_screenshot.png"}], + "tags": "game", + "supports": ["BANGLEJS2"], + "storage": [ + {"name":"diceroll.app.js","url":"app.js"}, + {"name":"diceroll.img","url":"app-icon.js","evaluate":true} + ] + } \ No newline at end of file From 71ebe9bca52239b4e8a1820c9c59d12f3909bcc1 Mon Sep 17 00:00:00 2001 From: Iakov Davydov Date: Sat, 14 May 2022 10:38:37 +0200 Subject: [PATCH 258/509] widbt: option to hide when no connection --- apps/widbt/ChangeLog | 1 + apps/widbt/app-icon.js | 1 + apps/widbt/metadata.json | 9 ++++++--- apps/widbt/settings.js | 22 ++++++++++++++++++++++ apps/widbt/widget.js | 24 ++++++++++++++++++++---- 5 files changed, 50 insertions(+), 7 deletions(-) create mode 100644 apps/widbt/app-icon.js create mode 100644 apps/widbt/settings.js diff --git a/apps/widbt/ChangeLog b/apps/widbt/ChangeLog index 4c2132122..55bdf4730 100644 --- a/apps/widbt/ChangeLog +++ b/apps/widbt/ChangeLog @@ -5,3 +5,4 @@ 0.06: Tweaking colors for dark/light themes and low bpp screens 0.07: Memory usage improvements 0.08: Disable LCD on, on bluetooth status change +0.09: Hide widget when disconnected (a setting) diff --git a/apps/widbt/app-icon.js b/apps/widbt/app-icon.js new file mode 100644 index 000000000..131db3a39 --- /dev/null +++ b/apps/widbt/app-icon.js @@ -0,0 +1 @@ +require("heatshrink").decompress(atob("mEwwMB/4AG/YFE/IFE/AFFv4FEn4FEj4FEg4FEgYFEHIn4oAFEsAqD/FwFQXx/F4h4FB+H4vgwC+F4vARC/E4uAdC/kYsAiC/0IoIvDgBBEwBNE4AuCAAPgL4nwNYgFFCIodFFIo1EIIpNFLIplF8BxEPoQFC/aJESo6hFVoq5FYorRFborpFeon5Aon7AogADA=")) diff --git a/apps/widbt/metadata.json b/apps/widbt/metadata.json index e2d5082a5..098d6a37e 100644 --- a/apps/widbt/metadata.json +++ b/apps/widbt/metadata.json @@ -1,13 +1,16 @@ { "id": "widbt", "name": "Bluetooth Widget", - "version": "0.08", + "version": "0.09", "description": "Show the current Bluetooth connection status in the top right of the clock", "icon": "widget.png", "type": "widget", "tags": "widget,bluetooth", "supports": ["BANGLEJS","BANGLEJS2"], "storage": [ - {"name":"widbt.wid.js","url":"widget.js"} - ] + {"name":"widbt.wid.js","url":"widget.js"}, + {"name":"widbt.settings.js","url":"settings.js"}, + {"name":"widbt.img","url":"app-icon.js","evaluate":true} + ], + "data": [{"name":"widbt.json"}] } diff --git a/apps/widbt/settings.js b/apps/widbt/settings.js new file mode 100644 index 000000000..0400a2eec --- /dev/null +++ b/apps/widbt/settings.js @@ -0,0 +1,22 @@ +(function(back) { + var FILE = "widbt.json"; + var settings = require('Storage').readJSON(FILE, true) || {}; + + function writeSettings() { + require('Storage').writeJSON(FILE, settings); + } + + E.showMenu({ + "" : { "title" : "Bluetooth Widget" }, + "< Back" : () => back(), + 'No conn. widget': { + value: !!settings.hideDisconnected, + format: v => v?"Hide":"Show", + onchange: v => { + settings.hideDisconnected = v; + writeSettings(); + if (WIDGETS.bluetooth) WIDGETS.bluetooth.changed(); + } + }, + }); +}) diff --git a/apps/widbt/widget.js b/apps/widbt/widget.js index c7ef8c0ad..24779c29d 100644 --- a/apps/widbt/widget.js +++ b/apps/widbt/widget.js @@ -1,12 +1,28 @@ -WIDGETS["bluetooth"]={area:"tr",width:15,draw:function() { +WIDGETS["bluetooth"]={area:"tr",draw:function() { + if (WIDGETS.bluetooth.width==0) + return; g.reset(); if (NRF.getSecurityStatus().connected) g.setColor((g.getBPP()>8) ? "#07f" : (g.theme.dark ? "#0ff" : "#00f")); else g.setColor(g.theme.dark ? "#666" : "#999"); g.drawImage(atob("CxQBBgDgFgJgR4jZMawfAcA4D4NYybEYIwTAsBwDAA=="),2+this.x,2+this.y); +},getWidth:function(){ + if (!NRF.getSecurityStatus().connected) { + const settings = require('Storage').readJSON("widbt.json", true) || {}; + if (settings.hideDisconnected) + return 0; + } + return 15; },changed:function() { - WIDGETS["bluetooth"].draw(); + const newWidth = WIDGETS.bluetooth.getWidth(); + if (WIDGETS.bluetooth.width != newWidth) { + WIDGETS.bluetooth.width = newWidth; + Bangle.drawWidgets(); + } else { + WIDGETS.bluetooth.draw(); + } }}; -NRF.on('connect',WIDGETS["bluetooth"].changed); -NRF.on('disconnect',WIDGETS["bluetooth"].changed); +WIDGETS.bluetooth.width = WIDGETS.bluetooth.getWidth(); +NRF.on('connect',WIDGETS.bluetooth.changed); +NRF.on('disconnect',WIDGETS.bluetooth.changed); From 6c88688a5011b76f278e2509091dcb8b550aca2a Mon Sep 17 00:00:00 2001 From: frigis1 <63980066+frigis1@users.noreply.github.com> Date: Sat, 14 May 2022 11:23:22 -0700 Subject: [PATCH 259/509] Create app.js --- apps/multitimer/app.js | 660 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 660 insertions(+) create mode 100644 apps/multitimer/app.js diff --git a/apps/multitimer/app.js b/apps/multitimer/app.js new file mode 100644 index 000000000..caf2637f0 --- /dev/null +++ b/apps/multitimer/app.js @@ -0,0 +1,660 @@ +Bangle.loadWidgets(); +Bangle.drawWidgets(); + +var R = Bangle.appRect; +var layer; +var drag; +var timerInt1 = []; +var timerInt2 = []; + +function getCurrentTime() { + let time = new Date(); + return ( + time.getHours() * 3600000 + + time.getMinutes() * 60000 + + time.getSeconds() * 1000 + ); +} + +function decodeTime(t) { + let hrs = 0 | Math.floor(t / 3600000 % 24); + let mins = 0 | Math.floor(t / 60000 % 60); + let secs = 0 | Math.floor(t / 1000 % 60); + return { hrs: hrs, mins: mins, secs: secs }; +} + +function encodeTime(o) { + return o.hrs * 3600000 + o.mins * 60000 + o.secs * 1000; +} + +function formatTime(t) { + let o = decodeTime(t); + return o.hrs + ":" + ("0" + o.mins).substr(-2) + ":" + ("0" + o.secs).substr(-2); +} + +function decodeTimeDecis(t) { + let hrs = 0 | Math.floor(t / 3600000 % 24); + let mins = 0 | Math.floor(t / 60000 % 60); + let secs = 0 | Math.floor(t / 1000 % 60); + let decis = 0 | Math.floor(t / 100 % 100); + return { hrs: hrs, mins: mins, secs: secs, decis: decis }; +} + +function formatTimeDecis(t) { + let o = decodeTimeDecis(t); + return o.hrs + ":" + ("0" + o.mins).substr(-2) + ":" + ("0" + o.secs).substr(-2) + "." + ("0" + o.decis).substr(-1); +} + +function clearInt() { + for (let i = 0; i < timerInt1.length; i++) { + if (timerInt1[i]) clearTimeout(timerInt1[i]); + } + for (let i = 0; i < timerInt2.length; i++) { + if (timerInt2[i]) clearInterval(timerInt2[i]); + } + timerInt1 = []; + timerInt2 = []; +} + +function drawTimers() { + layer = 0; + var timers = require("sched").getAlarms().filter(a => a.timer && a.appid == "multitimer"); + var alarms = require("sched").getAlarms(); + + function updateTimers(idx) { + if (!timerInt1[idx]) timerInt1[idx] = setTimeout(function() { + s.drawItem(idx+1); + if (!timerInt2[idx]) timerInt2[idx] = setInterval(function(){ + s.drawItem(idx+1); + }, 1000); + }, 1000 - (timers[idx].t % 1000)); + } + + var s = E.showScroller({ + h : 40, c : timers.length+2, + back : function() {load();}, + draw : (idx, r) => { + function drawMenuItem(a) { + g.setClipRect(R.x,R.y,R.x2,R.y2); + if (idx > 0 && timers[idx-1].msg) msg = "\n"+(timers[idx-1].msg.length > 10 ? + timers[idx-1].msg.substring(0, 10)+"..." : timers[idx-1].msg); + else msg = ""; + return g.setColor(g.theme.bg2).fillRect({x:r.x+4,y:r.y+2,w:r.w-8, h:r.h-4, r:5}) + .setColor(g.theme.fg2).setFont("6x8:2").setFontAlign(-1,0).drawString(a+msg,r.x+12,r.y+(r.h/2)); + } + + if (idx == 0) { + drawMenuItem("+ New Timer"); + } + if (idx == timers.length+1) { + g.setColor(g.theme.bg).fillRect({x:r.x+4,y:r.y+2,w:r.w-8, h:r.h-4, r:5}) + .setColor(g.theme.fg).setFont("6x8:2").setFontAlign(0,0).drawString("< Swipe >",r.x+(r.w/2),r.y+(r.h/2)); + } + else if (idx > 0 && idx < timers.length+1) { + if (timers[idx-1].on == true) { + drawMenuItem(formatTime(timers[idx-1].t-getCurrentTime())); + updateTimers(idx-1); + } + else drawMenuItem(formatTime(timers[idx-1].timer)); + } + }, + select : (idx) => { + clearInt(); + if (idx == 0) editTimer(-1); + else if (idx > 0 && idx < timers.length+1) timerMenu(idx-1); + } + }); +} + +function timerMenu(idx) { + layer = -1; + var timers = require("sched").getAlarms(); + var timerIdx = []; + var j = 0; + for (let i = 0; i < timers.length; i++) { + if (timers[i].timer && timers[i].appid == "multitimer") { + a = i; + timerIdx.push(a); + j++; + } + } + var a = timers[timerIdx[idx]]; + var msg = ""; + + function updateTimer() { + if (timerInt1[0] == undefined) timerInt1[0] = setTimeout(function() { + s.drawItem(0); + if (timerInt2[0] == undefined) timerInt2[0] = setInterval(function(){ + s.drawItem(0); + }, 1000); + }, 1000 - (a.t % 1000)); + } + + var s = E.showScroller({ + h : 40, c : 5, + back : function() { + clearInt(); + drawTimers(); + }, + draw : (i, r) => { + + function drawMenuItem(b) { + return g.setClipRect(R.x,R.y,R.x2,R.y2).setColor(g.theme.bg2) + .fillRect({x:r.x+4,y:r.y+2,w:r.w-8, h:r.h-4, r:5}) + .setColor(g.theme.fg2).setFont("6x8:2").setFontAlign(-1,0).drawString(b,r.x+12,r.y+(r.h/2)); + } + + if (i == 0) { + if (a.msg) msg = "\n"+(a.msg.length > 10 ? a.msg.substring(0, 10)+"..." : a.msg); + if (a.on == true) { + drawMenuItem(formatTime(a.t-getCurrentTime())+msg); + updateTimer(); + } + else { + clearInt(); + drawMenuItem(formatTime(a.timer)+msg); + } + } + if (i == 1) { + if (a.on == true) drawMenuItem("Pause"); + else drawMenuItem("Start"); + } + if (i == 2) drawMenuItem("Reset"); + if (i == 3) drawMenuItem("Edit"); + if (i == 4) drawMenuItem("Delete"); + }, + select : (i) => { + + function saveAndReload() { + require("sched").setAlarms(timers); + require("sched").reload(); + s.draw(); + } + + //pause/start + if (i == 1) { + if (a.on == true) { + clearInt(); + a.timer = a.t-getCurrentTime(); + a.on = false; + timers[timerIdx[idx]] = a; + saveAndReload(); + } + else { + a.t = a.timer+getCurrentTime(); + a.on = true; + timers[timerIdx[idx]] = a; + saveAndReload(); + } + } + //reset + if (i == 2) { + clearInt(); + a.timer = a.data; + if (a.on == true) a.on = false; + saveAndReload(); + } + //edit + if (i == 3) { + clearInt(); + editTimer(idx); + } + //delete + if (i == 4) { + clearInt(); + timers.splice(timerIdx[idx], 1); + saveAndReload(); + drawTimers(); + } + } + }); +} + +function editTimer(idx, a) { + layer = -1; + var timers = require("sched").getAlarms().filter(a => a.timer && a.appid == "multitimer"); + var alarms = require("sched").getAlarms(); + var timerIdx = []; + var j = 0; + for (let i = 0; i < alarms.length; i++) { + if (alarms[i].timer && alarms[i].appid == "multitimer") { + b = i; + timerIdx.push(b); + j++; + } + } + if (!a) { + if (idx < 0) a = require("sched").newDefaultTimer(); + else a = timers[idx]; + } + var t = decodeTime(a.timer); + + function editMsg(idx, a) { + g.clear(); + idx < 0 ? msg = "" : msg = a.msg; + require("textinput").input({text:msg}).then(result => { + if (result != "") { + a.msg = result; + } + else delete a.msg; + editTimer(idx, a); + }); + } + + function kbAlert() { + E.showAlert("Must install keyboard app").then(function() { + editTimer(idx, a); + }); + } + + var menu = { + "": { "title": "Timer" }, + "< Back": () => { + a.t = getCurrentTime() + a.timer; + a.last = 0; + a.data = a.timer; + a.appid = "multitimer"; + a.js = "load('multitimer.alarm.js')"; + if (idx < 0) alarms.push(a); + else alarms[timerIdx[idx]] = a; + require("sched").setAlarms(alarms); + require("sched").reload(); + drawTimers(); + }, + "Enabled": { + value: a.on, + format: v => v ? "On" : "Off", + onchange: v => a.on = v + }, + "Hours": { + value: t.hrs, min: 0, max: 23, wrap: true, + onchange: v => { + t.hrs = v; + a.timer = encodeTime(t); + } + }, + "Minutes": { + value: t.mins, min: 0, max: 59, wrap: true, + onchange: v => { + t.mins = v; + a.timer = encodeTime(t); + } + }, + "Seconds": { + value: t.secs, min: 0, max: 59, wrap: true, + onchange: v => { + t.secs = v; + a.timer = encodeTime(t); + } + }, + "Vibrate": require("buzz_menu").pattern(a.vibrate, v => a.vibrate = v), + "Msg": { + value: !a.msg ? "" : a.msg.length > 6 ? a.msg.substring(0, 6)+"..." : a.msg, + //menu glitch? setTimeout required here + onchange: () => { + var kbapp = require("Storage").read("textinput"); + if (kbapp != undefined) setTimeout(editMsg, 0, idx, a); + else setTimeout(kbAlert, 0); + } + }, + "Cancel": () => { + if (idx >= 0) timerMenu(idx); + else drawTimers(); + }, + }; + + E.showMenu(menu); +} + +function drawSw() { + layer = 1; + var sw = require("Storage").readJSON("multitimer.json", true) || []; + + function updateTimers(idx) { + if (!timerInt1[idx]) timerInt1[idx] = setTimeout(function() { + s.drawItem(idx+1); + if (!timerInt2[idx]) timerInt2[idx] = setInterval(function(){ + s.drawItem(idx+1); + }, 1000); + }, 1000 - (sw[idx].t % 1000)); + } + + var s = E.showScroller({ + h : 40, c : sw.length+2, + back : function() {load();}, + draw : (idx, r) => { + + function drawMenuItem(a) { + g.setClipRect(R.x,R.y,R.x2,R.y2); + if (idx > 0 && sw[idx-1].msg) msg = "\n"+(sw[idx-1].msg.length > 10 ? + sw[idx-1].msg.substring(0, 10)+"..." : sw[idx-1].msg); + else msg = ""; + return g.setColor(g.theme.bg2).fillRect({x:r.x+4,y:r.y+2,w:r.w-8, h:r.h-4, r:5}) + .setColor(g.theme.fg2).setFont("6x8:2").setFontAlign(-1,0).drawString(a+msg,r.x+12,r.y+(r.h/2)); + } + + if (idx == 0) { + drawMenuItem("+ New Chrono"); + } + if (idx == sw.length+1) { + g.setColor(g.theme.bg).fillRect({x:r.x+4,y:r.y+2,w:r.w-8, h:r.h-4, r:5}) + .setColor(g.theme.fg).setFont("6x8:2").setFontAlign(0,0).drawString("< Swipe >",r.x+(r.w/2),r.y+(r.h/2)); + } + else if (idx > 0 && idx < sw.length+1) { + if (sw[idx-1].on == true) { + drawMenuItem(formatTime(Date.now()-sw[idx-1].t)); + updateTimers(idx-1); + } + else drawMenuItem(formatTime(sw[idx-1].t)); + } + }, + select : (idx) => { + clearInt(); + if (idx == 0) swMenu(sw.length); + else if (idx > 0 && idx < sw.length+1) swMenu(idx-1); + } + }); +} + +function swMenu(idx, a) { + layer = -1; + var sw = require("Storage").readJSON("multitimer.json", true) || []; + if (sw[idx]) a = sw[idx]; + else { + a = {"t" : 0, "on" : false, "msg" : ""}; + sw[idx] = a; + require("Storage").writeJSON("multitimer.json", sw); + } + + function updateTimer() { + if (timerInt1[0] == undefined) timerInt1[0] = setTimeout(function() { + s.drawItem(0); + if (timerInt2[0] == undefined) timerInt2[0] = setInterval(function(){ + s.drawItem(0); + }, 100); + }, 100 - (a.t % 100)); + } + + function editMsg(idx, a) { + g.clear(); + msg = a.msg; + require("textinput").input({text:msg}).then(result => { + if (result != "") { + a.msg = result; + } + else delete a.msg; + sw[idx] = a; + require("Storage").writeJSON("multitimer.json", sw); + swMenu(idx, a); + }); + } + + function kbAlert() { + E.showAlert("Must install keyboard app").then(function() { + swMenu(idx, a); + }); + } + + var s = E.showScroller({ + h : 40, c : 5, + back : function() { + clearInt(); + drawSw(); + }, + draw : (i, r) => { + + function drawMenuItem(b) { + return g.setClipRect(R.x,R.y,R.x2,R.y2).setColor(g.theme.bg2) + .fillRect({x:r.x+4,y:r.y+2,w:r.w-8, h:r.h-4, r:5}) + .setColor(g.theme.fg2).setFont("6x8:2").setFontAlign(-1,0).drawString(b,r.x+12,r.y+(r.h/2)); + } + + if (i == 0) { + if (a.msg) msg = "\n"+(a.msg.length > 10 ? a.msg.substring(0, 10)+"..." : a.msg); + else msg = ""; + if (a.on == true) { + drawMenuItem(formatTimeDecis(Date.now()-a.t)+msg); + updateTimer(); + } + else { + clearInt(); + drawMenuItem(formatTimeDecis(a.t)+msg); + } + } + if (i == 1) { + if (a.on == true) drawMenuItem("Pause"); + else drawMenuItem("Start"); + } + if (i == 2) drawMenuItem("Reset"); + if (i == 3) drawMenuItem("Msg"); + if (i == 4) drawMenuItem("Delete"); + }, + select : (i) => { + + function saveAndReload() { + require("Storage").writeJSON("multitimer.json", sw); + s.draw(); + } + + //pause/start + if (i == 1) { + if (a.on == true) { + clearInt(); + a.t = Date.now()-a.t; + a.on = false; + sw[idx] = a; + saveAndReload(); + } + else { + a.t == 0 ? a.t = Date.now() : a.t = Date.now()-a.t; + a.on = true; + sw[idx] = a; + saveAndReload(); + } + } + //reset + if (i == 2) { + clearInt(); + a.t = 0; + if (a.on == true) a.on = false; + saveAndReload(); + } + //edit message + if (i == 3) { + clearInt(); + var kbapp = require("Storage").read("textinput"); + if (kbapp != undefined) editMsg(idx, a); + else kbAlert(); + } + //delete + if (i == 4) { + clearInt(); + sw.splice(idx, 1); + saveAndReload(); + drawSw(); + } + } + }); +} + +function drawAlarms() { + layer = 2; + var alarms = require("sched").getAlarms().filter(a => !a.timer); + + var s = E.showScroller({ + h : 40, c : alarms.length+2, + back : function() {load();}, + draw : (idx, r) => { + + function drawMenuItem(a) { + g.setClipRect(R.x,R.y,R.x2,R.y2); + var on = ""; + var dow = ""; + if (idx > 0 && alarms[idx-1].on == true) on = " - on"; + else if (idx > 0 && alarms[idx-1].on == false) on = " - off"; + if (idx > 0 && idx < alarms.length+1) dow = "\n"+"SMTWTFS".split("").map((d,n)=>alarms[idx-1].dow&(1<",r.x+(r.w/2),r.y+(r.h/2)); + } + else if (idx > 0 && idx < alarms.length+1){ + var str = formatTime(alarms[idx-1].t); + drawMenuItem(str.slice(0, -3)); + } + }, + select : (idx) => { + clearInt(); + if (idx == 0) editAlarm(-1); + else if (idx > 0 && idx < alarms.length+1) editAlarm(idx-1); + } + }); +} + +function editDOW(dow, onchange) { + const menu = { + '': { 'title': 'Days of Week' }, + '< Back' : () => onchange(dow) + }; + for (var i = 0; i < 7; i++) (i => { + var dayOfWeek = require("locale").dow({ getDay: () => i }); + menu[dayOfWeek] = { + value: !!(dow&(1< v ? "Yes" : "No", + onchange: v => v ? dow |= 1<= 0) a = alarms[alarmIdx[idx]]; + else a = require("sched").newDefaultAlarm(); + } + var t = decodeTime(a.t); + + function editMsg(idx, a) { + g.clear(); + idx < 0 ? msg = "" : msg = a.msg; + require("textinput").input({text:msg}).then(result => { + if (result != "") { + a.msg = result; + } + else delete a.msg; + editAlarm(idx, a); + }); + } + + function kbAlert() { + E.showAlert("Must install keyboard app").then(function() { + editAlarm(idx, a); + }); + } + + var menu = { + "": { "title": "Alarm" }, + "< Back": () => { + if (idx >= 0) alarms[alarmIdx[idx]] = a; + else alarms.push(a); + require("sched").setAlarms(alarms); + require("sched").reload(); + drawAlarms(); + }, + "Enabled": { + value: a.on, + format: v => v ? "On" : "Off", + onchange: v => a.on = v + }, + "Hours": { + value: t.hrs, min: 0, max: 23, wrap: true, + onchange: v => { + t.hrs = v; + a.t = encodeTime(t); + } + }, + "Minutes": { + value: t.mins, min: 0, max: 59, wrap: true, + onchange: v => { + t.mins = v; + a.t = encodeTime(t); + } + }, + "Repeat": { + value: a.rp, + format: v => v ? "Yes" : "No", + onchange: v => a.rp = v + }, + "Days": { + value: "SMTWTFS".split("").map((d,n)=>a.dow&(1< editDOW(a.dow, d=>{a.dow=d;editAlarm(idx,a);}) + }, + "Vibrate": require("buzz_menu").pattern(a.vibrate, v => a.vibrate = v), + "Auto Snooze": { + value: a.as, + format: v => v ? "Yes" : "No", + onchange: v => a.as = v + }, + "Msg": { + value: !a.msg ? "" : a.msg.length > 6 ? a.msg.substring(0, 6)+"..." : a.msg, + //menu glitch? setTimeout required here + onchange: () => { + var kbapp = require("Storage").read("textinput"); + if (kbapp != undefined) setTimeout(editMsg, 0, idx, a); + else setTimeout(kbAlert, 0); + } + }, + "Delete": () => { + if (idx >= 0) { + alarms.splice(alarmIdx[idx], 1); + require("sched").setAlarms(alarms); + require("sched").reload(); + } + drawAlarms(); + }, + }; + + E.showMenu(menu); +} + +drawTimers(); + +Bangle.on("drag", e=>{ + if (layer < 0) return; + if (!drag) { // start dragging + drag = {x: e.x, y: e.y}; + } + else if (!e.b) { // released + const dx = e.x-drag.x, dy = e.y-drag.y; + drag = null; + if (dx == 0) return; + //horizontal swipes + if (Math.abs(dx)>Math.abs(dy)+10) { + //swipe left + if (dx<0) layer == 2 ? layer = 0 : layer++; + //swipe right + if (dx>0) layer == 0 ? layer = 2 : layer--; + clearInt(); + if (layer == 0) drawTimers(); + else if (layer == 1) drawSw(); + else if (layer == 2) drawAlarms(); + } + } +}); From 29354d6a51c615b03fc86a64d9b190325b832770 Mon Sep 17 00:00:00 2001 From: frigis1 <63980066+frigis1@users.noreply.github.com> Date: Sat, 14 May 2022 11:23:50 -0700 Subject: [PATCH 260/509] Add files via upload --- apps/multitimer/ChangeLog | 1 + apps/multitimer/README.md | 8 ++++ apps/multitimer/alarm.js | 77 ++++++++++++++++++++++++++++++++ apps/multitimer/app-icon.js | 1 + apps/multitimer/app.png | Bin 0 -> 971 bytes apps/multitimer/metadata.json | 22 +++++++++ apps/multitimer/screenshot1.png | Bin 0 -> 3337 bytes apps/multitimer/screenshot2.png | Bin 0 -> 2970 bytes apps/multitimer/screenshot3.png | Bin 0 -> 3476 bytes 9 files changed, 109 insertions(+) create mode 100644 apps/multitimer/ChangeLog create mode 100644 apps/multitimer/README.md create mode 100644 apps/multitimer/alarm.js create mode 100644 apps/multitimer/app-icon.js create mode 100644 apps/multitimer/app.png create mode 100644 apps/multitimer/metadata.json create mode 100644 apps/multitimer/screenshot1.png create mode 100644 apps/multitimer/screenshot2.png create mode 100644 apps/multitimer/screenshot3.png diff --git a/apps/multitimer/ChangeLog b/apps/multitimer/ChangeLog new file mode 100644 index 000000000..624f1b0fb --- /dev/null +++ b/apps/multitimer/ChangeLog @@ -0,0 +1 @@ +0.01: Initial version \ No newline at end of file diff --git a/apps/multitimer/README.md b/apps/multitimer/README.md new file mode 100644 index 000000000..0cc747c28 --- /dev/null +++ b/apps/multitimer/README.md @@ -0,0 +1,8 @@ +# Multi Timer +With this app, you can set timers and chronographs (stopwatches) and watch them count down/up in real time. You can also set alarms - swipe left or right to switch between the three functions. + +## WARNING +* Editing timers in another app (such as the default Alarm app) is not recommended. Editing alarms should not be a problem. +* This app uses the [Scheduler library](https://banglejs.com/apps/?id=sched). +* To avoid potential conflicts with other apps that uses sched (especially ones that make use of the data field), this app only lists timers that it created - all other timers will be ignored. +* A keyboard app is only used for adding messages to timers and is therefore not strictly needed. \ No newline at end of file diff --git a/apps/multitimer/alarm.js b/apps/multitimer/alarm.js new file mode 100644 index 000000000..96e5ade89 --- /dev/null +++ b/apps/multitimer/alarm.js @@ -0,0 +1,77 @@ +//sched.js, modified +// Chances are boot0.js got run already and scheduled *another* +// 'load(sched.js)' - so let's remove it first! +if (Bangle.SCHED) { + clearInterval(Bangle.SCHED); + delete Bangle.SCHED; +} + +function showAlarm(alarm) { + const settings = require("sched").getSettings(); + + let msg = ""; + msg += require("sched").formatTime(alarm.timer); + if (alarm.msg) { + msg += "\n"+alarm.msg; + } + else msg = atob("ACQswgD//33vRcGHIQAAABVVVAAAAAAAABVVVAAAAAAAABVVVAAAAAAAABVVVAAAAAAAABVVVAAAAAAAABVVVAAAAAAAAAP/wAAAAAAAAAP/wAAAAAAAAAqqoAPAAAAAAqqqqoP8AAAAKqqqqqv/AAACqqqqqqq/wAAKqqqlWqqvwAAqqqqlVaqrAACqqqqlVVqqAAKqqqqlVVaqgAKqaqqlVVWqgAqpWqqlVVVqoAqlWqqlVVVaoCqlV6qlVVVaqCqVVfqlVVVWqCqVVf6lVVVWqKpVVX/lVVVVqqpVVV/+VVVVqqpVVV//lVVVqqpVVVfr1VVVqqpVVVfr1VVVqqpVVVb/lVVVqqpVVVW+VVVVqqpVVVVVVVVVqiqVVVVVVVVWqCqVVVVVVVVWqCqlVVVVVVVaqAqlVVVVVVVaoAqpVVVVVVVqoAKqVVVVVVWqgAKqlVVVVVaqgACqpVVVVVqqAAAqqlVVVaqoAAAKqqVVWqqgAAACqqqqqqqAAAAAKqqqqqgAAAAAAqqqqoAAAAAAAAqqoAAAAA==")+" "+msg; + + Bangle.loadWidgets(); + Bangle.drawWidgets(); + + let buzzCount = settings.buzzCount; + + E.showPrompt(msg,{ + title: "TIMER!", + buttons : {"Snooze":true,"Ok":false} // default is sleep so it'll come back in 10 mins + }).then(function(sleep) { + buzzCount = 0; + if (sleep) { + if(alarm.ot===undefined) alarm.ot = alarm.t; + alarm.t += settings.defaultSnoozeMillis; + } else { + if (!alarm.timer) alarm.last = (new Date()).getDate(); + if (alarm.ot!==undefined) { + alarm.t = alarm.ot; + delete alarm.ot; + } + if (!alarm.rp) alarm.on = false; + } + //reset timer value + alarm.timer = alarm.data; + // alarm is still a member of 'alarms', so writing to array writes changes back directly + require("sched").setAlarms(alarms); + load(); + }); + + function buzz() { + if (settings.unlockAtBuzz) { + Bangle.setLocked(false); + } + + require("buzz").pattern(alarm.vibrate === undefined ? ".." : alarm.vibrate).then(() => { + if (buzzCount--) { + setTimeout(buzz, settings.buzzIntervalMillis); + } else if (alarm.as) { // auto-snooze + buzzCount = settings.buzzCount; + setTimeout(buzz, settings.defaultSnoozeMillis); + } + }); + } + + if ((require("Storage").readJSON("setting.json", 1) || {}).quiet > 1) + return; + + buzz(); +} + +// Check for alarms +let alarms = require("sched").getAlarms(); +let active = require("sched").getActiveAlarms(alarms); +if (active.length) { + // if there's an alarm, show it + showAlarm(active[0]); +} else { + // otherwise just go back to default app + setTimeout(load, 100); +} \ No newline at end of file diff --git a/apps/multitimer/app-icon.js b/apps/multitimer/app-icon.js new file mode 100644 index 000000000..6eac4ab31 --- /dev/null +++ b/apps/multitimer/app-icon.js @@ -0,0 +1 @@ +atob("MDCBAYAAAAAAfwAAAAAAPz//////Pz//////Pz//////Pz//////Pz//////PwAAAAAAPwAAAAAAPz//////Pz//////Pz//////Pz//////Pz//////Pz48AAAfPz4YAAAPPz//////Pz//////Pz//////Pz48AAAfPz4YAAAPPz//////Pz//////Pz//////Pz4YAAAPPz4YAAAfPz//////vz///////z///////z4YAAH4Pz48AAP4Dz////95hz////594z////x/8T////zP+T////nH+D////nj/AAAADnw/AAAABn4/P////n4/P////n//P////n/+f////z/+f////x/8/////4/4/////8Ph/////+AH//////gfw==") \ No newline at end of file diff --git a/apps/multitimer/app.png b/apps/multitimer/app.png new file mode 100644 index 0000000000000000000000000000000000000000..3006b0a2697673f59fba9fc1facff92f14be4112 GIT binary patch literal 971 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 BTc7{{ literal 0 HcmV?d00001 diff --git a/apps/multitimer/screenshot2.png b/apps/multitimer/screenshot2.png new file mode 100644 index 0000000000000000000000000000000000000000..23a0d4c222288b45c19532ae5e30b7798c26d971 GIT binary patch literal 2970 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 literal 0 HcmV?d00001 From 1b993fb09987043f6e124f794fa50c264d3a5b4c Mon Sep 17 00:00:00 2001 From: thyttan <97237430+thyttan@users.noreply.github.com> Date: Sun, 15 May 2022 00:24:18 +0200 Subject: [PATCH 261/509] Update lib.js --- apps/kbmulti/lib.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/kbmulti/lib.js b/apps/kbmulti/lib.js index 2d38539e8..d06e2bb7d 100644 --- a/apps/kbmulti/lib.js +++ b/apps/kbmulti/lib.js @@ -17,7 +17,7 @@ exports.input = function(options) { "4":"GHI4","5":"JKL5","6":"MNO6", "7":"PQRS7","8":"TUV80","9":"WXYZ9", }; - var helpMessage = 'swipe:\nRight: Space\nLeft:Backspace\nUp/Down: Caps lock\n'; + var helpMessage = 'Swipe:\nRight: Space\nLeft:Backspace\nUp/Down: Caps lock\n'; var charTimeout; // timeout after a key is pressed var charCurrent; // current character (index in letters) From 687eaaab4b3457d1cd227e0b0049a9a50ae772c3 Mon Sep 17 00:00:00 2001 From: frigis1 <63980066+frigis1@users.noreply.github.com> Date: Sat, 14 May 2022 22:16:15 -0700 Subject: [PATCH 262/509] Update app.js --- apps/multitimer/app.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/multitimer/app.js b/apps/multitimer/app.js index caf2637f0..faafc00a3 100644 --- a/apps/multitimer/app.js +++ b/apps/multitimer/app.js @@ -17,7 +17,7 @@ function getCurrentTime() { } function decodeTime(t) { - let hrs = 0 | Math.floor(t / 3600000 % 24); + let hrs = 0 | Math.floor(t / 3600000); let mins = 0 | Math.floor(t / 60000 % 60); let secs = 0 | Math.floor(t / 1000 % 60); return { hrs: hrs, mins: mins, secs: secs }; @@ -33,7 +33,7 @@ function formatTime(t) { } function decodeTimeDecis(t) { - let hrs = 0 | Math.floor(t / 3600000 % 24); + let hrs = 0 | Math.floor(t / 3600000); let mins = 0 | Math.floor(t / 60000 % 60); let secs = 0 | Math.floor(t / 1000 % 60); let decis = 0 | Math.floor(t / 100 % 100); From 1f175ecd9fa0662ac042f1fbbf59d9cef0f4da10 Mon Sep 17 00:00:00 2001 From: JuliusS123 <42714028+JuliusS123@users.noreply.github.com> Date: Sun, 15 May 2022 10:11:56 +0200 Subject: [PATCH 263/509] Create app.js --- apps/homework/app.js | 238 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 238 insertions(+) create mode 100644 apps/homework/app.js diff --git a/apps/homework/app.js b/apps/homework/app.js new file mode 100644 index 000000000..032560ec5 --- /dev/null +++ b/apps/homework/app.js @@ -0,0 +1,238 @@ +var Layout = require("Layout"); + +var homework = require("Storage").readJSON("homework.txt", "r"); +//var hwfile = require("Storage").open("homework.txt", "w"); +var mainCheckHomeworkMenu; +console.log(homework); +//subjects = require("Storage").open("subjects.txt", "r"); + +var mode = "mainmenu"; +var statusmsg; +var mainMenu = { + "": { + title: "--Main Menu--" + }, + "New Homework": function() { + E.showMenu(nhwmn); + mode = "newhomework"; + }, + "Check Homework": function() { + checkUnfinishedHomeworkAssembler(); + }, + "Reset Homework": function() { + E.showPrompt("Are you sure you want to delete homework.txt?", { + buttons: { + "No": false, + "Yes": true + } + }).then(function(v) { + if (v) { + require("Storage").write("homework.txt", '{"homework":[]}'); + homework = require("Storage").readJSON("homework.txt", "r"); + E.showMenu(mainMenu); + + }else{ + E.showMenu(mainMenu); + } + }); + }, +}; + + +var nhwmn = { // New homework Menu + "": { + "title": "New HW Subject:" + }, + "German": function() { + addNewHomework("German"); + }, + "English": function() { + addNewHomework("English"); + }, + "Maths": function() { + addNewHomework("Maths"); + }, + "French": function() { + addNewHomework("French"); + }, + "Chemistry": function() { + addNewHomework("Chemistry"); + }, + "Physics": function() { + addNewHomework("Physics"); + }, + "Religion": function() { + addNewHomework("Religion"); + }, + "Biology": function() { + addNewHomework("Biology"); + }, + "Music": function() { + addNewHomework("Music"); + }, + "History": function() { + addNewHomework("History"); + }, + "Arts": function() { + addNewHomework("Arts"); + }, + "Sports": function() { + addNewHomework("Sports"); + }, + + "Back": function() { + mode = "mainmenu"; + E.showMenu(mainMenu); + }, + + +}; + + +function checkUnfinishedHomeworkAssembler() { + homework = require("Storage").readJSON("homework.txt", "r"); + var hwcount = Object.keys(homework.homework).length; + mainCheckHomeworkMenu = { + '': { + 'title': 'Unfinished HW:' + } + }; + // This code snippet gets the unfinished HW and puts it in mainCheckHomeworkMenu + // btw mainCheckHomeworkMenu displays all the homework, when tapping on it you get more details with checkPreciseHomework function (currently being written) + for (var i = 0; i < hwcount; ++i) { + if (homework.homework[i].done === false) { + var currentsubject = i; //attempting to pass i + mainCheckHomeworkMenu[homework.homework[i].subject] = function() { + checkPreciseHomework(currentsubject); + }; + } + + } + mainCheckHomeworkMenu["See Archived HW"] = function() { + checkFinishedHomeworkAssembler(); + }; + mainCheckHomeworkMenu["Back to Main Menu"] = function() { + mode = "mainmenu"; + E.showMenu(mainMenu); + }; + E.showMenu(mainCheckHomeworkMenu); +} + +function checkFinishedHomeworkAssembler() { + homework = require("Storage").readJSON("homework.txt", "r"); + var hwcount = Object.keys(homework.homework).length; + mainCheckHomeworkMenu = { + '': { + 'title': 'Unfinished HW:' + } + }; + // This code snippet gets the unfinished HW and puts it in mainCheckHomeworkMenu + // btw mainCheckHomeworkMenu displays all the homework, when tapping on it you get more details with checkPreciseHomework function (currently being written) + for (var i = 0; i < hwcount; ++i) { + if (homework.homework[i].done === true) { + var currentsubject = i; //attempting to pass i + mainCheckHomeworkMenu[homework.homework[i].subject] = function() { + checkPreciseHomework(currentsubject); + }; + } + + } + mainCheckHomeworkMenu["Back"] = function() { + mode = "mainmenu"; + E.showMenu(mainMenu); + }; + E.showMenu(mainCheckHomeworkMenu); +} + +function checkPreciseHomework(subjectnum) { // P A I N + homework = require("Storage").read("homework.txt", "r"); + homework = JSON.parse(homework); + var subject = homework.homework[subjectnum].subject; + var task = homework.homework[subjectnum].task; + var taskmsg = "Task: " + homework.homework[subjectnum].task; + if (homework.homework[subjectnum].done === false) { + statusmsg = "Status: Unfinished"; + } else { + statusmsg = "Status: Finished"; + } + var datetimerecieved = homework.homework[subjectnum].datetimerecievehw; + var datetimerecievedmsg = "Recieved: " + homework.homework[subjectnum].datetimerecievehw; + var checkPreciseHomeworkMenu = { + '': { + 'title': subject + }, + }; + checkPreciseHomeworkMenu[subject] = function() {}, + checkPreciseHomeworkMenu[taskmsg] = function() {}, + checkPreciseHomeworkMenu[statusmsg] = function() { + status = "Status: Finished"; + var d = new Date(); + var currenttime = require("locale").time(d, 1); + var currentdate = require("locale").date(d); + var datetime = (currenttime + " " + currentdate); + delete homework.homework[subjectnum]; + homework.homework.push({ + subject: subject, + task: task, + done: true, + datetimerecievehw: datetimerecieved, + datetimehwdone: datetime + }); + require("Storage").write("homework.txt", JSON.stringify(homework)); + checkUnfinishedHomeworkAssembler(); + }, + checkPreciseHomeworkMenu[datetimerecievedmsg] = function() {}, + checkPreciseHomeworkMenu["Back"] = function() { + checkUnfinishedHomeworkAssembler(); + }, + + E.showMenu(checkPreciseHomeworkMenu); + + +} + +function pushHomework(subject, status, datetimehwdone) { + homework = require("Storage").readJSON("homework.txt", "r"); + +} + +function addNewHomework(subject) { // Pass subject + require("textinput").input().then(result => { + if (result === "") { + mode = "newhomework"; + E.showMenu(nhwmn); + } else { + var d = new Date(); + // update time and date + var currenttime = require("locale").time(d, 1); + var currentdate = require("locale").date(d); + var datetime = (currenttime + " " + currentdate); + homework.homework.push({ + subject: subject, + task: result, + done: false, + datetimerecievehw: datetime + }); // TODO: when HW is done, add datetimeendhw !!! + //homework.homework[subject] = result; + require("Storage").write("homework.txt", JSON.stringify(homework)); + E.showMenu(mainMenu); + + } + }); + +} + +function main() { // why does this still exist + if (mode === "mainmenu") { + E.showMenu(mainMenu); + + } else if (mode === "newhomework") { + E.showMenu(nhwmn); + + } +} +g.clear(); +Bangle.loadWidgets(); +Bangle.drawWidgets(); +main(); +//loop = setInterval(main, 1); From a6cdee8a40ac6348f8e7b9361025f1d20a283da9 Mon Sep 17 00:00:00 2001 From: JuliusS123 <42714028+JuliusS123@users.noreply.github.com> Date: Sun, 15 May 2022 10:16:41 +0200 Subject: [PATCH 264/509] Create app-icon.js --- apps/homework/app-icon.js | 1 + 1 file changed, 1 insertion(+) create mode 100644 apps/homework/app-icon.js diff --git a/apps/homework/app-icon.js b/apps/homework/app-icon.js new file mode 100644 index 000000000..7eeb41f50 --- /dev/null +++ b/apps/homework/app-icon.js @@ -0,0 +1 @@ +require("heatshrink").decompress(atob("mEw4cA///43hg3ytVN/UF61hsvR2kEKf4AzgMgCJ9JkmACBsSCIOSCBkEyQRCpBELBwIRCpJKKEAYmDJRBEFJRQdHJRBEDIIgIIhJlIFgYRGKBQRFIgMN23YOgwREHYQRHJQIFDhADCCI5KBIA4RIAAsW7doCIsf5LHGCNMbkmQRwIRhGpy6BCMI1RCP4R9UITXOCKJZvAH4AoA=")) From bd69f2136195b99bb3ac4d96f92b354063995e93 Mon Sep 17 00:00:00 2001 From: JuliusS123 <42714028+JuliusS123@users.noreply.github.com> Date: Sun, 15 May 2022 10:22:52 +0200 Subject: [PATCH 265/509] Create metadata.json --- apps/homework/metadata.json | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 apps/homework/metadata.json diff --git a/apps/homework/metadata.json b/apps/homework/metadata.json new file mode 100644 index 000000000..a8f7909ea --- /dev/null +++ b/apps/homework/metadata.json @@ -0,0 +1,15 @@ + +{ "id": "homework", + "name": "Homework", + "shortName":"Homwork", + "version":"0.1", + "description": "A simple app to manage homework", + "icon": "app-icon.js", + "tags": "tool", + "supports" : ["BANGLEJS2"], + "readme": "README.md", + "storage": [ + {"name":"homework.app.js","url":"app.js"}, + {"name":"homework.img","url":"app-icon.js","evaluate":true} + ] +} From 35f7f3d630fbba02b78efdbd6ddaa1ed454f224e Mon Sep 17 00:00:00 2001 From: JuliusS123 <42714028+JuliusS123@users.noreply.github.com> Date: Sun, 15 May 2022 10:44:38 +0200 Subject: [PATCH 266/509] Create README.md --- apps/homework/README.md | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 apps/homework/README.md diff --git a/apps/homework/README.md b/apps/homework/README.md new file mode 100644 index 000000000..adad4ef39 --- /dev/null +++ b/apps/homework/README.md @@ -0,0 +1,4 @@ +# This is a simple homework app +Use the touchscreen to navigate. + +Requires the "textinput" library. (Tap keyboard) From 558f219ccf99796bf0e779395996bc353de9045e Mon Sep 17 00:00:00 2001 From: JuliusS123 <42714028+JuliusS123@users.noreply.github.com> Date: Sun, 15 May 2022 10:47:25 +0200 Subject: [PATCH 267/509] Update app-icon.js --- apps/homework/app-icon.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/homework/app-icon.js b/apps/homework/app-icon.js index 7eeb41f50..7fe731b3a 100644 --- a/apps/homework/app-icon.js +++ b/apps/homework/app-icon.js @@ -1 +1 @@ -require("heatshrink").decompress(atob("mEw4cA///43hg3ytVN/UF61hsvR2kEKf4AzgMgCJ9JkmACBsSCIOSCBkEyQRCpBELBwIRCpJKKEAYmDJRBEFJRQdHJRBEDIIgIIhJlIFgYRGKBQRFIgMN23YOgwREHYQRHJQIFDhADCCI5KBIA4RIAAsW7doCIsf5LHGCNMbkmQRwIRhGpy6BCMI1RCP4R9UITXOCKJZvAH4AoA=")) +require("heatshrink").decompress(atob("mEwxH+AH4A/AH4A/AG27y4ttAAYttGM4tJGMYsMGMCJLSsIhPGLodTGLIYI3ZFhFxQtOJJgURFqQxKCR4tGm83nAACGKQQNLZAvTGIjWMBRIvVERgAMFYOHAAQcWABUtltSAAQvRisVjgACF7KPPF/4AHrFYvgACF5OXy+7AAQHBFYNkAAQv/R6IvHX8/C4XJAAQv/R/4v/F/4v/F/4v/ABNYrF8AAQHBFYOHAAQHB4XC5IACA4IrBsgACF/6//F/4vRAH4A/AH4A/ACwA==")) From f69cd6e5ef91a16e07e303c174927116c06527ed Mon Sep 17 00:00:00 2001 From: JuliusS123 <42714028+JuliusS123@users.noreply.github.com> Date: Sun, 15 May 2022 10:49:53 +0200 Subject: [PATCH 268/509] Add files via upload --- apps/homework/app.png | Bin 0 -> 684 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 apps/homework/app.png diff --git a/apps/homework/app.png b/apps/homework/app.png new file mode 100644 index 0000000000000000000000000000000000000000..e6174d46bfdb46eaa36f1f742ff1c8fd390efc04 GIT binary patch literal 684 zcmV;d0#p5oP)UKDB{`}XjR+#5) z0JzBsjeJK!1%{@HV|TV+qEzNYftZR`+d!XQvp? zTzyb2n~dl_I3hvf2w23}L)~`Y1Uo8E)(8MHg^aJgeP>&ElhAF~0Z<>BMisz42#SaZ zgcd#za!$`i43SU)2JC^Mb^_<{tc^THs^NQ zognlM+_?Ch0HAm#>uY~z-;z_{)2-2tcVX4vzP`fEpJW%B;_&Ms0HBAyjC8Tk{`-iM z5t;$>auEQKJ%7^QVT%p2Un&s*6f(zs?WcC#(GnRioqFc9uYX4%_tBUE=ff8OK=E6a z6Pb|D`v8C)ta1XUk@6DrSXo{k{is~>ckH^;!7(`+OK4U;9UK4v3O@$Yb1(c1D1o$5 z0%@ZJ(niW*ZgLk6UTE6b1|aYyR);wbyu%#tLc{$M&v2Mq_!(Gu0fj=LNSEI_v-0fT SL+0E70000 Date: Sun, 15 May 2022 10:50:21 +0200 Subject: [PATCH 269/509] Update metadata.json --- apps/homework/metadata.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/homework/metadata.json b/apps/homework/metadata.json index a8f7909ea..a6f9b1207 100644 --- a/apps/homework/metadata.json +++ b/apps/homework/metadata.json @@ -4,7 +4,7 @@ "shortName":"Homwork", "version":"0.1", "description": "A simple app to manage homework", - "icon": "app-icon.js", + "icon": "app.png", "tags": "tool", "supports" : ["BANGLEJS2"], "readme": "README.md", From 831a8635bf97467019d2452332fd480abddd2e57 Mon Sep 17 00:00:00 2001 From: JuliusS123 <42714028+JuliusS123@users.noreply.github.com> Date: Sun, 15 May 2022 10:52:54 +0200 Subject: [PATCH 270/509] Update app-icon.js --- apps/homework/app-icon.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/homework/app-icon.js b/apps/homework/app-icon.js index 7fe731b3a..7dab2103b 100644 --- a/apps/homework/app-icon.js +++ b/apps/homework/app-icon.js @@ -1 +1 @@ -require("heatshrink").decompress(atob("mEwxH+AH4A/AH4A/AG27y4ttAAYttGM4tJGMYsMGMCJLSsIhPGLodTGLIYI3ZFhFxQtOJJgURFqQxKCR4tGm83nAACGKQQNLZAvTGIjWMBRIvVERgAMFYOHAAQcWABUtltSAAQvRisVjgACF7KPPF/4AHrFYvgACF5OXy+7AAQHBFYNkAAQv/R6IvHX8/C4XJAAQv/R/4v/F/4v/F/4v/ABNYrF8AAQHBFYOHAAQHB4XC5IACA4IrBsgACF/6//F/4vRAH4A/AH4A/ACwA==")) +require("heatshrink").decompress(atob("mEwhH+AH4A/AH4A/AGu7y4ttAAYttGM4tJGMYsMGMCJLSsIhPGLodTGLIYI3ZFhFxQtOJJgURFqQxKCR4tGm83nAACGKQQNLZAvTGIjWMBRIvVERgAMFYOHAAQcWABUtltSAAQvRisVjgACF7KPPF/4AHrFYvgACF5OXy+7AAQHBFYNkAAQv/R6IvHX8/C4XJAAQv/R/4v/F/4v/F/4v/ABNYrF8AAQHBFYOHAAQHB4XC5IACA4IrBsgACF/6//F/4vRAH4A/AH4A/ACwA==")) From afbaf2b90e08a0f0bcefc27e725e89ef278cf190 Mon Sep 17 00:00:00 2001 From: JuliusS123 <42714028+JuliusS123@users.noreply.github.com> Date: Sun, 15 May 2022 10:56:27 +0200 Subject: [PATCH 271/509] Update app-icon.js --- apps/homework/app-icon.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/homework/app-icon.js b/apps/homework/app-icon.js index 7dab2103b..23a974ef3 100644 --- a/apps/homework/app-icon.js +++ b/apps/homework/app-icon.js @@ -1 +1 @@ -require("heatshrink").decompress(atob("mEwhH+AH4A/AH4A/AGu7y4ttAAYttGM4tJGMYsMGMCJLSsIhPGLodTGLIYI3ZFhFxQtOJJgURFqQxKCR4tGm83nAACGKQQNLZAvTGIjWMBRIvVERgAMFYOHAAQcWABUtltSAAQvRisVjgACF7KPPF/4AHrFYvgACF5OXy+7AAQHBFYNkAAQv/R6IvHX8/C4XJAAQv/R/4v/F/4v/F/4v/ABNYrF8AAQHBFYOHAAQHB4XC5IACA4IrBsgACF/6//F/4vRAH4A/AH4A/ACwA==")) +require("heatshrink").decompress(atob("mEwxH+AH4A/AH4AVvNPp95F1tPqujF9IuCvPO5wspAAXHF84uFp4uBL84xEvPN5q+rqtiCBl6F7tiAAY9LvQDBF86cDvQvCGLYvEGAr7EF4IwDF7c4GQwuERwIACqpecrlcF4lWLw4ACF7s3F58rGDIvEA4VcFwtWL4ovSCwwvHFoiOHGCQXHXYdcBwQuIDIwsMI5QwEGIKNERgh6JFpIuKAAOAGIYvCqpYJAwUyFxaNIGAovEXBheOF5pfCrl6RYjoTVAYvMRwYOKF76NDwAveGBaNEF8AwLFzgvHeRovoqtWFxtVDQbwSF44KBqouLDYzAYqz8OPg5gSD6K9FGCIvJVoIdLdoxgUDop9NF7gcEPZwvZJgwvnbiwTHF54bLMCEsAAIvVTRBEOF7zBSF7StPGDB1HPpyMVDAgZFbxztWAH4A/AGw")) From 38475eaa1191ed5c7ce2a384b8290481825b5f46 Mon Sep 17 00:00:00 2001 From: JuliusS123 <42714028+JuliusS123@users.noreply.github.com> Date: Sun, 15 May 2022 11:06:26 +0200 Subject: [PATCH 272/509] attempting to properly display app image --- apps/homework/app-icon.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/homework/app-icon.js b/apps/homework/app-icon.js index 23a974ef3..202b52b09 100644 --- a/apps/homework/app-icon.js +++ b/apps/homework/app-icon.js @@ -1 +1 @@ -require("heatshrink").decompress(atob("mEwxH+AH4A/AH4AVvNPp95F1tPqujF9IuCvPO5wspAAXHF84uFp4uBL84xEvPN5q+rqtiCBl6F7tiAAY9LvQDBF86cDvQvCGLYvEGAr7EF4IwDF7c4GQwuERwIACqpecrlcF4lWLw4ACF7s3F58rGDIvEA4VcFwtWL4ovSCwwvHFoiOHGCQXHXYdcBwQuIDIwsMI5QwEGIKNERgh6JFpIuKAAOAGIYvCqpYJAwUyFxaNIGAovEXBheOF5pfCrl6RYjoTVAYvMRwYOKF76NDwAveGBaNEF8AwLFzgvHeRovoqtWFxtVDQbwSF44KBqouLDYzAYqz8OPg5gSD6K9FGCIvJVoIdLdoxgUDop9NF7gcEPZwvZJgwvnbiwTHF54bLMCEsAAIvVTRBEOF7zBSF7StPGDB1HPpyMVDAgZFbxztWAH4A/AGw")) +require("heatshrink").decompress(atob("mEwwhC/AH4AbhvQCyvd7oYTCwQYTCwgYRCwwYPIgpKQCA4YOBxIYMBhYLLHhgYEC5BsKDAYXHCwUBiUikAYIC4wtDC5IYCA4pEEC5QYBYRUCkQXJAA8K1Wq0AXHhGIxGAC5ZHHC8ZDDC4cM5qaBC8ZHHC68N6czmAXrL94X/C/4XHgUiCYIDDa54XXO/4XHAH4A/ABY=")) From bd7d5cf7e4928e683e04b3b34c6b7e024ff53c9b Mon Sep 17 00:00:00 2001 From: JuliusS123 <42714028+JuliusS123@users.noreply.github.com> Date: Sun, 15 May 2022 11:12:19 +0200 Subject: [PATCH 273/509] Update metadata.json --- apps/homework/metadata.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/homework/metadata.json b/apps/homework/metadata.json index a6f9b1207..07279c4ea 100644 --- a/apps/homework/metadata.json +++ b/apps/homework/metadata.json @@ -1,7 +1,7 @@ { "id": "homework", "name": "Homework", - "shortName":"Homwork", + "shortName":"Homework", "version":"0.1", "description": "A simple app to manage homework", "icon": "app.png", From 4415325703bdc111848d4e734169f37caa363a0c Mon Sep 17 00:00:00 2001 From: thyttan <97237430+thyttan@users.noreply.github.com> Date: Sun, 15 May 2022 11:52:07 +0200 Subject: [PATCH 274/509] Update lib.js --- apps/kbmulti/lib.js | 25 ++++++++++++------------- 1 file changed, 12 insertions(+), 13 deletions(-) diff --git a/apps/kbmulti/lib.js b/apps/kbmulti/lib.js index d06e2bb7d..db18948b8 100644 --- a/apps/kbmulti/lib.js +++ b/apps/kbmulti/lib.js @@ -25,18 +25,21 @@ exports.input = function(options) { var caps = true; var layout; - function displayText(charTimeout) { + function displayText(hideMarker) { layout.clear(layout.text); - layout.text.label = text.slice(settings.showHelpBtn ? -11 : -13) + (charTimeout ? " " : "_"); // Implemented marker here. + layout.text.label = text.slice(settings.showHelpBtn ? -11 : -13) + (!hideMarker ? "_" : " "); layout.render(layout.text); } - function backspace() { - // remove the timeout if we had one + function deactivateTimeout(charTimeout) { if (charTimeout!==undefined) { clearTimeout(charTimeout); charTimeout = undefined; } + } + + function backspace() { + deactivateTimeout(charTimeout); text = text.slice(0, -1); newCharacter(); } @@ -56,11 +59,7 @@ exports.input = function(options) { } function onKeyPad(key) { - // remove the timeout if we had one - if (charTimeout!==undefined) { - clearTimeout(charTimeout); - charTimeout = undefined; - } + deactivateTimeout(charTimeout); // work out which char was pressed if (key==charCurrent) { charIndex = (charIndex+1) % letters[charCurrent].length; @@ -124,7 +123,7 @@ exports.input = function(options) { ]}, ] },{back: ()=>{ - // charTimeout = undefined; // Tried this to see if it would stop the text from being drawn after closing keyboard when doing it too soon after pressing a key. It didn't help. This problem goes back to how I've implemented the marker above. + deactivateTimeout(charTimeout); Bangle.setUI(); Bangle.removeListener("swipe", onSwipe); g.clearRect(Bangle.appRect); @@ -134,13 +133,13 @@ exports.input = function(options) { return new Promise((resolve,reject) => { g.clearRect(Bangle.appRect); - if (settings.firstLaunch) { - onHelp(resolve,reject); + if (settings.firstLaunch) { + onHelp(resolve,reject); settings.firstLaunch = false; require('Storage').writeJSON("kbmulti.settings.json", settings); } else { generateLayout(resolve,reject); - displayText(true); + displayText(false); Bangle.on('swipe', onSwipe); layout.render(); } From 29be42c6063ecfc505c55bb8e987597d2ba24748 Mon Sep 17 00:00:00 2001 From: thyttan <97237430+thyttan@users.noreply.github.com> Date: Sun, 15 May 2022 11:53:51 +0200 Subject: [PATCH 275/509] Update lib.js --- apps/kbmulti/lib.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/kbmulti/lib.js b/apps/kbmulti/lib.js index db18948b8..c8abf98b4 100644 --- a/apps/kbmulti/lib.js +++ b/apps/kbmulti/lib.js @@ -27,7 +27,7 @@ exports.input = function(options) { function displayText(hideMarker) { layout.clear(layout.text); - layout.text.label = text.slice(settings.showHelpBtn ? -11 : -13) + (!hideMarker ? "_" : " "); + layout.text.label = text.slice(settings.showHelpBtn ? -11 : -13) + (hideMarker ? " " : "_"); layout.render(layout.text); } From 134a9e2369c0a5f82abed9208c58ef3ca3a21992 Mon Sep 17 00:00:00 2001 From: thyttan <97237430+thyttan@users.noreply.github.com> Date: Sun, 15 May 2022 12:19:29 +0200 Subject: [PATCH 276/509] Update README.md --- apps/kbmulti/README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/apps/kbmulti/README.md b/apps/kbmulti/README.md index d40b2dd07..4c83d378e 100644 --- a/apps/kbmulti/README.md +++ b/apps/kbmulti/README.md @@ -10,7 +10,8 @@ Uses the multitap keypad logic originally from here: http://www.espruino.com/Mor ![](screenshot_1.png) ![](screenshot_2.png) +![](screenshot_3.png) Written by: [Sir Indy](https://github.com/sir-indy) and [Thyttan](https://github.com/thyttan) -For support and discussion please post in the [Bangle JS Forum](http://forum.espruino.com/microcosms/1424/) \ No newline at end of file +For support and discussion please post in the [Bangle JS Forum](http://forum.espruino.com/microcosms/1424/) From 5e564db73186325732b1a92859d8a6a6599641b8 Mon Sep 17 00:00:00 2001 From: thyttan <97237430+thyttan@users.noreply.github.com> Date: Sun, 15 May 2022 12:23:29 +0200 Subject: [PATCH 277/509] Add files via upload --- apps/kbmulti/screenshot_3.png | Bin 0 -> 3674 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 apps/kbmulti/screenshot_3.png diff --git a/apps/kbmulti/screenshot_3.png b/apps/kbmulti/screenshot_3.png new file mode 100644 index 0000000000000000000000000000000000000000..e0da184baa34c29285e7cd5b76d93638450a6cf4 GIT binary patch literal 3674 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 literal 0 HcmV?d00001 From f0a7ea0ee97f58f83a045a24f21a546aac95303d Mon Sep 17 00:00:00 2001 From: JuliusS123 <42714028+JuliusS123@users.noreply.github.com> Date: Sun, 15 May 2022 12:29:11 +0200 Subject: [PATCH 278/509] Update app.js --- apps/homework/app.js | 104 ++++++++++++++++--------------------------- 1 file changed, 39 insertions(+), 65 deletions(-) diff --git a/apps/homework/app.js b/apps/homework/app.js index 032560ec5..c7e04ba9f 100644 --- a/apps/homework/app.js +++ b/apps/homework/app.js @@ -1,11 +1,35 @@ var Layout = require("Layout"); var homework = require("Storage").readJSON("homework.txt", "r"); -//var hwfile = require("Storage").open("homework.txt", "w"); var mainCheckHomeworkMenu; -console.log(homework); -//subjects = require("Storage").open("subjects.txt", "r"); +var nhwmn = { // New homework Menu + "": { + "title": "New HW Subject:" + } + +}; + + + +function newHomeworkMenu() { + E.showMessage("Getting subjects..."); + var rawsubjects = require("Storage").read("subjects.txt"); // This code reads out the subjects list and removes the newline character at the end + var splitsubjects = rawsubjects.split(","); + var lastItem = splitsubjects[splitsubjects.length - 1]; + var thiscurrentsubject; + var command; + lastItem = lastItem.slice(0, -1); + splitsubjects[splitsubjects.length - 1] = lastItem; + for (let i = 0; i < splitsubjects.length; i++) { // loop through array and add to menu + thiscurrentsubject = splitsubjects[i]; + command = addNewHomework(thiscurrentsubject); + nhwmn[splitsubjects[i]] = addNewHomework.bind(null, thiscurrentsubject); + } + nhwmn["Back"] = function() {E.showMenu(mainMenu);}; + console.log(nhwmn); + E.showMenu(nhwmn); +} var mode = "mainmenu"; var statusmsg; var mainMenu = { @@ -13,7 +37,7 @@ var mainMenu = { title: "--Main Menu--" }, "New Homework": function() { - E.showMenu(nhwmn); + newHomeworkMenu(); mode = "newhomework"; }, "Check Homework": function() { @@ -38,73 +62,20 @@ var mainMenu = { }, }; - -var nhwmn = { // New homework Menu - "": { - "title": "New HW Subject:" - }, - "German": function() { - addNewHomework("German"); - }, - "English": function() { - addNewHomework("English"); - }, - "Maths": function() { - addNewHomework("Maths"); - }, - "French": function() { - addNewHomework("French"); - }, - "Chemistry": function() { - addNewHomework("Chemistry"); - }, - "Physics": function() { - addNewHomework("Physics"); - }, - "Religion": function() { - addNewHomework("Religion"); - }, - "Biology": function() { - addNewHomework("Biology"); - }, - "Music": function() { - addNewHomework("Music"); - }, - "History": function() { - addNewHomework("History"); - }, - "Arts": function() { - addNewHomework("Arts"); - }, - "Sports": function() { - addNewHomework("Sports"); - }, - - "Back": function() { - mode = "mainmenu"; - E.showMenu(mainMenu); - }, - - -}; - - function checkUnfinishedHomeworkAssembler() { homework = require("Storage").readJSON("homework.txt", "r"); var hwcount = Object.keys(homework.homework).length; mainCheckHomeworkMenu = { '': { - 'title': 'Unfinished HW:' + 'title': 'Archived HW:' } }; // This code snippet gets the unfinished HW and puts it in mainCheckHomeworkMenu - // btw mainCheckHomeworkMenu displays all the homework, when tapping on it you get more details with checkPreciseHomework function (currently being written) + // btw mainCheckHomeworkMenu displays all the homework, when tapping on it you get more details with checkPreciseHomework function for (var i = 0; i < hwcount; ++i) { if (homework.homework[i].done === false) { var currentsubject = i; //attempting to pass i - mainCheckHomeworkMenu[homework.homework[i].subject] = function() { - checkPreciseHomework(currentsubject); - }; + mainCheckHomeworkMenu[homework.homework[i].subject] = checkPreciseHomework.bind(null, currentsubject); } } @@ -115,6 +86,7 @@ function checkUnfinishedHomeworkAssembler() { mode = "mainmenu"; E.showMenu(mainMenu); }; + console.log(mainCheckHomeworkMenu); E.showMenu(mainCheckHomeworkMenu); } @@ -126,14 +98,13 @@ function checkFinishedHomeworkAssembler() { 'title': 'Unfinished HW:' } }; + // This code snippet gets the unfinished HW and puts it in mainCheckHomeworkMenu // btw mainCheckHomeworkMenu displays all the homework, when tapping on it you get more details with checkPreciseHomework function (currently being written) for (var i = 0; i < hwcount; ++i) { if (homework.homework[i].done === true) { var currentsubject = i; //attempting to pass i - mainCheckHomeworkMenu[homework.homework[i].subject] = function() { - checkPreciseHomework(currentsubject); - }; + mainCheckHomeworkMenu[homework.homework[i].subject] = checkPreciseHomework.bind(null, currentsubject); } } @@ -197,10 +168,11 @@ function pushHomework(subject, status, datetimehwdone) { } function addNewHomework(subject) { // Pass subject + console.log(subject); require("textinput").input().then(result => { if (result === "") { mode = "newhomework"; - E.showMenu(nhwmn); + newHomeworkMenu(); } else { var d = new Date(); // update time and date @@ -213,6 +185,8 @@ function addNewHomework(subject) { // Pass subject done: false, datetimerecievehw: datetime }); // TODO: when HW is done, add datetimeendhw !!! + console.log("subject is" + subject); + //homework.homework[subject] = result; require("Storage").write("homework.txt", JSON.stringify(homework)); E.showMenu(mainMenu); @@ -227,7 +201,7 @@ function main() { // why does this still exist E.showMenu(mainMenu); } else if (mode === "newhomework") { - E.showMenu(nhwmn); + newHomeworkMenu() } } From 6992c6f2f052f9108c209e3b0985bc5e3c6ed3e6 Mon Sep 17 00:00:00 2001 From: frigis1 <63980066+frigis1@users.noreply.github.com> Date: Sun, 15 May 2022 04:51:58 -0700 Subject: [PATCH 279/509] Update alarm.js --- apps/multitimer/alarm.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/multitimer/alarm.js b/apps/multitimer/alarm.js index 96e5ade89..208c374b6 100644 --- a/apps/multitimer/alarm.js +++ b/apps/multitimer/alarm.js @@ -38,7 +38,7 @@ function showAlarm(alarm) { if (!alarm.rp) alarm.on = false; } //reset timer value - alarm.timer = alarm.data; + alarm.timer = alarm.data.ot; // alarm is still a member of 'alarms', so writing to array writes changes back directly require("sched").setAlarms(alarms); load(); @@ -74,4 +74,4 @@ if (active.length) { } else { // otherwise just go back to default app setTimeout(load, 100); -} \ No newline at end of file +} From cfe8887b6ac5ad16006e26a1294ce32fa438029d Mon Sep 17 00:00:00 2001 From: frigis1 <63980066+frigis1@users.noreply.github.com> Date: Sun, 15 May 2022 04:52:11 -0700 Subject: [PATCH 280/509] Update app.js --- apps/multitimer/app.js | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/apps/multitimer/app.js b/apps/multitimer/app.js index faafc00a3..b514126f0 100644 --- a/apps/multitimer/app.js +++ b/apps/multitimer/app.js @@ -190,7 +190,7 @@ function timerMenu(idx) { //reset if (i == 2) { clearInt(); - a.timer = a.data; + a.timer = a.data.ot; if (a.on == true) a.on = false; saveAndReload(); } @@ -252,7 +252,8 @@ function editTimer(idx, a) { "< Back": () => { a.t = getCurrentTime() + a.timer; a.last = 0; - a.data = a.timer; + if (!a.data) a.data = {}; + a.data.ot = a.timer; a.appid = "multitimer"; a.js = "load('multitimer.alarm.js')"; if (idx < 0) alarms.push(a); From 1f7178150afdd14feb8341557effaaca6648665c Mon Sep 17 00:00:00 2001 From: JuliusS123 <42714028+JuliusS123@users.noreply.github.com> Date: Sun, 15 May 2022 14:22:01 +0200 Subject: [PATCH 281/509] Add files via upload --- apps/homework/subjects.html | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 apps/homework/subjects.html diff --git a/apps/homework/subjects.html b/apps/homework/subjects.html new file mode 100644 index 000000000..622719e2d --- /dev/null +++ b/apps/homework/subjects.html @@ -0,0 +1,30 @@ + + + + + + +

          Subjects:

          +

          Click

          + + + + + + From 27d63037837b9c7d9478d491b5d5d96b1e4dffe2 Mon Sep 17 00:00:00 2001 From: JuliusS123 <42714028+JuliusS123@users.noreply.github.com> Date: Sun, 15 May 2022 14:23:13 +0200 Subject: [PATCH 282/509] Update metadata.json --- apps/homework/metadata.json | 1 + 1 file changed, 1 insertion(+) diff --git a/apps/homework/metadata.json b/apps/homework/metadata.json index 07279c4ea..2ba1e918f 100644 --- a/apps/homework/metadata.json +++ b/apps/homework/metadata.json @@ -8,6 +8,7 @@ "tags": "tool", "supports" : ["BANGLEJS2"], "readme": "README.md", + "custom": "subjects.html", "storage": [ {"name":"homework.app.js","url":"app.js"}, {"name":"homework.img","url":"app-icon.js","evaluate":true} From 60f4cd8f9d3b4f4dc645e5d6d8c5713bc79cb2c6 Mon Sep 17 00:00:00 2001 From: JuliusS123 <42714028+JuliusS123@users.noreply.github.com> Date: Sun, 15 May 2022 14:26:51 +0200 Subject: [PATCH 283/509] Update app.js --- apps/homework/app.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/apps/homework/app.js b/apps/homework/app.js index c7e04ba9f..4ba786690 100644 --- a/apps/homework/app.js +++ b/apps/homework/app.js @@ -67,11 +67,11 @@ function checkUnfinishedHomeworkAssembler() { var hwcount = Object.keys(homework.homework).length; mainCheckHomeworkMenu = { '': { - 'title': 'Archived HW:' + 'title': 'Unfinished HW:' } }; // This code snippet gets the unfinished HW and puts it in mainCheckHomeworkMenu - // btw mainCheckHomeworkMenu displays all the homework, when tapping on it you get more details with checkPreciseHomework function + // btw mainCheckHomeworkMenu displays all the homework, when tapping on it you get more details with checkPreciseHomework function for (var i = 0; i < hwcount; ++i) { if (homework.homework[i].done === false) { var currentsubject = i; //attempting to pass i @@ -95,7 +95,7 @@ function checkFinishedHomeworkAssembler() { var hwcount = Object.keys(homework.homework).length; mainCheckHomeworkMenu = { '': { - 'title': 'Unfinished HW:' + 'title': 'Archived HW:' } }; From a1335bfe225419154009a4dcd5f7107fe59465e9 Mon Sep 17 00:00:00 2001 From: JuliusS123 <42714028+JuliusS123@users.noreply.github.com> Date: Sun, 15 May 2022 14:29:17 +0200 Subject: [PATCH 284/509] Update subjects.html --- apps/homework/subjects.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/homework/subjects.html b/apps/homework/subjects.html index 622719e2d..d3bf7a400 100644 --- a/apps/homework/subjects.html +++ b/apps/homework/subjects.html @@ -4,7 +4,7 @@ -

          Subjects:

          +

          Subjects:

          Click

          From 117b52cc080eca4d621d4525bd70d8d96555901c Mon Sep 17 00:00:00 2001 From: frigis1 <63980066+frigis1@users.noreply.github.com> Date: Sun, 15 May 2022 07:40:13 -0700 Subject: [PATCH 285/509] Update alarm.js --- apps/multitimer/alarm.js | 117 ++++++++++++++++++++++++++++++++------- 1 file changed, 96 insertions(+), 21 deletions(-) diff --git a/apps/multitimer/alarm.js b/apps/multitimer/alarm.js index 208c374b6..7daa0d45a 100644 --- a/apps/multitimer/alarm.js +++ b/apps/multitimer/alarm.js @@ -6,6 +6,73 @@ if (Bangle.SCHED) { delete Bangle.SCHED; } +function hardMode(tries, max) { + var R = Bangle.appRect; + + function adv() { + tries++; + hardMode(tries, max); + } + + function random(min, max) { // min and max included + return Math.floor(Math.random() * (max - min + 1) + min); + } + + if (tries < max) { + g.clear(); + g.reset(); + g.setClipRect(R.x,R.y,R.x2,R.y2); + var code = Math.abs(E.hwRand()%4); + if (code == 0) dir = "up"; + else if (code == 1) dir = "right"; + else if (code == 2) dir = "down"; + else dir = "left"; + g.setFont("6x8:2").setFontAlign(0,0).drawString(tries+"/"+max+"\nSwipe "+dir, (R.x2-R.x)/2, (R.y2-R.y)/2); + var drag; + Bangle.setUI({ + mode : "custom", + drag : e=>{ + if (!drag) { // start dragging + drag = {x: e.x, y: e.y}; + } else if (!e.b) { // released + const dx = e.x-drag.x, dy = e.y-drag.y; + drag = null; + //horizontal swipes + if (Math.abs(dx)>Math.abs(dy)+10) { + //left + if (dx<0 && code == 3) adv(); + //right + else if (dx>0 && code == 1) adv(); + //wrong swipe - reset + else startHM(); + } + //vertical swipes + else if (Math.abs(dy)>Math.abs(dx)+10) { + //up + if (dy<0 && code == 0) adv(); + //down + else if (dy>0 && code == 2) adv(); + //wrong swipe - reset + else startHM(); + } + } + } + }); + } + else { + if (!active[0].timer) active[0].last = (new Date()).getDate(); + if (!active[0].rp) active[0].on = false; + if (active[0].timer) active[0].timer = active[0].data.ot; + require("sched").setAlarms(alarms); + load(); + } +} + +function startHM() { + //between 5-8 random swipes + hardMode(0, Math.abs(E.hwRand()%4)+5); +} + function showAlarm(alarm) { const settings = require("sched").getSettings(); @@ -21,28 +88,36 @@ function showAlarm(alarm) { let buzzCount = settings.buzzCount; - E.showPrompt(msg,{ - title: "TIMER!", - buttons : {"Snooze":true,"Ok":false} // default is sleep so it'll come back in 10 mins - }).then(function(sleep) { - buzzCount = 0; - if (sleep) { - if(alarm.ot===undefined) alarm.ot = alarm.t; - alarm.t += settings.defaultSnoozeMillis; - } else { - if (!alarm.timer) alarm.last = (new Date()).getDate(); - if (alarm.ot!==undefined) { - alarm.t = alarm.ot; - delete alarm.ot; + if (alarm.data.hm && alarm.data.hm == true) { + //hard mode extends auto-snooze time + buzzCount = buzzCount * 2; + startHM(); + } + + else { + E.showPrompt(msg,{ + title: "TIMER!", + buttons : {"Snooze":true,"Ok":false} // default is sleep so it'll come back in 10 mins + }).then(function(sleep) { + buzzCount = 0; + if (sleep) { + if(alarm.ot===undefined) alarm.ot = alarm.t; + alarm.t += settings.defaultSnoozeMillis; + } else { + if (!alarm.timer) alarm.last = (new Date()).getDate(); + if (alarm.ot!==undefined) { + alarm.t = alarm.ot; + delete alarm.ot; + } + if (!alarm.rp) alarm.on = false; } - if (!alarm.rp) alarm.on = false; - } - //reset timer value - alarm.timer = alarm.data.ot; - // alarm is still a member of 'alarms', so writing to array writes changes back directly - require("sched").setAlarms(alarms); - load(); - }); + //reset timer value + if (alarm.timer) alarm.timer = alarm.data.ot; + // alarm is still a member of 'alarms', so writing to array writes changes back directly + require("sched").setAlarms(alarms); + load(); + }); + } function buzz() { if (settings.unlockAtBuzz) { From 2e36770a706e4b8e7177bf1163c11ac87706b3c1 Mon Sep 17 00:00:00 2001 From: frigis1 <63980066+frigis1@users.noreply.github.com> Date: Sun, 15 May 2022 07:40:32 -0700 Subject: [PATCH 286/509] Update app.js --- apps/multitimer/app.js | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/apps/multitimer/app.js b/apps/multitimer/app.js index b514126f0..becaf6169 100644 --- a/apps/multitimer/app.js +++ b/apps/multitimer/app.js @@ -227,6 +227,10 @@ function editTimer(idx, a) { if (idx < 0) a = require("sched").newDefaultTimer(); else a = timers[idx]; } + if (!a.data) { + a.data = {}; + a.data.hm = false; + } var t = decodeTime(a.timer); function editMsg(idx, a) { @@ -252,7 +256,6 @@ function editTimer(idx, a) { "< Back": () => { a.t = getCurrentTime() + a.timer; a.last = 0; - if (!a.data) a.data = {}; a.data.ot = a.timer; a.appid = "multitimer"; a.js = "load('multitimer.alarm.js')"; @@ -288,6 +291,11 @@ function editTimer(idx, a) { a.timer = encodeTime(t); } }, + "Hard Mode": { + value: a.data.hm, + format: v => v ? "On" : "Off", + onchange: v => a.data.hm = v + }, "Vibrate": require("buzz_menu").pattern(a.vibrate, v => a.vibrate = v), "Msg": { value: !a.msg ? "" : a.msg.length > 6 ? a.msg.substring(0, 6)+"..." : a.msg, @@ -550,6 +558,10 @@ function editAlarm(idx, a) { if (idx >= 0) a = alarms[alarmIdx[idx]]; else a = require("sched").newDefaultAlarm(); } + if (!a.data) { + a.data = {}; + a.data.hm = false; + } var t = decodeTime(a.t); function editMsg(idx, a) { @@ -573,6 +585,8 @@ function editAlarm(idx, a) { var menu = { "": { "title": "Alarm" }, "< Back": () => { + if (a.data.hm == true) a.js = "load('multitimer.alarm.js')"; + if (a.data.hm == false && a.js) delete a.js; if (idx >= 0) alarms[alarmIdx[idx]] = a; else alarms.push(a); require("sched").setAlarms(alarms); @@ -607,6 +621,11 @@ function editAlarm(idx, a) { value: "SMTWTFS".split("").map((d,n)=>a.dow&(1< editDOW(a.dow, d=>{a.dow=d;editAlarm(idx,a);}) }, + "Hard Mode": { + value: a.data.hm, + format: v => v ? "On" : "Off", + onchange: v => a.data.hm = v + }, "Vibrate": require("buzz_menu").pattern(a.vibrate, v => a.vibrate = v), "Auto Snooze": { value: a.as, From 9cc825b93da6b47c918899d3ac4002bb9cbd5989 Mon Sep 17 00:00:00 2001 From: frigis1 <63980066+frigis1@users.noreply.github.com> Date: Sun, 15 May 2022 07:40:55 -0700 Subject: [PATCH 287/509] Update README.md --- apps/multitimer/README.md | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/apps/multitimer/README.md b/apps/multitimer/README.md index 0cc747c28..f8e14f518 100644 --- a/apps/multitimer/README.md +++ b/apps/multitimer/README.md @@ -1,8 +1,10 @@ # Multi Timer With this app, you can set timers and chronographs (stopwatches) and watch them count down/up in real time. You can also set alarms - swipe left or right to switch between the three functions. +"Hard mode" is also available for timers and alarms. It will double the number of buzz counts and you will have to swipe the screen five to eight times correctly - make a mistake, and you will need to start over. + ## WARNING -* Editing timers in another app (such as the default Alarm app) is not recommended. Editing alarms should not be a problem. +* Editing timers in another app (such as the default Alarm app) is not recommended. Editing alarms should not be a problem (in theory). * This app uses the [Scheduler library](https://banglejs.com/apps/?id=sched). -* To avoid potential conflicts with other apps that uses sched (especially ones that make use of the data field), this app only lists timers that it created - all other timers will be ignored. -* A keyboard app is only used for adding messages to timers and is therefore not strictly needed. \ No newline at end of file +* To avoid potential conflicts with other apps that uses sched (especially ones that make use of the data and js field), this app only lists timers and alarms that it created - any made outside the app will be ignored. +* A keyboard app is only used for adding messages to timers and is therefore not strictly needed. From fc164df525f3617a1315e23b9d959be462202b36 Mon Sep 17 00:00:00 2001 From: frigis1 <63980066+frigis1@users.noreply.github.com> Date: Sun, 15 May 2022 08:42:24 -0700 Subject: [PATCH 288/509] Update README.md --- apps/multitimer/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/multitimer/README.md b/apps/multitimer/README.md index f8e14f518..f1e2eb281 100644 --- a/apps/multitimer/README.md +++ b/apps/multitimer/README.md @@ -6,5 +6,5 @@ With this app, you can set timers and chronographs (stopwatches) and watch them ## WARNING * Editing timers in another app (such as the default Alarm app) is not recommended. Editing alarms should not be a problem (in theory). * This app uses the [Scheduler library](https://banglejs.com/apps/?id=sched). -* To avoid potential conflicts with other apps that uses sched (especially ones that make use of the data and js field), this app only lists timers and alarms that it created - any made outside the app will be ignored. +* To avoid potential conflicts with other apps that uses sched (especially ones that make use of the data and js field), this app only lists timers and alarms that it created - any made outside the app will be ignored. GB alarms are currently an exception as they do not make use of the data and js field. * A keyboard app is only used for adding messages to timers and is therefore not strictly needed. From 15f395f5768a5385d98537875858d299bf0b9eba Mon Sep 17 00:00:00 2001 From: frigis1 <63980066+frigis1@users.noreply.github.com> Date: Sun, 15 May 2022 08:49:06 -0700 Subject: [PATCH 289/509] Update alarm.js --- apps/multitimer/alarm.js | 4 ---- 1 file changed, 4 deletions(-) diff --git a/apps/multitimer/alarm.js b/apps/multitimer/alarm.js index 7daa0d45a..fc0195455 100644 --- a/apps/multitimer/alarm.js +++ b/apps/multitimer/alarm.js @@ -14,10 +14,6 @@ function hardMode(tries, max) { hardMode(tries, max); } - function random(min, max) { // min and max included - return Math.floor(Math.random() * (max - min + 1) + min); - } - if (tries < max) { g.clear(); g.reset(); From 12f84357caabca9855645299a8aaa48ed3213567 Mon Sep 17 00:00:00 2001 From: Richard de Boer Date: Thu, 12 May 2022 23:19:43 +0200 Subject: [PATCH 290/509] add ClockFace module --- modules/ClockFace.js | 103 ++++++++++++++++++++++++++++++++++++++++ modules/ClockFace.md | 110 +++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 213 insertions(+) create mode 100644 modules/ClockFace.js create mode 100644 modules/ClockFace.md diff --git a/modules/ClockFace.js b/modules/ClockFace.js new file mode 100644 index 000000000..9818ae4e3 --- /dev/null +++ b/modules/ClockFace.js @@ -0,0 +1,103 @@ +/* +Most of the boilerplate needed to run a clock. +See ClockFace.md for documentation +*/ +function ClockFace(options) { + if ("function"=== typeof options) options = {draw: options}; // simple usage + // some validation, in the hopes of at least catching typos/basic mistakes + Object.keys(options).forEach(k => { + if (![ + "precision", + "init", "draw", "update", + "pause", "resume", + "up", "down", "upDown" + ].includes(k)) throw `Invalid ClockFace option: ${k}`; + }); + if (!options.draw && !options.update) throw "ClockFace needs at least one of draw() or update() functions"; + this.draw = options.draw || (t=> { + options.update.apply(this, [t, {d: true, h: true, m: true, s: true}]); + }); + this.update = options.update || (t => { + g.clear(); + options.draw.apply(this, [t, {d: true, h: true, m: true, s: true}]); + }); + if (options.precision===1000||options.precision===60000) throw "ClockFace precision is in seconds, not ms"; + this.precision = (options.precision || 60); + if (options.init) this.init = options.init; + if (options.pause) this._pause = options.pause; + if (options.resume) this._resume = options.resume; + if ((options.up || options.down) && options.upDown) throw "ClockFace up/down and upDown cannot be used together"; + if (options.up || options.down) this._upDown = (dir) => { + if (dir<0 && options.up) options.up.apply(this); + if (dir>0 && options.down) options.down.apply(this); + }; + if (options.upDown) this._upDown = options.upDown; +} + +ClockFace.prototype.tick = function() { + const time = new Date(); + const now = { + d: `${time.getFullYear()}-${time.getMonth()}-${time.getDate()}`, + h: time.getHours(), + m: time.getMinutes(), + s: time.getSeconds(), + }; + if (!this._last) { + g.clear(true); + Bangle.drawWidgets(); + g.reset(); + this.draw.apply(this, [time, {d: true, h: true, m: true, s: true}]); + } else { + let c = {d: false, h: false, m: false, s: false}; // changed + if (now.d!==this._last.d) c.d = c.h = c.m = c.s = true; + else if (now.h!==this._last.h) c.h = c.m = c.s = true; + else if (now.m!==this._last.m) c.m = c.s = true; + else if (now.s!==this._last.s) c.s = true; + g.reset(); + this.update.apply(this, [time, c]); + } + this._last = now; + if (this.paused) return; // called redraw() while still paused + // figure out timeout: if e.g. precision=60s, update at the start of a new minute + const interval = this.precision*1000; + this._timeout = setTimeout(() => this.tick(), interval-(Date.now()%interval)); +}; + +ClockFace.prototype.start = function() { + Bangle.loadWidgets(); + if (this.init) this.init.apply(this); + if (this._upDown) Bangle.setUI("clockupdown", d=>this._upDown.apply(this,[d])); + else Bangle.setUI("clock"); + delete this._last; + this.tick(); + + Bangle.on("lcdPower", on => { + if (on) this.resume(); + else this.pause(); + }); +}; + +ClockFace.prototype.pause = function() { + if (!this._timeout) return; // already paused + clearTimeout(this._timeout); + delete this._timeout; + this.paused = true; // apps might want to check this + if (this._pause) this._pause.apply(this); +}; +ClockFace.prototype.resume = function() { + if (this._timeout) return; // not paused + delete this._last; + delete this.paused; + if (this._resume) this._resume.apply(this); + this.tick(true); +}; + +/** + * Force a complete redraw + */ +ClockFace.prototype.redraw = function() { + delete this._last; + this.tick(); +}; + +exports = ClockFace; \ No newline at end of file diff --git a/modules/ClockFace.md b/modules/ClockFace.md new file mode 100644 index 000000000..1da6e6020 --- /dev/null +++ b/modules/ClockFace.md @@ -0,0 +1,110 @@ +ClockFace +========= + +This module handles most of the tasks needed to set up a clock, so you can +concentrate on drawing the time. + +Example +------- +Tthe [tutorial clock](https://www.espruino.com/Bangle.js+Clock) converted to use +this module: + +```js + +// Load fonts +require("Font7x11Numeric7Seg").add(Graphics); +// position on screen +const X = 160, Y = 140; + +var ClockFace = require("ClockFace"); +var clock = new ClockFace({ + precision: 1, // update every second + draw: function(d) { + // work out how to display the current time + var h = d.getHours(), m = d.getMinutes(); + var time = (" "+h).substr(-2)+":"+("0"+m).substr(-2); + // draw the current time (4x size 7 segment) + g.setFont("7x11Numeric7Seg", 4); + g.setFontAlign(1, 1); // align right bottom + g.drawString(time, X, Y, true /*clear background*/); + // draw the seconds (2x size 7 segment) + g.setFont("7x11Numeric7Seg", 2); + g.drawString(("0"+d.getSeconds()).substr(-2), X+30, Y, true /*clear background*/); + // draw the date, in a normal font + g.setFont("6x8"); + g.setFontAlign(0, 1); // align center bottom + // pad the date - this clears the background if the date were to change length + var dateStr = " "+require("locale").date(d)+" "; + g.drawString(dateStr, g.getWidth()/2, Y+15, true /*clear background*/); + } +}); +clock.start(); + +``` + + + +Complete Usage +-------------- + +```js + +var ClockFace = require("ClockFace"); +var clock = new ClockFace({ + precision: 1, // optional, defaults to 60: how often to call update(), in seconds + init: function() { // optional + // called only once before starting the clock, but after setting up the + // screen/widgets, so you can use Bangle.appRect + }, + draw: function(time, changed) { // at least draw or update is required + // (re)draw entire clockface, time is a Date object + // `changed` is the same format as for update() below, but always all true + }, + // The difference between draw() and update() is that the screen is cleared + // before draw() is called, so it needs to always redraw the entire clock + update: function(time, changed) { // at least draw or update is required + // redraw date/time, time is a Date object + // if you want, you can only redraw the changed parts: + if (changed.d) // redraw date (changed.h/m/s will also all be true) + if (changed.h) // redraw hours + if (changed.m) // redraw minutes + if (changed.s) // redraw seconds + }, + pause: function() { // optional, called when the screen turns off + // for example: turn off GPS/compass if the watch used it + }, + resume: function() { // optional, called when the screen turns on + // for example: turn GPS/compass back on + }, + up: function() { // optional, up handler + }, + down: function() { // optional, down handler + }, + upDown: function(dir) { // optional, combined up/down handler + if (dir === -1) // Up + else // (dir === 1): Down + }, + }); +clock.start(); + +``` + + +Simple Usage +------------ +Basic clocks can pass just a function to redraw the entire screen every minute: + +```js + +var ClockFace = require("ClockFace"); +var clock = new ClockFace(function(time) { + // draw the current time at the center of the screen + g.setFont("Vector:50").setFontAlign(0, 0) + .drawString( + require("locale").time(time, true), + Bangle.appRect.w/2, Bangle.appRect.h/2 + ); +}); +clock.start(); + +``` \ No newline at end of file From 8f342e27cc172b3694edc5227dba724810395396 Mon Sep 17 00:00:00 2001 From: Richard de Boer Date: Sun, 15 May 2022 18:25:18 +0200 Subject: [PATCH 291/509] barclock: Use ClockFace library --- apps/barclock/ChangeLog | 1 + apps/barclock/clock-bar.js | 105 ++++++++++++++++-------------------- apps/barclock/metadata.json | 2 +- 3 files changed, 48 insertions(+), 60 deletions(-) diff --git a/apps/barclock/ChangeLog b/apps/barclock/ChangeLog index 316660fc6..0b8470b6a 100644 --- a/apps/barclock/ChangeLog +++ b/apps/barclock/ChangeLog @@ -7,3 +7,4 @@ 0.07: Update to use Bangle.setUI instead of setWatch 0.08: Use theme colors, Layout library 0.09: Fix time/date disappearing after fullscreen notification +0.10: Use ClockFace library diff --git a/apps/barclock/clock-bar.js b/apps/barclock/clock-bar.js index 5d46a1cb4..a465bb692 100644 --- a/apps/barclock/clock-bar.js +++ b/apps/barclock/clock-bar.js @@ -11,13 +11,9 @@ let locale = require("locale"); date.setMonth(1, 3); // februari: months are zero-indexed const localized = locale.date(date, true); locale.dayFirst = /3.*2/.test(localized); - - locale.hasMeridian = false; - if (typeof locale.meridian==="function") { // function does not exist if languages app is not installed - locale.hasMeridian = (locale.meridian(date)!==""); - } + locale.hasMeridian = (locale.meridian(date)!==""); } -Bangle.loadWidgets(); + function renderBar(l) { if (!this.fraction) { // zero-size fillRect stills draws one line of pixels, we don't want that @@ -27,32 +23,6 @@ function renderBar(l) { g.fillRect(l.x, l.y, l.x+width-1, l.y+l.height-1); } -const Layout = require("Layout"); -const layout = new Layout({ - type: "v", c: [ - { - type: "h", c: [ - {id: "time", label: "88:88", type: "txt", font: "6x8:5", bgCol: g.theme.bg}, // size updated below - {id: "ampm", label: " ", type: "txt", font: "6x8:2", bgCol: g.theme.bg}, - ], - }, - {id: "bar", type: "custom", fraction: 0, fillx: 1, height: 6, col: g.theme.fg2, render: renderBar}, - {height: 40}, - {id: "date", type: "txt", font: "10%", valign: 1}, - ], -}, {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) { - // Maximum font size = ( - ) / (5chars * 6px) - thickness = Math.floor((g.getWidth()-24)/(5*6)); -} else { - layout.ampm.label = ""; - thickness = Math.floor(g.getWidth()/(5*6)); -} -layout.bar.height = thickness+1; -layout.time.font = "6x8:"+thickness; -layout.update(); function timeText(date) { if (!is12Hour) { @@ -78,31 +48,48 @@ function dateText(date) { return `${dayName} ${dayMonth}`; } -draw = function draw(force) { - if (!Bangle.isLCDOn()) {return;} // no drawing, also no new update scheduled - const date = new Date(); - layout.time.label = timeText(date); - layout.ampm.label = ampmText(date); - layout.date.label = dateText(date); - const SECONDS_PER_MINUTE = 60; - layout.bar.fraction = date.getSeconds()/SECONDS_PER_MINUTE; - if (force) { - Bangle.drawWidgets(); - layout.forgetLazyState(); - } - layout.render(); - // schedule update at start of next second - const millis = date.getMilliseconds(); - setTimeout(draw, 1000-millis); -}; -// Show launcher when button pressed -Bangle.setUI("clock"); -Bangle.on("lcdPower", function(on) { - if (on) { - draw(true); - } -}); -g.reset().clear(); -Bangle.drawWidgets(); -draw(); +const ClockFace = require("ClockFace"), + clock = new ClockFace({ + precision:1, + init: function() { + const Layout = require("Layout"); + this.layout = new Layout({ + type: "v", c: [ + { + type: "h", c: [ + {id: "time", label: "88:88", type: "txt", font: "6x8:5", col:g.theme.fg, bgCol: g.theme.bg}, // size updated below + {id: "ampm", label: " ", type: "txt", font: "6x8:2", col:g.theme.fg, bgCol: g.theme.bg}, + ], + }, + {id: "bar", type: "custom", fraction: 0, fillx: 1, height: 6, col: g.theme.fg2, render: renderBar}, + {height: 40}, + {id: "date", type: "txt", font: "10%", valign: 1}, + ], + }, {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) { + // Maximum font size = ( - ) / (5chars * 6px) + thickness = Math.floor((Bangle.appRect.w-24)/(5*6)); + } else { + this.layout.ampm.label = ""; + thickness = Math.floor(Bangle.appRect.w/(5*6)); + } + this.layout.bar.height = thickness+1; + this.layout.time.font = "6x8:"+thickness; + this.layout.update(); + }, + update: function(date, c) { + if (c.m) this.layout.time.label = timeText(date); + if (c.h) this.layout.ampm.label = ampmText(date); + if (c.d) this.layout.date.label = dateText(date); + const SECONDS_PER_MINUTE = 60; + if (c.s) this.layout.bar.fraction = date.getSeconds()/SECONDS_PER_MINUTE; + this.layout.render(); + }, + resume: function() { + this.layout.forgetLazyState(); + }, + }); +clock.start(); diff --git a/apps/barclock/metadata.json b/apps/barclock/metadata.json index 2b7be355f..3ee7ccb3a 100644 --- a/apps/barclock/metadata.json +++ b/apps/barclock/metadata.json @@ -1,7 +1,7 @@ { "id": "barclock", "name": "Bar Clock", - "version": "0.09", + "version": "0.10", "description": "A simple digital clock showing seconds as a bar", "icon": "clock-bar.png", "screenshots": [{"url":"screenshot.png"},{"url":"screenshot_pm.png"}], From 6f68e07d665c82289680304aa2afc4804c21ff9c Mon Sep 17 00:00:00 2001 From: thyttan <97237430+thyttan@users.noreply.github.com> Date: Sun, 15 May 2022 19:27:40 +0200 Subject: [PATCH 292/509] Don't change page if doing swipe-to-exit --- apps/dtlaunch/app-b2.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/dtlaunch/app-b2.js b/apps/dtlaunch/app-b2.js index 8466a7414..46194ec5d 100644 --- a/apps/dtlaunch/app-b2.js +++ b/apps/dtlaunch/app-b2.js @@ -93,7 +93,7 @@ Bangle.on("swipe",(dirLeftRight, dirUpDown)=>{ if (dirUpDown==-1||dirLeftRight==-1){ ++page; if (page>maxPage) page=0; drawPage(page); - } else if (dirUpDown==1||dirLeftRight==1){ + } else if (dirUpDown==1||(dirLeftRight==1 && !settings.swipeExit)){ --page; if (page<0) page=maxPage; drawPage(page); } From 3f29aff90a59827226e56b659c506913ae68ac63 Mon Sep 17 00:00:00 2001 From: thyttan <97237430+thyttan@users.noreply.github.com> Date: Sun, 15 May 2022 19:32:37 +0200 Subject: [PATCH 293/509] Up and down also moves pages --- apps/dtlaunch/README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/dtlaunch/README.md b/apps/dtlaunch/README.md index bea20ef65..55c9f53b8 100644 --- a/apps/dtlaunch/README.md +++ b/apps/dtlaunch/README.md @@ -29,6 +29,6 @@ Bangle 2: **Touch** - icon to select, scond touch launches app -**Swipe Left** - move to next page of app icons +**Swipe Left/Up** - move to next page of app icons -**Swipe Right** - move to previous page of app icons +**Swipe Right/Down** - move to previous page of app icons From 7a6aa8158b80c23778accd5e5e0bf34355ad5c2b Mon Sep 17 00:00:00 2001 From: thyttan <97237430+thyttan@users.noreply.github.com> Date: Sun, 15 May 2022 19:36:22 +0200 Subject: [PATCH 294/509] Don't change page if doing swipe-to-exit --- apps/dtlaunch/ChangeLog | 1 + 1 file changed, 1 insertion(+) diff --git a/apps/dtlaunch/ChangeLog b/apps/dtlaunch/ChangeLog index 95952b9fe..09804b82e 100644 --- a/apps/dtlaunch/ChangeLog +++ b/apps/dtlaunch/ChangeLog @@ -11,3 +11,4 @@ 0.11: Fix bangle.js 1 white icons not displaying 0.12: On Bangle 2 change to swiping up/down to move between pages as to match page indicator. Swiping from left to right now loads the clock. 0.13: Added swipeExit setting so that left-right to exit is an option +0.14: Don't move pages when doing exit swipe. From f9af4b064010b9e361b6255a05969b6fe7e30e44 Mon Sep 17 00:00:00 2001 From: thyttan <97237430+thyttan@users.noreply.github.com> Date: Sun, 15 May 2022 19:36:46 +0200 Subject: [PATCH 295/509] Update metadata.json --- apps/dtlaunch/metadata.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/dtlaunch/metadata.json b/apps/dtlaunch/metadata.json index 7784972ca..4a0b8067c 100644 --- a/apps/dtlaunch/metadata.json +++ b/apps/dtlaunch/metadata.json @@ -1,7 +1,7 @@ { "id": "dtlaunch", "name": "Desktop Launcher", - "version": "0.13", + "version": "0.14", "description": "Desktop style App Launcher with six (four for Bangle 2) apps per page - fast access if you have lots of apps installed.", "screenshots": [{"url":"shot1.png"},{"url":"shot2.png"},{"url":"shot3.png"}], "icon": "icon.png", From e3ff844215c068376460f2022b3052198d9aad1c Mon Sep 17 00:00:00 2001 From: David Peer Date: Sun, 15 May 2022 21:45:56 +0200 Subject: [PATCH 296/509] Improved positioning of BW clock. --- apps/bwclk/ChangeLog | 3 ++- apps/bwclk/app.js | 19 ++++++++++--------- apps/bwclk/metadata.json | 2 +- 3 files changed, 13 insertions(+), 11 deletions(-) diff --git a/apps/bwclk/ChangeLog b/apps/bwclk/ChangeLog index 11569af0c..89fcea519 100644 --- a/apps/bwclk/ChangeLog +++ b/apps/bwclk/ChangeLog @@ -3,4 +3,5 @@ 0.03: Adapt colors based on the theme of the user. 0.04: Steps can be hidden now such that the time is even larger. 0.05: Included icons for information. -0.06: Design and usability improvements. \ No newline at end of file +0.06: Design and usability improvements. +0.07: Improved positioning. \ No newline at end of file diff --git a/apps/bwclk/app.js b/apps/bwclk/app.js index 5240e69ec..0fe71b240 100644 --- a/apps/bwclk/app.js +++ b/apps/bwclk/app.js @@ -259,11 +259,12 @@ function draw() { function drawDate(){ // Draw background - var y = H/5*2 + (settings.fullscreen ? 0 : 8); + var y = H/5*2; g.reset().clearRect(0,0,W,W); // Draw date - y -= settings.fullscreen ? 8 : 0; + y = parseInt(y/2); + y += settings.fullscreen ? 0 : 15; var date = new Date(); var dateStr = date.getDate(); dateStr = ("0" + dateStr).substr(-2); @@ -276,14 +277,14 @@ function drawDate(){ var dayW = Math.max(g.stringWidth(dayStr), g.stringWidth(monthStr)); var fullDateW = dateW + 10 + dayW; - g.setFontAlign(-1,1); + g.setFontAlign(-1,0); g.setMediumFont(); g.setColor(g.theme.fg); g.drawString(dateStr, W/2 - fullDateW / 2, y+5); g.setSmallFont(); - g.drawString(monthStr, W/2 - fullDateW/2 + 10 + dateW, y+3); - g.drawString(dayStr, W/2 - fullDateW/2 + 10 + dateW, y-23); + g.drawString(monthStr, W/2 - fullDateW/2 + 10 + dateW, y+14); + g.drawString(dayStr, W/2 - fullDateW/2 + 10 + dateW, y-10); } @@ -296,9 +297,9 @@ function drawTime(){ // Draw time g.setColor(g.theme.bg); - g.setFontAlign(0,-1); + g.setFontAlign(0,0); var timeStr = locale.time(date,1); - y += settings.fullscreen ? 14 : 10; + y += parseInt((H - y)/2) + 5; var infoEntry = getInfoEntry(); var infoStr = infoEntry[0]; @@ -307,9 +308,9 @@ function drawTime(){ // Show large or small time depending on info entry if(infoStr == null){ - y += 10; g.setLargeFont(); } else { + y -= 15; g.setMediumFont(); } g.drawString(timeStr, W/2, y); @@ -319,7 +320,7 @@ function drawTime(){ return; } - y += H/5*2-5; + y += 35; g.setFontAlign(0,0); g.setSmallFont(); var imgWidth = 0; diff --git a/apps/bwclk/metadata.json b/apps/bwclk/metadata.json index 8b13cd256..59d044eb3 100644 --- a/apps/bwclk/metadata.json +++ b/apps/bwclk/metadata.json @@ -1,7 +1,7 @@ { "id": "bwclk", "name": "BW Clock", - "version": "0.06", + "version": "0.07", "description": "BW Clock.", "readme": "README.md", "icon": "app.png", From 275f6a87d5e043a37baafb1644e96f3c9e33b318 Mon Sep 17 00:00:00 2001 From: thyttan <97237430+thyttan@users.noreply.github.com> Date: Mon, 16 May 2022 11:51:59 +0200 Subject: [PATCH 297/509] add fixed and equal button width for all buttons replaced fillx:1 with width:btnWidth --- apps/kbmulti/lib.js | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/apps/kbmulti/lib.js b/apps/kbmulti/lib.js index c8abf98b4..b099603cb 100644 --- a/apps/kbmulti/lib.js +++ b/apps/kbmulti/lib.js @@ -24,6 +24,7 @@ exports.input = function(options) { var charIndex; // index in letters[charCurrent] var caps = true; var layout; + var btnWidth = g.getWidth()/3 function displayText(hideMarker) { layout.clear(layout.text); @@ -107,19 +108,19 @@ exports.input = function(options) { (settings.showHelpBtn ? {type:"btn", font:'6x8', label:'?', cb: l=>onHelp(resolve,reject), filly:1 } : {}), ]}, {type:"h", c: [ - {type:"btn", font:fontSize, label:letters[1], cb: l=>onKeyPad(1), id:'1', fillx:1, filly:1 }, - {type:"btn", font:fontSize, label:letters[2], cb: l=>onKeyPad(2), id:'2', fillx:1, filly:1 }, - {type:"btn", font:fontSize, label:letters[3], cb: l=>onKeyPad(3), id:'3', fillx:1, filly:1 }, + {type:"btn", font:fontSize, label:letters[1], cb: l=>onKeyPad(1), id:'1', width:btnWidth, filly:1 }, + {type:"btn", font:fontSize, label:letters[2], cb: l=>onKeyPad(2), id:'2', width:btnWidth, filly:1 }, + {type:"btn", font:fontSize, label:letters[3], cb: l=>onKeyPad(3), id:'3', width:btnWidth, filly:1 }, ]}, {type:"h", filly:1, c: [ - {type:"btn", font:fontSize, label:letters[4], cb: l=>onKeyPad(4), id:'4', fillx:1, filly:1 }, - {type:"btn", font:fontSize, label:letters[5], cb: l=>onKeyPad(5), id:'5', fillx:1, filly:1 }, - {type:"btn", font:fontSize, label:letters[6], cb: l=>onKeyPad(6), id:'6', fillx:1, filly:1 }, + {type:"btn", font:fontSize, label:letters[4], cb: l=>onKeyPad(4), id:'4', width:btnWidth, filly:1 }, + {type:"btn", font:fontSize, label:letters[5], cb: l=>onKeyPad(5), id:'5', width:btnWidth, filly:1 }, + {type:"btn", font:fontSize, label:letters[6], cb: l=>onKeyPad(6), id:'6', width:btnWidth, filly:1 }, ]}, {type:"h", filly:1, c: [ - {type:"btn", font:fontSize, label:letters[7], cb: l=>onKeyPad(7), id:'7', fillx:1, filly:1 }, - {type:"btn", font:fontSize, label:letters[8], cb: l=>onKeyPad(8), id:'8', fillx:1, filly:1 }, - {type:"btn", font:fontSize, label:letters[9], cb: l=>onKeyPad(9), id:'9', fillx:1, filly:1 }, + {type:"btn", font:fontSize, label:letters[7], cb: l=>onKeyPad(7), id:'7', width:btnWidth, filly:1 }, + {type:"btn", font:fontSize, label:letters[8], cb: l=>onKeyPad(8), id:'8', width:btnWidth, filly:1 }, + {type:"btn", font:fontSize, label:letters[9], cb: l=>onKeyPad(9), id:'9', width:btnWidth, filly:1 }, ]}, ] },{back: ()=>{ From 9a98a518dea0f8ce6a36f37f632eb07d5e8000fb Mon Sep 17 00:00:00 2001 From: thyttan <97237430+thyttan@users.noreply.github.com> Date: Mon, 16 May 2022 11:52:59 +0200 Subject: [PATCH 298/509] Update lib.js --- apps/kbmulti/lib.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/kbmulti/lib.js b/apps/kbmulti/lib.js index b099603cb..5ccab4204 100644 --- a/apps/kbmulti/lib.js +++ b/apps/kbmulti/lib.js @@ -115,7 +115,7 @@ exports.input = function(options) { {type:"h", filly:1, c: [ {type:"btn", font:fontSize, label:letters[4], cb: l=>onKeyPad(4), id:'4', width:btnWidth, filly:1 }, {type:"btn", font:fontSize, label:letters[5], cb: l=>onKeyPad(5), id:'5', width:btnWidth, filly:1 }, - {type:"btn", font:fontSize, label:letters[6], cb: l=>onKeyPad(6), id:'6', width:btnWidth, filly:1 }, + {type:"btn", font:fontSize, label:letters[6], cb: l=>onKeyPad(6), id:'6', width:btnWidth, filly:1 }, ]}, {type:"h", filly:1, c: [ {type:"btn", font:fontSize, label:letters[7], cb: l=>onKeyPad(7), id:'7', width:btnWidth, filly:1 }, From fd35af1bd67cae273d1278961328e16db80346be Mon Sep 17 00:00:00 2001 From: thyttan <97237430+thyttan@users.noreply.github.com> Date: Mon, 16 May 2022 12:34:46 +0200 Subject: [PATCH 299/509] Update ChangeLog --- apps/kbmulti/ChangeLog | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/kbmulti/ChangeLog b/apps/kbmulti/ChangeLog index c6c606bff..709aa3203 100644 --- a/apps/kbmulti/ChangeLog +++ b/apps/kbmulti/ChangeLog @@ -1,2 +1,2 @@ 0.01: New keyboard -0.02: Introduce setting "Show help button?". Make setting firstLaunch invisible by removing corresponding code from settings.js. Add marker that shows when character selection timeout has run out. Display opened text on launch when editing existing text string. +0.02: Introduce setting "Show help button?". Make setting firstLaunch invisible by removing corresponding code from settings.js. Add marker that shows when character selection timeout has run out. Display opened text on launch when editing existing text string. Perfect horizontal alignment of buttons. Tweak help message letter casing. From b4b6d424ecc18b85554cf84b88f23a341ac4fc86 Mon Sep 17 00:00:00 2001 From: thyttan <97237430+thyttan@users.noreply.github.com> Date: Mon, 16 May 2022 12:42:07 +0200 Subject: [PATCH 300/509] perfect horizontal button alignment --- apps/kbmulti/screenshot_3.png | Bin 3674 -> 3503 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/apps/kbmulti/screenshot_3.png b/apps/kbmulti/screenshot_3.png index e0da184baa34c29285e7cd5b76d93638450a6cf4..882ea73862fe0c46c8a984fbc9b6c63afe1dc4a9 100644 GIT binary patch delta 3489 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 From 7f9bf3a758c090b8d69839f2a5e871796cf6377e Mon Sep 17 00:00:00 2001 From: Gordon Williams Date: Mon, 16 May 2022 14:32:35 +0100 Subject: [PATCH 301/509] Add option to use lower write size for phones with potentially iffy Bluetooth stacks (fix #)1834 --- index.html | 4 ++++ loader.js | 11 +++++++++++ 2 files changed, 15 insertions(+) diff --git a/index.html b/index.html index de7facd5a..b141cffc9 100644 --- a/index.html +++ b/index.html @@ -147,6 +147,10 @@ Always update time when we connect +
          + +
          + +
          + + + + + +
          + +
          + + +
          + + + + + + + + + + + + + + + + + From fd9569ffa9a12346d83844cc1f25341c906970c2 Mon Sep 17 00:00:00 2001 From: Noah Howard <3317164+nh-99@users.noreply.github.com> Date: Mon, 23 May 2022 15:50:49 -0400 Subject: [PATCH 477/509] Add R2D2 clock --- apps/r2d2clk/ChangeLog | 1 + apps/r2d2clk/README.md | 7 ++++ apps/r2d2clk/app-icon.js | 1 + apps/r2d2clk/app.js | 67 +++++++++++++++++++++++++++++++++++++ apps/r2d2clk/app.png | Bin 0 -> 3143 bytes apps/r2d2clk/metadata.json | 14 ++++++++ 6 files changed, 90 insertions(+) create mode 100644 apps/r2d2clk/ChangeLog create mode 100644 apps/r2d2clk/README.md create mode 100644 apps/r2d2clk/app-icon.js create mode 100644 apps/r2d2clk/app.js create mode 100644 apps/r2d2clk/app.png create mode 100644 apps/r2d2clk/metadata.json diff --git a/apps/r2d2clk/ChangeLog b/apps/r2d2clk/ChangeLog new file mode 100644 index 000000000..5560f00bc --- /dev/null +++ b/apps/r2d2clk/ChangeLog @@ -0,0 +1 @@ +0.01: New App! diff --git a/apps/r2d2clk/README.md b/apps/r2d2clk/README.md new file mode 100644 index 000000000..24730a0bf --- /dev/null +++ b/apps/r2d2clk/README.md @@ -0,0 +1,7 @@ +# R2D2 Clock + +A clock with R2D2's shiny metal face on it. :) + +## Creator + +Made by [Noah Howard](https://github.com/nh-99) diff --git a/apps/r2d2clk/app-icon.js b/apps/r2d2clk/app-icon.js new file mode 100644 index 000000000..17ef6b709 --- /dev/null +++ b/apps/r2d2clk/app-icon.js @@ -0,0 +1 @@ +require("heatshrink").decompress(atob("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")) \ No newline at end of file diff --git a/apps/r2d2clk/app.js b/apps/r2d2clk/app.js new file mode 100644 index 000000000..a7ead76f1 --- /dev/null +++ b/apps/r2d2clk/app.js @@ -0,0 +1,67 @@ +Graphics.prototype.setFontUndo = function(scale) { + // Actual height 19 (20 - 2) + this.setFontCustom(atob("AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKqKAqooCqigKqKAAAACgAAKAAAoAACgAAAAAAAAACgAAKAAAoAACgAAAAAAKCgAoKAKqqAqqoCqqgKqqAKCgAoKAKqqAqqoCqqgKqqAKCgAoKAAAAAKgoAqCgKqKAqooKiioqKKiooqKiioKKqAoqoCgqAKCoAAAACoCgKgKAiCoCIKgKioAqKgACoAAKgACoAAKgACoqAKioCoIgKgiAoCoCgKgAAAAKqgAqqAKqqAqqoKiioqKKiooqKiioKAKAoAoCgCgKAKAAAACgAAKAAAoAACgAAAAAAKqgAqqAKqqAqqoCgCgKAKAAAACgCgKAKAqqoCqqgCqoAKqgAAAACigAKKAAqoACqgAqoACqgAKqAAqoAAqoACqgAKKAAooAAAAAAoAACgAAKAAAoAAqqACqoAKqgAqqAAKAAAoAACgAAKAAAAAAACoAAKgAAqAACoAAAAAoAACgAAKAAAoAACgAAKAAAoAACgAAKAAAoAACgAAKAAAAAAACgAAKAAAoAACgAAAAAAoAACgAAqAACoAAqAACoAAqAACoAAqAACoAAqAACoAAqAACoAAKAAAoAAAAAACqoAKqgCqqgKqqAoAoCgCgKAKAoAoCqqgKqqAKqgAqqAAAAAqqoCqqgKqqAqqoAAAAKCqAoKoCiqgKKqAoooCiigKKKAoooCqigKqKAKgoAqCgAAAAoAoCgCgKAKAoAoCiigKKKAoooCiigKqqAqqoAqqACqoAAAACqAAKoAAqoACqgAAKAAAoAACgAAKAAqqoCqqgKqqAqqoAAAAKoKAqgoCqigKqKAoooCiigKKKAoooCiqgKKqAoKgCgqAAAAAKqgAqqAKqqAqqoCiigKKKAoooCiigKKqAoqoCgqAKCoAAAACgAAKAAAoAACgAAKAAAoAACgAAKAAAqqoCqqgCqqAKqoAAAACqoAKqgCqqgKqqAoooCiigKKKAoooCqqgKqqAKqgAqqAAAAAKgAAqAAKqAAqoACigAKKAAooACigAKqqAqqoAqqgCqqAAAACgCgKAKAoAoCgCgAAAAoAqCgCoKAKgoAqAAAAAKAAAoAAKoAAqgAKqgAqqAKgqAqCoCgCgKAKAAAAAoKACgoAKCgAoKACgoAKCgAoKACgoAKCgAoKACgoAKCgAAAAKAKAoAoCoKgKgqAKqgAqqAAqgACqAACgAAKAAAAACgAAKAAAoAACgAAKKKAoooCiigKKKAqoACqgACoAAKgAAAAACqqAKqoCqqgKqqAoAACgAAKCoAoKgCiqgKKqAoooCiigKqqAqqoAqqACqoAAAAAqqgCqqAqqoCqqgKKAAooACigAKKAAqqoCqqgCqqAKqoAAAAKqqAqqoCqqgKqqAoooCiigKKKAoooCqqgKqqAKCgAoKAAAAAKqgAqqAKqqAqqoCgCgKAKAoAoCgCgKAKAoAoCgCgKAKAAAACqqgKqqAqqoCqqgKAKAoAoCoKgKgqAKqgAqqAAqgACqAAAAACqoAKqgCqqgKqqAoooCiigKKKAoooCgCgKAKAoAoCgCgAAAAKqoAqqgKqqAqqoCigAKKAAooACigAKAAAoAACgAAKAAAAAAAqqACqoAqqoCqqgKAKAoAoCiigKKKAoqoCiqgKKqAoqoAAAAKqqAqqoCqqgKqqAAoAACgAAKAAAoACqqgKqqAqqoCqqgAAAAoAoCgCgKAKAoAoCqqgKqqAqqoCqqgKAKAoAoCgCgKAKAAAAAAKAAAoAACoAAKgAAKAAAoAACgAAKAqqoCqqgKqoAqqgAAAAKqqAqqoCqqgKqqACqAAKoACqoAKqgCoKgKgqAoAoCgCgAAAAqqgCqqAKqqAqqoAACgAAKAAAoAACgAAKAAAoAACgAAKAAAACqqgKqqAqqoCqqgCoAAKgAAKgAAqAAKgAAqAAKqqAqqoCqqgKqqAAAACqqgKqqAqqoCqqgCoAAKgAAKgAAqAAqqoCqqgKqqAqqoAAAACqoAKqgCqqgKqqAoAoCgCgKAKAoAoCqqgKqqAKqgAqqAAAAAqqoCqqgKqqAqqoCigAKKAAooACigAKqAAqoAAqAACoAAAAAAqqACqoAqqoCqqgKAKAoAoCgKgKAqAqqoCqqgCqqAKqoAAAAKqqAqqoCqqgKqqAooACigAKKgAoqACqqgKqqAKioAqKgAAAAKgoAqCgKqKAqooCiigKKKAoooCiigKKqAoqoCgqAKCoAAAACgAAKAAAoAACgAAKqqAqqoCqqgKqqAoAACgAAKAAAoAAAAAAKqoAqqgCqqgKqqAAAoAACgAAKAAAoCqqgKqqAqqgCqqAAAAAqqACqoAKqoAqqgAAKgAAqAACoAAKgKqoAqqgCqoAKqgAAAACqqgKqqAqqoCqqgACoAAKgACoAAKgAAKgAAqAKqqAqqoCqqgKqqAAAACoKgKgqAqqoCqqgAqgACqAAKoAAqgAqqoCqqgKgqAqCoAAAAKoAAqgACqgAKqAAAqoACqgAKqAAqoCqgAKqAAqgACqAAAAAAoCoCgKgKCqAoKoCiqgKKqAqooCqigKoKAqgoCoCgKgKAAAACqqgKqqAqqoCqqgKAKAoAoAAAAKAAAoAACoAAKgAAKgAAqAAAqAACoAACoAAKgAAKgAAqAAAqAACoAACgAAKAAAACgCgKAKAqqoCqqgKqqAqqoAAA"), 32, atob("DQULDw0RDQUHBw0NBQ0FEQ0FDQ0NDQ0NDQ0FBQsNCw0RDQ0NDQ0NDQ0NDQ0NDw0NDQ0NDQ0NDQ8NDQ0HEQc="), 22+(scale<<8)+(1<<16)); + return this; +}; + +var IMAGEWIDTH = 117; +var IMAGEHEIGHT = 60; +var r2d2 = require("heatshrink").decompress(atob("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")); + +// 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() { + //reset().clearRect(0,24,g.getWidth(),g.getHeight()-IMAGEHEIGHT); + // draw r2d2 + g.drawImage(r2d2, (g.getWidth()/2)-(IMAGEWIDTH/2), g.getHeight()-IMAGEHEIGHT); + + var x = g.getWidth()/2; + var y = g.getHeight()/2 - 30; + g.reset(); + // work out locale-friendly date/time + var date = new Date(); + var timeStr = require("locale").time(date,1).trim(); + var dateStr = require("locale").date(date).toUpperCase(); + + + // draw time + g.setFontAlign(0,0).setFont("Undo:3"); + g.clearRect(0,y-30,g.getWidth(),y+30); // clear the background + g.drawString(timeStr,x,y); + // draw date + y += 40; + g.setFontAlign(0,0).setFont("Undo"); + g.clearRect(0,y-10,g.getWidth(),y+20); // clear the background + g.drawString(dateStr,x,y); + // queue draw in one minute + queueDraw(); +} + +// Clear the screen once, at startup +g.clear(); +// draw immediately at first, queue update +draw(); +// Stop updates when LCD is off, restart when on +Bangle.on('lcdPower',on=>{ + if (on) { + draw(); // draw immediately, queue redraw + } else { // stop draw timer + if (drawTimeout) clearTimeout(drawTimeout); + drawTimeout = undefined; + } +}); +// Show launcher when middle button pressed +Bangle.setUI("clock"); +// Load widgets +Bangle.loadWidgets(); +Bangle.drawWidgets(); \ No newline at end of file diff --git a/apps/r2d2clk/app.png b/apps/r2d2clk/app.png new file mode 100644 index 0000000000000000000000000000000000000000..94502501d69c4d629548302d7d8b3fa7b5126452 GIT binary patch literal 3143 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 literal 0 HcmV?d00001 diff --git a/apps/r2d2clk/metadata.json b/apps/r2d2clk/metadata.json new file mode 100644 index 000000000..3d521e1e6 --- /dev/null +++ b/apps/r2d2clk/metadata.json @@ -0,0 +1,14 @@ +{ "id": "r2d2clk", + "name": "R2D2 Clock", + "shortName":"R2D2 Clock", + "version":"0.01", + "description": "A clock with R2D2's shiny metal face on it. :)", + "icon": "app.png", + "tags": "", + "supports" : ["BANGLEJS2"], + "readme": "README.md", + "storage": [ + {"name":"r2d2clk.app.js","url":"app.js"}, + {"name":"r2d2clk.img","url":"app-icon.js","evaluate":true} + ] +} From 9973435b69f744bbdc420d02f20cd9f96f12b97e Mon Sep 17 00:00:00 2001 From: nujw Date: Tue, 24 May 2022 09:37:47 +1200 Subject: [PATCH 478/509] Update metadata.json --- apps/speedalt2/metadata.json | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/apps/speedalt2/metadata.json b/apps/speedalt2/metadata.json index 801d65fb0..0de0b28bb 100644 --- a/apps/speedalt2/metadata.json +++ b/apps/speedalt2/metadata.json @@ -15,5 +15,10 @@ {"name":"speedalt2.img","url":"app-icon.js","evaluate":true}, {"name":"speedalt2.settings.js","url":"settings.js"} ], - "data": [{"name":"speedalt2.json"}] + "data": [ + {"name":"speedalt2.json"}, + {"name":"waypoints1.json"}, + {"name":"waypoints2.json"}, + {"name":"waypoints3.json"} + ] } From a7c9c124eac162a76aa58dd3e58b6005c4d59403 Mon Sep 17 00:00:00 2001 From: frigis1 <63980066+frigis1@users.noreply.github.com> Date: Mon, 23 May 2022 17:05:34 -0700 Subject: [PATCH 479/509] Update ChangeLog --- apps/multitimer/ChangeLog | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/apps/multitimer/ChangeLog b/apps/multitimer/ChangeLog index 624f1b0fb..9b60f403a 100644 --- a/apps/multitimer/ChangeLog +++ b/apps/multitimer/ChangeLog @@ -1 +1,2 @@ -0.01: Initial version \ No newline at end of file +0.01: Initial version +0.02: Update for time_utils module From 5330784b3fc0bef3d04b1b3e6b09bf91de148f42 Mon Sep 17 00:00:00 2001 From: frigis1 <63980066+frigis1@users.noreply.github.com> Date: Mon, 23 May 2022 17:05:59 -0700 Subject: [PATCH 480/509] Update alarm.js --- apps/multitimer/alarm.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/multitimer/alarm.js b/apps/multitimer/alarm.js index fc0195455..97cbaa5fa 100644 --- a/apps/multitimer/alarm.js +++ b/apps/multitimer/alarm.js @@ -73,7 +73,7 @@ function showAlarm(alarm) { const settings = require("sched").getSettings(); let msg = ""; - msg += require("sched").formatTime(alarm.timer); + if (alarm.timer) msg += require("time_utils").formatTime(alarm.timer); if (alarm.msg) { msg += "\n"+alarm.msg; } @@ -86,7 +86,7 @@ function showAlarm(alarm) { if (alarm.data.hm && alarm.data.hm == true) { //hard mode extends auto-snooze time - buzzCount = buzzCount * 2; + buzzCount = buzzCount * 3; startHM(); } From 5854217f1ccc166dcf2f64fe1f6ca40117a41a53 Mon Sep 17 00:00:00 2001 From: frigis1 <63980066+frigis1@users.noreply.github.com> Date: Mon, 23 May 2022 17:06:31 -0700 Subject: [PATCH 481/509] Update app.js --- apps/multitimer/app.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/multitimer/app.js b/apps/multitimer/app.js index becaf6169..e5d77d860 100644 --- a/apps/multitimer/app.js +++ b/apps/multitimer/app.js @@ -258,7 +258,7 @@ function editTimer(idx, a) { a.last = 0; a.data.ot = a.timer; a.appid = "multitimer"; - a.js = "load('multitimer.alarm.js')"; + a.js = "(require('Storage').read('multitimer.alarm.js') !== undefined) ? load('multitimer.alarm.js') : load('sched.js')"; if (idx < 0) alarms.push(a); else alarms[timerIdx[idx]] = a; require("sched").setAlarms(alarms); @@ -585,7 +585,7 @@ function editAlarm(idx, a) { var menu = { "": { "title": "Alarm" }, "< Back": () => { - if (a.data.hm == true) a.js = "load('multitimer.alarm.js')"; + if (a.data.hm == true) a.js = "(require('Storage').read('multitimer.alarm.js') !== undefined) ? load('multitimer.alarm.js') : load('sched.js')"; if (a.data.hm == false && a.js) delete a.js; if (idx >= 0) alarms[alarmIdx[idx]] = a; else alarms.push(a); From b56eff48c6e57e1f84b0675fba2ce59c14949244 Mon Sep 17 00:00:00 2001 From: frigis1 <63980066+frigis1@users.noreply.github.com> Date: Mon, 23 May 2022 17:06:55 -0700 Subject: [PATCH 482/509] Update metadata.json --- apps/multitimer/metadata.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/multitimer/metadata.json b/apps/multitimer/metadata.json index 6e53e2c8c..abb958b90 100644 --- a/apps/multitimer/metadata.json +++ b/apps/multitimer/metadata.json @@ -1,7 +1,7 @@ { "id": "multitimer", "name": "Multi Timer", - "version": "0.01", + "version": "0.02", "description": "Set timers and chronographs (stopwatches) and watch them count down in real time. Pause, create, edit, and delete timers and chronos, and add custom labels/messages. Also sets alarms.", "icon": "app.png", "screenshots": [ @@ -19,4 +19,4 @@ ], "data": [{"name":"multitimer.json"}], "dependencies": {"scheduler":"type"} -} \ No newline at end of file +} From 3bdcc55c9b40dfcc28125dfc033e7fd3c8ca970a Mon Sep 17 00:00:00 2001 From: Lubomir Date: Tue, 24 May 2022 10:18:26 +1000 Subject: [PATCH 483/509] iconlaunch: Release app --- apps/iconlaunch/ChangeLog | 1 + apps/iconlaunch/README.md | 12 ++ apps/iconlaunch/app.js | 201 ++++++++++++++++++++++++++++++++ apps/iconlaunch/app.png | Bin 0 -> 888 bytes apps/iconlaunch/metadata.json | 18 +++ apps/iconlaunch/screenshot1.png | Bin 0 -> 4689 bytes apps/iconlaunch/screenshot2.png | Bin 0 -> 4752 bytes apps/iconlaunch/settings.js | 28 +++++ 8 files changed, 260 insertions(+) create mode 100644 apps/iconlaunch/ChangeLog create mode 100644 apps/iconlaunch/README.md create mode 100644 apps/iconlaunch/app.js create mode 100644 apps/iconlaunch/app.png create mode 100644 apps/iconlaunch/metadata.json create mode 100644 apps/iconlaunch/screenshot1.png create mode 100644 apps/iconlaunch/screenshot2.png create mode 100644 apps/iconlaunch/settings.js diff --git a/apps/iconlaunch/ChangeLog b/apps/iconlaunch/ChangeLog new file mode 100644 index 000000000..af7f83942 --- /dev/null +++ b/apps/iconlaunch/ChangeLog @@ -0,0 +1 @@ +0.01: Initial release diff --git a/apps/iconlaunch/README.md b/apps/iconlaunch/README.md new file mode 100644 index 000000000..0d36fdeb4 --- /dev/null +++ b/apps/iconlaunch/README.md @@ -0,0 +1,12 @@ +# Icon launcher + +A launcher inspired by smartphones, with an icon-only scrollable menu. + +This launcher shows 9 apps per screen, making it much faster to navigate versus the default launcher. + +![A screenshot](screenshot1.png) +![Another screenshot](screenshot2.png) + +## Technical note + +The app uses `E.showScroller`'s code in the app but not the function itself because `E.showScroller` doesn't report the position of a press to the select function. diff --git a/apps/iconlaunch/app.js b/apps/iconlaunch/app.js new file mode 100644 index 000000000..5dec33284 --- /dev/null +++ b/apps/iconlaunch/app.js @@ -0,0 +1,201 @@ +const s = require("Storage"); +const settings = s.readJSON("launch.json", true) || { showClocks: true, fullscreen: false }; + +if (!settings.fullscreen) { + Bangle.loadWidgets(); + Bangle.drawWidgets(); +} + +var apps = s + .list(/\.info$/) + .map((app) => { + var a = s.readJSON(app, 1); + return ( + a && { + name: a.name, + type: a.type, + icon: a.icon, + sortorder: a.sortorder, + src: a.src, + } + ); + }) + .filter( + (app) => + app && + (app.type == "app" || + (app.type == "clock" && settings.showClocks) || + !app.type) + ); +apps.sort((a, b) => { + var n = (0 | a.sortorder) - (0 | b.sortorder); + if (n) return n; // do sortorder first + if (a.name < b.name) return -1; + if (a.name > b.name) return 1; + return 0; +}); +apps.forEach((app) => { + if (app.icon) app.icon = s.read(app.icon); // should just be a link to a memory area +}); + +let scroll = 0; +let selectedItem = -1; +const R = Bangle.appRect; + +const iconSize = 48; + +const appsN = Math.floor(R.w / iconSize); +const whitespace = (R.w - appsN * iconSize) / (appsN + 1); + +const itemSize = iconSize + whitespace; + +function drawItem(itemI, r) { + g.clearRect(r.x, r.y, r.x + r.w - 1, r.y + r.h - 1); + let x = 0; + for (let i = itemI * appsN; i < appsN * (itemI + 1); i++) { + if (!apps[i]) break; + x += whitespace; + if (!apps[i].icon) { + g.setFontAlign(0,0,0).setFont("12x20:2").drawString("?", x + r.x+iconSize/2, r.y + iconSize/2); + } else { + g.drawImage(apps[i].icon, x + r.x, r.y); + } + if (selectedItem == i) { + g.drawRect( + x + r.x - 1, + r.y - 1, + x + r.x + iconSize + 1, + r.y + iconSize + 1 + ); + } + x += iconSize; + } + drawText(itemI); +} + +function drawItemAuto(i) { + var y = idxToY(i); + g.reset().setClipRect(R.x, y, R.x2, y + itemSize); + drawItem(i, { + x: R.x, + y: y, + w: R.w, + h: itemSize + }); + g.setClipRect(0, 0, g.getWidth() - 1, g.getHeight() - 1); +} + +let lastIsDown = false; + +function drawText(i) { + const selectedApp = apps[selectedItem]; + const idy = (selectedItem - (selectedItem % 3)) / 3; + if (!selectedApp || i != idy) return; + const appY = idxToY(idy) + iconSize / 2; + g.setFontAlign(0, 0, 0); + g.setFont("12x20"); + const rect = g.stringMetrics(selectedApp.name); + g.clearRect( + R.w / 2 - rect.width / 2, + appY - rect.height / 2, + R.w / 2 + rect.width / 2, + appY + rect.height / 2 + ); + g.drawString(selectedApp.name, R.w / 2, appY); +} + +function selectItem(id, e) { + const iconN = E.clip(Math.floor((e.x - R.x) / itemSize), 0, appsN - 1); + const appId = id * appsN + iconN; + if (appId == selectedItem && apps[appId]) { + const app = apps[appId]; + if (!app.src || s.read(app.src) === undefined) { + E.showMessage( /*LANG*/ "App Source\nNot found"); + } else { + load(app.src); + } + } + selectedItem = appId; + drawItems(); +} + +function idxToY(i) { + return i * itemSize + R.y - (scroll & ~1); +} + +function YtoIdx(y) { + return Math.floor((y + (scroll & ~1) - R.y) / itemSize); +} + +function drawItems() { + g.reset().clearRect(R.x, R.y, R.x2, R.y2); + g.setClipRect(R.x, R.y, R.x2, R.y2); + var a = YtoIdx(R.y); + var b = Math.min(YtoIdx(R.y2), 99); + for (var i = a; i <= b; i++) + drawItem(i, { + x: R.x, + y: idxToY(i), + w: R.w, + h: itemSize, + }); + g.setClipRect(0, 0, g.getWidth() - 1, g.getHeight() - 1); +} + +drawItems(); +g.flip(); + +const itemsN = Math.ceil(apps.length / appsN); + +Bangle.setUI({ + mode: "custom", + drag: (e) => { + let dy = e.dy; + if (scroll + R.h - dy > itemsN * itemSize) { + dy = scroll + R.h - itemsN * itemSize; + } + if (scroll - dy < 0) { + dy = scroll; + } + scroll -= dy; + scroll = E.clip(scroll, 0, itemSize * (itemsN - 1)); + g.setClipRect(R.x, R.y, R.x2, R.y2); + g.scroll(0, dy); + if (dy < 0) { + g.setClipRect(R.x, R.y2 - (1 - dy), R.x2, R.y2); + let i = YtoIdx(R.y2 - (1 - dy)); + let y = idxToY(i); + while (y < R.y2) { + drawItem(i, { + x: R.x, + y: y, + w: R.w, + h: itemSize, + }); + i++; + y += itemSize; + } + } else { + // d>0 + g.setClipRect(R.x, R.y, R.x2, R.y + dy); + let i = YtoIdx(R.y + dy); + let y = idxToY(i); + while (y > R.y - itemSize) { + drawItem(i, { + x: R.x, + y: y, + w: R.w, + h: itemSize, + }); + y -= itemSize; + i--; + } + } + g.setClipRect(0, 0, g.getWidth() - 1, g.getHeight() - 1); + }, + touch: (_, e) => { + if (e.y < R.y - 4) return; + var i = YtoIdx(e.y); + selectItem(i, e); + }, +}); diff --git a/apps/iconlaunch/app.png b/apps/iconlaunch/app.png new file mode 100644 index 0000000000000000000000000000000000000000..6f498aa20f592305a7a0788fa67a46d7a12f0d6f GIT binary patch literal 888 zcmV-;1Bd*HP) zZzpt+A8*GQfBgk^aKE|P3BZfO@zVI9=EjxRI)G(s9l)}69YCKf$tdF%u8TlFTBCke-#!7@j;O-i{ff1$hzaIOB^;s0|EpzsVSg@_VQCFuaIpPWXA7 zxdX~crl=m$SH}S48P>t$SS`&ip_=->YU=xkhld?W zmHhenxx2rx_qK!5>i)vz=L$dIS>M-GegEj_sFftiKvKiZDtR*-Z*6V0Pft%vJbUk2 z1S5BU;AZ@dHkTiM!9Df|k|Y@bp=0s@O-bQsG@9)XY>evr12^L*<^F)(qP}m1`hLD_ zy!dXnJLxa%z3q^C_80bF-=80lv{UouoqWFLJ^5hm2UbGs0G6#s6TpM|0ZDP1rg!rb zvME2{S>M-GeZSl7F3d}c&d$!t{e}HEi;r(X#J7+4>jySBH*0xGF%X4eILA+Hw8>1B zdwf$w(s1~Jn)<$K>ic8aPQ~$Umsj2sTs+7eEsye{J=jkd15E9S~5)l O0000oY_o zvKvpt$QEKIWy$*W`2)V^^TX$!bMHO(ywADko_p@OulKo$7UssB5K#yK0N^yaZGb-Y z)&HaHtf#iBX%TzsSOU?;`T+75vDMSyOrXAr75k|~vb!Vz0K5k#26|SZ*p0lz>|*%2 zxYoIof`9tKhGzn5CGVFq)GR~nCz%oFc;C*ENTequonQQdd+CCEoVb%kieXU*#~CWV zi`1wKI4p}-5|se3fvUmBM+dvV4-O7)MRkEiFP+12ChwJAlnou*MqRG~?*+ym7xQW9 z(2&c2?OF%j_|%TBXc^9*KU>2~CGk4M_~#GXeE!E`!KCx+(a=J$GGL@Q*iYxAa#dqI zqLGBU4pA<;ZH)%uNHHPY0P{0?Xq!KlhyZREqxqv-ki%52h@USGFQ{Y=+A&Fsg`;X@9f+{Ee(d>ePk%G z#jTbHIeh-i;v>tHe%HVTr@ZJNTVaZOva|kc<5PLRdMoPlRyz&(#;;3T>Fsc6ySj1! zP7{**?k>Mrn+A;_-4_34a^`HAy5H)0sYhER-6jeRv+oT?v6rk;jtHO`6dgo2$kk2s zWRiOjQO-INL>MCj{`;-EGFXV*)-?T4q+r=4j-2(pYS~)l4HYfz(+PtNNI1dSzyjN@ zgUI>v$BpDxc(p-d1oIitG`^X{;F8;hWOx`$J(1GBlQG$<$VM!nzU8w#efE5o&E{|V zdPML|e@f==TOf^4m&~8l;Vqvcrd|EGkMY+ZY_z^9uTE14bHM+ynA&des+?c9QYhq+ zHSxRQ*;B8`PzD#jQz^e8%1QmuE#rDaF;R9qbasTG8lsEmTApv@sjdLvgd@!Z+KgXagxis{T{a|Q- z`M*m5{&jpMT_JkBtB%I7>K7Me zgr(au7bjPD0Pdmj$FMFgKdv(k_k5V3r#IgyL5VYZl8;M76^SJ7na5IIJKg@!-ir!C z=H){<;wZPMR~>Oc(+ZnUw<;G($S?#*ku}c4>IP-rP+x;O51R8b&)e0#pT$*pjRgI& zjMXTulIP63e|hI1*1;{-j!R91p=~8&^jgVbzrIe+&qJqS?G8jkjl@G$hnaa$?6r~3 zgWCq;t4Jut}YC-Tmg zy#EN$v{OpT>jKJlOTl1()cPF>GDjS(zsb-{08o^f6vSL#d07g<8QULltm$WjTHOQD zQJE>>4p(>ptwaRm{3ARdlu%M6E_Aw@6kT8F8{1s~h(B6=+uH+VseW!(G>j5t#~It* zSo5#Z1^j$4DH}up1ONXiB`SJ}wDdFEjuU$ac0z3x=ZBB$`|YAn#Mv1uXI4*G$TVB;N!lr$W+vI15A?Pw*+i4+~8v#+=!)E`N#14zWIRb z8r`BeL}Rh}oiW1T;5t|J?)knAKZT>5NTC3K7d7&m{&3)qC0a@XEby7=uGbYFTzK z+dh;hQeiG3!NY$hf@b@t =J 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 literal 0 HcmV?d00001 diff --git a/apps/iconlaunch/screenshot2.png b/apps/iconlaunch/screenshot2.png new file mode 100644 index 0000000000000000000000000000000000000000..b17efa78b87d432dac7a0c80be616cb7a1e74452 GIT binary patch literal 4752 zcmZWNS5%V?tY3>oXpucCOA(o6>W?f1MP(FOEqm0;UNS_W45d|M$kHDRC|jUxD3(o? zPliBI0YN}nm8l>ylqKu(Kirplb23hnlbj?cFG;+)slf@jFdP7Y6Gn#DFh`R5AF;6> z@#=w9;VGQ(us*j>Sj+A3TdPbIPM-a*88V3NpT1MBdSQ2o{+3^o5N;qSRrw;S` z8c9gLSKP8gf5w|GIlYq3ZB@)PMh;&y>d> zCxb&x)Su}Dy&`TFLM+bjxR05oV)5s;kkvv*1tvm9jY+ro zF>FdzU@7Q`e*d;hY(?b4kP_SJmjD^Qieem69ZdCiST#8AV?0D@&dd<8fu=ALEL`Mkg&<3k8b(KgiPI%41sH08T z8oD@F)iBn=-+M=tX$8xWLi@NC4o7x=%=E=@7eUnnoXhObjY}d1_$D!S5y}|D#9cdL zFOu-b&2vgo&fGcv_|tPjk1jTU6&Rq#VpaXCeIH7(-VYXDM!~akB`-4{nRnxc zU&X?PT=XQ{V(yIRgV#6|f+&sy=zJzQAorK2g0@HgIVoSVJ4)W@=N|J;CaPqk@5 zAbdRBtNe46y`Zx-L6aEq_lbAJsL8kuKXTI6s7=fg77Y5qeI_hsYEx)&a84FW;%alSny|Hi-dgkS z4XziZ6mBVJ*s)rKm4m}y)NlEoOS@y5O zQAFRmO`@RfX&}VF`RP96fVsTau9|v2XejivsS<>9=dMcbJEHSUQU{KR5jv*+i*kXD+N(oH`Vs z>&9%C(T%sM_iWhqD6}b5AmG^E0GYgt@$;JU#@Pl$t|m>GgbfN!5N!!D85#fu2qCIZ zE$Fa0-|*@UW3J@vWb^g{rstVe8!=&bJzpuhj_OHAlyPL5_4s4qRW#lpRev2${-z1$ zrXUnQ6ta08zC9h}$y^pyN4>ft5$(%VT~XV7WRk5K*cuqv&PDVW{M7ECm+3rt?x$jl zXG;A3EuJp=HH9qY{;ohyt-cv8V$sQX(SIgl8IL%GJR&|?eod2z%xjCW@{$-w{*=ES z!YNtu^MN#i^qNvPM=r(KkcG~NW$Qyl%6q%KluEJqACYLcH(67Q0WS-n*e|U4>uu@x zGoA8Eknl*=G+p`=Go)!@OSn_n2gI}#!FI*w?Fegn&F#`Em3cD#bV~#85+ueW_VR-R z_GLu{iiR%vI{Dkxxy-UVT^Z|s={jfW+*g0{>zmubltdsdxL?{=pW(~}xQI#c#J9#1 zd2fU0m$E!{Kl`kNeU#vQwJvSplnCO`qJW3bZZww)0^&bQ72$I5{s3`yc2h*j*C3Lx zj(-sWmeca`BWVp$IbT$VPd$J=5ikAprz*5+vKviW4S&?oOMO{x1?7r zw)EAc6tmz9pe~HZZbBj5=@Ye?MI+zW|I&6h0{pb%nNtDEkFXqBE_Uenl)gIEm2Tf_ zKxBAVt)Biww^Q4L+LKvLW4h#BN614))+^RMsp~c`>&M<-4ZDT2Q`c&)MS)?*hu2Ph z?w1hSe1Z1SZboV->I}8T9ov$7wPhU0z8uWjO;BR|j54BZ?$*DfTUr-fx!5&ku&I@DZqUJWH%tYbi+$_btEoV<<&CHxh zY;-@B_Ywoo(%G`X8#cA9pF@SG(JD^jOCt}B;G0|Qw+mQdRTKRdVtRx?+hLK`8S#}X z@W}h$c7v6>!+3Y)j@FuY7^s=u8&}%PgjToS;(*+8I>aF;eS=@Je|rkP<^60VGZ+@t zqGS53P2_K=5*JN)NE{JcoXx^aFutvRXZ(a%p+59#%=b|R$f4lVQS%b|8N(MwVYnWp z3pe6}Z|B5 zeLPR#iQf|z*}`-$wxpTF0ZNHT(=Kc&^5(IkMl~tFYy%+Ct{(_21*0tYXV!Cnvze3p z?-G$spU09m?BXjvc1j_rEGR74hg@+YzqxU5Y_(v6^E`axg4ijhN{pJ!67^- z2g*PVr_k7)-N%<=1Oc1Ml7|^E4b*Mk?=$40ENFFpS3Y-;-0B+xr2O*9-+~d^T5e{z z6V$#JWX|bD$@RI%2Dqm!9+G*`;?_(2A2Q%ASZT$FbbCso$XS&xebUujo>Va|L6}CmhOIPTlq<0X+-jPcCpO-|L>rOWtY-&#{ zcTMk2PvmsQDFt&Ae7-5cH9ZvE^B^i7rwfYZS`BdsQt+4W9y1EA@4V0&|Cs(10vd#a zGN3->^=e$HTguoJxf#uq$|#@rF4L+I{KJmYj=QeL&BTmJe~?s znXa-fibnt3-vX2Z;?!0{7+N3+27+hoPq}G06j|9t$#!&p_*!(+ms@~k(r;B%ng?(J zuqy{0I%XR`Y=YaXeedqH)Rz@p6zY(8C<|i+s{CTvh_vO2bub^S+79*im4^B82nZ2P zYF1MC2_Fnbj@@VuFI3YSsj7c%-NwRfdmz8z)E>_}X>EpF^r-^b>DHk4GGQZMwetpm zok<&wq(j>WIFm`5uy?A99gP4yxbwSWz9v&^)YTf4oYykT5UsGtJk{pw%qU|23qd63~X39iRD_j*T{HB z;JvmP%xG^-IBHcJcw_&44<)BSY0UWKeNF&fG+g4Z)n1yZQ93xB8iN`W7BtK^H7$iG zBv~|R8kzZdMcGE&hdb)YoYXAt{`Ug)+zsoQ5x7ENnl;H-wkZ8OfFv!1=<6AV%C!tf z!yjj}*=qCC1y<`8d*!I}qNx05P)42Ea!OGZ@)I|76S2F7!EHy!SUdh3<#^NgO!6a5 z7$vW$HL{`Erp-AE2LvtOA!6}YskLUm(XYhkMw|E&wRM!ifLX`-e9QS4XVhmC6&HI+ z?=;!u#Vz%FKL{PK=7$@xX}orX8AB@)keNbSXp|eQ+!TACNDi=&vD^ zuOsr*xod31=h$ER_Z1z0nMsV7+DUfT8;YyRz$mmvD(BtwD6Xc`GO5@KZy8UkQa1GB zx6h*vrHWLpCPOnGB3bnKcIAas5bP2&k=3rYy-M`wN!HtzIW+jV?U}7Bo^Y zmP-19vVpSIS@nReU%9c-IcYyjCedbrn;o1)|171qUyb`j_sp@)qh6w&(Ao->Ps*Oi z{`me2WViy(8BbD8PdLwiOgTGpEZ+1AZ8YMnmI;O>pq$r-Y(rC-sTVO}ir04EUWqo3 zuhXwd_P2dK?JM}&;AJ5GJk+tQ>Q4_jmxVqtE|)!E^z2zdfRgFS{6SYm0E>RF7-!h= z?p0*Yrrn`JG?6W!CQ#<4R%(f7vUZTRscq`gXDDO&aq7DUUSrdIQ2oi%r=fp}I!y1o zX?XVLXqh%&C)J@9Eb!%|;$s@I0><8z3$vB_=SNc8#(2hg-&l{K$@O))FJ2eJMmc(X z1$aFD{WC=io88pK;qRZ@i;Ub^zSYHoPx#!Z75&M2O5^!g(Y!Zf0?AFyVc^05tIs0i zqBRz+9PX$)rD-aw#8^0OTgRB2Q&8$y{Vu~l+WuHpqBmCe*t1N*V$ktkPoOf<2Q3a5 zUtDWDCkcq(ss{+sWSO6mKu*7$>e(h36yH?&ayDA9zoNrLW3TrK#SWb_VXped!|wDa z&;Pv-IM0gTCIQ<6zY^Xa2j7APN7sk$*L$klfCiFK3xhHZT9jE&0moTV>MsL(o?D&F zDCp|uzl@=vwTS8L_$!P;K_r~|$2eK|jT;_wzKa@ehi3yrJFlN5M0{a4pP%k?C7S=h z$zG&Q`~s$|gml!b!}fUC&!fAqmgcf&FO=-E(33BmcK{h+So~AedCu#b9pA!k2gA0@ z-n?804n*h}#>eks6|};|75S1!1@M0&oa)6B83~pJz8a~#9&zc1m#16^9h-dXtBn#n z09|8oYQ66WH?^bI)O;u7o}V69sUQDI&75}kG}C^jT+%DEvwy!XOyQ<4Gs@uYyrLZR S?|(lh!05W^wJJUQgZ}~Ti1d*F literal 0 HcmV?d00001 diff --git a/apps/iconlaunch/settings.js b/apps/iconlaunch/settings.js new file mode 100644 index 000000000..9fbc7ae6a --- /dev/null +++ b/apps/iconlaunch/settings.js @@ -0,0 +1,28 @@ +// make sure to enclose the function in parentheses +(function(back) { + let settings = Object.assign({ + showClocks: true, + fullscreen: false + }, require("Storage").readJSON("launch.json", true) || {}); + + let fonts = g.getFonts(); + function save(key, value) { + settings[key] = value; + require("Storage").write("launch.json",settings); + } + const appMenu = { + "": { "title": /*LANG*/"Launcher" }, + /*LANG*/"< Back": back, + /*LANG*/"Show Clocks": { + value: settings.showClocks == true, + format: v => v ? /*LANG*/"Yes" : /*LANG*/"No", + onchange: (m) => { save("showClocks", m) } + }, + /*LANG*/"Fullscreen": { + value: settings.fullscreen == true, + format: v => v ? /*LANG*/"Yes" : /*LANG*/"No", + onchange: (m) => { save("fullscreen", m) } + } + }; + E.showMenu(appMenu); +}); From 28eb907f57d7c4a44ba2bc00faf101f01a727725 Mon Sep 17 00:00:00 2001 From: Noah Howard <3317164+nh-99@users.noreply.github.com> Date: Mon, 23 May 2022 20:39:54 -0400 Subject: [PATCH 484/509] Add properly sized icon --- apps/r2d2clk/app-icon.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/r2d2clk/app-icon.js b/apps/r2d2clk/app-icon.js index 17ef6b709..246df9376 100644 --- a/apps/r2d2clk/app-icon.js +++ b/apps/r2d2clk/app-icon.js @@ -1 +1 @@ -require("heatshrink").decompress(atob("us8yEB+++++eAIQFB33/74LEA4gLLEI4LLAIw5NIqAPE/3/AAgJB63c30b1ubzs5yn6ysazs60tbBYO9/Xe/ghCAA/eM6Jz0HLHnngBBC4JqD999BIPvrp2FA4ILCvoKE74hDE4ILKTog5LBYY5SAAP+78d2u7ynauf4qcXmU1kO0kO1AIW0jOUAIYHBlP1nV1C4Nj2+EvO9eIJHFvpFLOaW+ObQ5XBYjpDDIIjCdJKjGBZXfEIY7HBYh1GHJJ1MVof+BIe+jbhBoW2bIV0b4LVBmVWnV2AImWAIQJFuwTBlUVkPVjOVD4NC610jAvBLIpnF889Odq5IdJQLJdIRBBG4PfIIV9CIQJCBYWeAIYLHC4QhEC4wtGBZ4tIvxXGz2U7VK+zDCykymzbGALt2eIIrBF4NTi+dnRBE/xzpBbQ5PTIj7Bf4IJDAAIHBBZq7FE4IJBBY41BBYY5JBY/vvo3F0taoWVjN0W4K/BoTjhAJArCuwzBG4IHBzsZS4RzE99cOZoXFOZq5OvqtPBYzpTV4QvGdJgVCrppG3wLDHI4LJ//+AQO17dC6ytBlP1cNIBPHYI/BpXW4zJBP4hzNP6KtMBZKtFXJgBCzwRCGoIBCBIYLJGYIXMMYIJDFogLHEJhhCCIN8nClBkPVcvIBHIYMh2hLBZYhzOP7C5NEIi5P888AIL7E/4hBBIL9BBY1dBYS9CAAYhDI4QAD74LEHYIACHJYRC/3OvlCyznBnV2AoLn/AIJDCq0RqlC23fjp/IOYu+OYi5BP4ytMBZStGXJTpDDIIjCHYwLCbowHBBZHfEIbpHBYh1GHJIAB0ualPVkO1cv7rLAIMZysp+m+jhpCzpzTVqwLEVpjpHIIo1BvoRCIIffBZABCBYw1FIIILBN44LJzwHC72EzMA6aXBmUVlP1AP4BLJ4MRqkI+eU7JzQBYihEXKatJcYw5GEYYvC888foIjE/4HBBZo7G/4JBBY41BBYY5Hc4OtzU6utTm9ju9bAP4BQseXqcXnVV30cNAXeP4jpFVoR/CUIt9XJ19Vp6nBHIyvGEoIjCBYgHBBYgjEBYYvHBYhpF3whCLoItEQIPW7u1/nOvvW3vOzvWAP4BTK4N92vc89eS4p/KVoy5GeoytOBY6tCGYI1wN5YrB73nnu+jnGrqNBAP4Bb41c2v8dYbjUBYiVDXIytYCYPnngBBF44JBDILpGroLCHYwhDHY4LEHYppBF4LnDniJBAP4Bf308AIP3UYR5BVpK5DVpgLKVpgLEdIW+e4TRBHYwJBC4QLD74LGF4ghDF44LEdIYlB7wJBcoKBBYv7rmjnGvhzFP4ytEXIytHBYitJBYwtFAoLjHro1CAAgdCBZg1ICoILBGowhF73+3v841dYf4BmrprB52dSop/Erq5VVpi5NF43nng7CF4tdBZovJBY41BBIWd88930cX/7npdYvvvytKXIjdBXJz1FVpQLBBIILC3zrCHYghBC4Q7D74LIAIQLGHYt9BYQtFGoOdCoJ7B308YP4Bt30c5zHBUYR/BRYahEXKatJXJgdCroBBFIn/CIQLBIIIAEBZQpBEIQ1IBYbvC78d3v841dXf4BurrrB73d++dP4bjEVqYLEVpgLEdIfnngBBdI4JBeoQvFroLCHYwhDHY4tHO4U8UNE8519629AIWdAKW9419JNYDBUI65DVpgLKVoy5KdITrCBYS7BAIQHBbYILVAIW+BIgtFBAMe3v841dT9ChC30cAK69CJNQvB739XASLEUJy5LVogLLAojxDzz7B99dBIYABDYIJBAYILGroXBbIZbDCoVdF4QtD3ydCAIKdo73+zsamU1oW2AKcyq2dnYfBdNfW3rjCRYS5FVpgLJVoq5NdKLdCBZYvG/4JBBY/nr29/nGrrpryn6kO0dYMymwBGqwJImsh2udjbprO4O+Q4Md++dRYLdHXJz1GVpLhBBYm+AIYLBAoWeBYoBEBYQTEBZoJBBYfeBoPW3u+jibqdIWVjUqis6u06ywDBoW3pX6AIYHBB4oXBzs7dNlcPYJ/BQoKvFXI4HDBZatIBZQDBd4PvroRBfgfvvoLCvoJDBZnfD4ILBE4ILGC4M940841dAITpp/rpGc4PZoW2kNtjMJkONdIILBnV1dOZ9CriKDXIytPBYKtLBZDpFAILpKHY4jCdKf3vq3B3zp2oXYbYMIskAAAkIwgPC3Dp0rm+jnvvzpOVoYLKVo7bDdJDrCAIQHCYoQLDA4gLLEI4LG33e7ppBTNrpHpX5iHHc4oADjHopX6dO4xBUI65PV4y5MEo7xEzz7B99dBIYAB999BYV9BY1dBYIbBBQnfBYgvB//W3rp1oWXoWWgFCdJMIoQRBnWXdOk852dUJCtLBZKtFXIwJBXIjpREYQLLF5f/7wIBNYU8dObVBoW3boLpKsdC3Dp14094yXBnrdKXJb1GbojpMANpNCrznCrqRmE4IBDdI92pX6kNLdJMhtgPBCYLpeNKoVBaIN+RYK9uzzxDfYjFBvoJB99dBY1dBYV9BYohDE4IKE/y1B5296wBp7vOzqVBZILpFoWXoXYjMpc40qoXZB4LperpXXKoP37//7ytOBZStGXJTpFEYQ3BdI7dGBZXfHZe9/dTjFjzABnqc3Y4LtB739dIrrC29K/MyiUp58ymQHBBYIRDdLLNB3v8IINbvBXTpX3408Y4bpMXI6tJXJTpCAIQRBeIYLFAIgLCCYgLNBIIzC1t7hMUkP1lIBmiM0wma78edJGWdYWWoXZpX6AYILDAYbpQroHH6292vcIIMh2pXThHzyn6Xo65HYo6tJBZ7xEzz7Bf4IJDAAIHBBZrfDAAYJBAILpC3kh2ijEAMd2SYOM3THBdJQhQdJfOvrdBAIIFBBorpDEIMyqxZTjO0xmZUI19XJ19VpK5G74LEdKd9BIIvHdJXfCoQhC0t7dP7pX52d4191u71ub408cYLpfkO1wl5VqQLJVoi5LdIIBBDYIRCd4IBCA4ILXAIW+BYn/zs6MoLp/dKbnB30dvlZtfYtfZukZ1u8dYbpbjO0K4KLBS4ahKXJatFXJTpCz3nnjxBYYYABEIILEAAgHBBYV9BQnfBIIBBI4QAEzsadP4ZFYIzpG519419c4Nj3F8nIBBdYNz/G+jj5BdLmUyn6UYVcVpgLKVo3fBZLpDBoLpMbooLLF4QBBdP7pJoW2mU3lP2mU2lP3oTpIaoW8tfYujnCdYm4ztbCILpe7TTDbpF9BYS5HdK++coXfAoInBCIQJCBYWeAIYLHC4QhEC4oxB0tbdP7jBpXV51y73yukUdYLpJ1u7dJk7dL21xmZZIatPBZzbGBZDxDzz7Bf4IJDAAIHBBZrfDAAYJBAILpCzkh2jp8u0Zu21+n/+BaB++ylUWeoLpF51941cc4LrBc4dz/IHBcYPOzrpdwl5UI19XJ19VpK5G74LEdJAlBEYQLEA4ILEEYgLDF44VCKIWlvbp+y0h2+M2v/+LrB52TlP2Y4LpE/rnB62d2vbuf4te4se4c4OlrbnBCITpdzLRFXIz1GVpoLM3wBBD4TjGGoV9DoQLD74LGd44LH/+dnUh2rp9A4Mqi2M6mlydC6sym4LCdItdAILZB30dzsbyn6b4IJB518dL2UxnabIi5FVo4LEVpQLF3zbEdIOe888AILFFCoIJBfoILGroLCI4IAEEIbpIjTp/oQXCkO3jOXmU2oW2dI3+a4IBD52dboLlCzoNEfITpbyn6S4atMBZStHXJLpC3wZBaIXfBomeBIIjHBZXfBIIjBC45hBhMUX4IBniNUwl6dIeM7UZughVC4JRB63e408AKLpB1u7D4Mh2g1TgHzK4LTCUIOdXI2dVpILE3y5IBYwFCcY7vFAIXvvwLCvwLGcZI1EAwOt3lCy1bnFbrABkq9K62dnffjzrB0t7pX3qdXEKU3C4IbBD4POvoBR63d30cIINTi4DBK6M6y2VjSTDa4S5DUIK5IVoQVD365GC4YLFdJHnn3nr3vAIgHBBZv3eoLpECoU+CYRNBv4BsvxDCJYYhaM4ZvFAJYTCr41aEoo9Drn3vv3z5BDXJ55Ev7jBc4PnnjpNAKjpJB4hZBKoItBAJPvAIQPLAJxlBD4KLBAIQ1CG5ghKD4gBVKqxJCDYKbDaIIJCc4IRCX6whBdId9dYIFBeIYrC74RBdLGe//e/+9AYIhCJqxnB/4A/ADnvY7NeEIqjBEKydD3whEdIIjBnjrB/7pYMoPW7u13e17e+jgLCvwfSNYPfDYNrzF0jN8AP4BUK4Nr3HGnn376bUR4M+DYO+nm1/fW3qnBdMG+999++dAoTFSAIf33/GnuEvWM3WVjQzBEapFBzsagHzkO1AP4BXhHz0tbMYLpUzyTByn6wmawl541dU4LpWYILpGAoYADGYLpYvpNBc4OlvbpZDYMh6s6u06ywB/AKl2LYOtzbpWR4M+0tbTYKfB519dKyzBv7cC/wBC//fjvGvnOAIQTCdP7T/dP4hTEYTbB30b2va889xnZhMTjN0oW2aYWfdP4B/dP69TEIM6usZyjjBzsaAILnBlPVpX3dPlbJYMyq06AP4BUK4Mh2rp9oXXlP1jOVdIU6UoMqitTi7p9iN0mU1AP4BXjN0PYLp7pX3b4MZ2rpCjTp/CoPe/u+nnGrgB/AK++jne/x5XdNU6E4Mh2jp9C4I5B/4A/ADiZCnzp+yi/BEoLp/dP7p/dM+djUhyjp9G4POzudnQfBAP4BXzs7629TarpsrSjBAoLp9///RYMI+ch6oB/AK8JibNBMYLp+2udjQ")) \ No newline at end of file +require("heatshrink").decompress(atob("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")) \ No newline at end of file From 6c28d94b76e0758157b837174dae2179b8a823bb Mon Sep 17 00:00:00 2001 From: Noah Howard <3317164+nh-99@users.noreply.github.com> Date: Mon, 23 May 2022 22:00:38 -0400 Subject: [PATCH 485/509] Add new metadata --- apps/r2d2clk/metadata.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/apps/r2d2clk/metadata.json b/apps/r2d2clk/metadata.json index 3d521e1e6..f2cde76f4 100644 --- a/apps/r2d2clk/metadata.json +++ b/apps/r2d2clk/metadata.json @@ -4,7 +4,8 @@ "version":"0.01", "description": "A clock with R2D2's shiny metal face on it. :)", "icon": "app.png", - "tags": "", + "type": "clock", + "tags": "clock", "supports" : ["BANGLEJS2"], "readme": "README.md", "storage": [ From 2ef59c470fdd35c0559a2b648a5b0d050af27c70 Mon Sep 17 00:00:00 2001 From: Rarder44 Date: Tue, 24 May 2022 10:18:03 +0200 Subject: [PATCH 486/509] implemented "direct launch" and "one click exit" settings --- apps/iconlaunch/ChangeLog | 1 + apps/iconlaunch/app.js | 10 +++++++++- apps/iconlaunch/metadata.json | 2 +- apps/iconlaunch/settings.js | 10 ++++++++++ 4 files changed, 21 insertions(+), 2 deletions(-) diff --git a/apps/iconlaunch/ChangeLog b/apps/iconlaunch/ChangeLog index af7f83942..4a72a9f28 100644 --- a/apps/iconlaunch/ChangeLog +++ b/apps/iconlaunch/ChangeLog @@ -1 +1,2 @@ 0.01: Initial release +0.02: implemented "direct launch" and "one click exit" settings \ No newline at end of file diff --git a/apps/iconlaunch/app.js b/apps/iconlaunch/app.js index 5dec33284..4eeaff589 100644 --- a/apps/iconlaunch/app.js +++ b/apps/iconlaunch/app.js @@ -1,5 +1,8 @@ const s = require("Storage"); -const settings = s.readJSON("launch.json", true) || { showClocks: true, fullscreen: false }; +const settings = s.readJSON("launch.json", true) || { showClocks: true, fullscreen: false,direct:false,oneClickExit:false }; + +if( settings.oneClickExit) + setWatch(_=> load(), BTN1); if (!settings.fullscreen) { Bangle.loadWidgets(); @@ -107,6 +110,11 @@ function drawText(i) { function selectItem(id, e) { const iconN = E.clip(Math.floor((e.x - R.x) / itemSize), 0, appsN - 1); const appId = id * appsN + iconN; + if( settings.direct && apps[appId]) + { + load(apps[appId].src); + return; + } if (appId == selectedItem && apps[appId]) { const app = apps[appId]; if (!app.src || s.read(app.src) === undefined) { diff --git a/apps/iconlaunch/metadata.json b/apps/iconlaunch/metadata.json index 1dddb66b4..01e447672 100644 --- a/apps/iconlaunch/metadata.json +++ b/apps/iconlaunch/metadata.json @@ -2,7 +2,7 @@ "id": "iconlaunch", "name": "Icon Launcher", "shortName" : "Icon launcher", - "version": "0.01", + "version": "0.02", "icon": "app.png", "description": "A launcher inspired by smartphones, with an icon-only scrollable menu.", "tags": "tool,system,launcher", diff --git a/apps/iconlaunch/settings.js b/apps/iconlaunch/settings.js index 9fbc7ae6a..e9667047c 100644 --- a/apps/iconlaunch/settings.js +++ b/apps/iconlaunch/settings.js @@ -22,6 +22,16 @@ value: settings.fullscreen == true, format: v => v ? /*LANG*/"Yes" : /*LANG*/"No", onchange: (m) => { save("fullscreen", m) } + }, + /*LANG*/"Direct launch": { + value: settings.direct == true, + format: v => v ? /*LANG*/"Yes" : /*LANG*/"No", + onchange: (m) => { save("direct", m) } + }, + /*LANG*/"One click exit": { + value: settings.oneClickExit == true, + format: v => v ? /*LANG*/"Yes" : /*LANG*/"No", + onchange: (m) => { save("oneClickExit", m) } } }; E.showMenu(appMenu); From 9ef9137bc060757c491117d08a9effe26337029f Mon Sep 17 00:00:00 2001 From: Gordon Williams Date: Tue, 24 May 2022 09:50:10 +0100 Subject: [PATCH 487/509] update after https://github.com/espruino/BangleApps/pull/1868 since we use waypoints.json too --- apps/speedalt2/metadata.json | 1 + 1 file changed, 1 insertion(+) diff --git a/apps/speedalt2/metadata.json b/apps/speedalt2/metadata.json index 0de0b28bb..2a111af28 100644 --- a/apps/speedalt2/metadata.json +++ b/apps/speedalt2/metadata.json @@ -17,6 +17,7 @@ ], "data": [ {"name":"speedalt2.json"}, + {"name":"waypoints.json"}, {"name":"waypoints1.json"}, {"name":"waypoints2.json"}, {"name":"waypoints3.json"} From 4ded6c844ac4e8ecbbf4ee1a5d85b57ddc1e0baa Mon Sep 17 00:00:00 2001 From: Lubomir Date: Tue, 24 May 2022 22:54:16 +1000 Subject: [PATCH 488/509] iconlaunch: Change icon to one by icons8 This doesn't bump the version, as it doesn't change anything on the watch, just the website --- apps/iconlaunch/app.png | Bin 888 -> 1395 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/apps/iconlaunch/app.png b/apps/iconlaunch/app.png index 6f498aa20f592305a7a0788fa67a46d7a12f0d6f..1c8068c50d528badf72b8b3355668c55feb377f7 100644 GIT binary patch delta 1376 zcmV-m1)uu(2J;G#B!32COGiWi{{a60|De66lK=n(C`m*?RA_nwDFa5?mTXX^@)+0xcR-V}wvKQR9P2jRsMOf|@9=zR&^@QZ>4T#At%m zN?WufUMK}&W7{mD*0xZMQp{M zA^zQ9w5A!h23Q#s09iXu+KRh+pi%%7zCU6s&i~x>7|xQNV7pMHFp3mTs_#o>U7UZy zOI_JHTXWbGkXH-KK8Ly66LwYPFbx%ZIa0ZsG&z*8|JLFjGMyS*OS)}Qa@gvfQw4H5 zo^a0kNIZaJcZO`ruLza~)R z8%JhlB`j%&C2cUX0>E-7-ur103mdE1e`XN?#FQLYz)-7-78pM&vJ+_z5!*N$P z8QA*{*hC`YQ}{1nLbBcU*(zI!e(%N>0jYPfQ6#(r0>NU}Dh%LUe+vea|Bxk%sDn-B z4kZ*Yf7S{fU9uAZO%L<)K%0F=d9{#J4TD}w6A0K!zhEI?ZOINi1)F0C7w42y?S7fl z{(oaM`|6Vya2H*ysg+n>P=z9=Q|ekxV4#t}KqIBDH7IgAo`OvYIj73SnhNOfdkJen zq+u@^-P_6N-i{bS^}XvtU*Q?m24!@C|*3xAPs-!BXvFEd@kzVW6E)&g{GS zY=u<2SV%&Efk9V)%WV_0gDDq#FJVGLPj!uRvhFvEq)Llvaww_tAWXi-8HFqylz$gi zvo!BvM1nF5Bq1Q0))Ez^qL^%r6C&ix^49ang6G-1xQ?Q1Pr?|>ER@O`=N9)XEOtG_ z`QN^|*;bUZoX3~GPKUqA)cu<7Kq_mTvT#u9T8$(m7S66@Z15wl^&etc-Ugg|<0FtTfqgp7O6T2le0JCMp6r)H?M_kM_b z&RTk|{y^E>7jObUUjBljY!9b;KejIb#@%84ihU?@*mUKixSbkjv#)_>Us(gCuGN&y zT@OHK|5qIE+HXZM@f`?hPM&UiHS&BHYn)MZ^?yxR8zZP*=hE+I6ZTK)5~tD~8W>y{ iJe9KfrZ9zj9sdBN)1W#sewIi80000A?Ru!uXiB+ox*s*S;K1kISuh3nqJ^=^>Wn0)pks|R1yn=&};t2b)u-n*4 zJkGRL6RMn@e?HG#d*nOkUiiZzpt+A8*GQfBgk^aKE|P3BZfO@zVI9=EjxR zI)G(s9l)}69e+TdEXgdY80Zy_@5ZO}ktZKyd@&Ob$&$<>ijba_&KRCNCEku1q6K*o z={VzyOQ;PDalgqJi1K@<^)S4MXioTfo4EtZNv5bC(pSd-DbM$ z_0XDGLWbK92)7?F+d2!iE;9m_VZU6Ukt$KH#ih}Iu(E?Pl^A1<@FmKhPxRbWP|(r0b}9^@@3=6Py9f1 zMMpkidU>haE|k{Q3F0yT7pawu92@{=((w3P0dk-`7-q z|LEwbl_bePQp3zDc{3YtZEdwrPftrcd+%BVBY$^);AZ@dHkTiM!9Df|k|Y@bp=0s@ zO-bQsG@9)XY>evr12^L*<^F)(qP}m1`hLD_y!dXnJLxa%z3q^C_80bF-=80lv{Uou zoqWFLJ^5hm2UbGs0G6#s6TpM|0ZDP1rg!rbvME2{S>M-GeZSl7F3d}c&d$!t{e}HE zi&~FwLBzL@_v;5XH#ci}Nih(GVK~Q6Y_!Qtm3w?sMAC5hftvchYU=xWhMmi&Y1+HE rxNz_1_g^1eC#f09dVKx#xctCBF?nJquv#)r00000NkvXXu0mjfF}Jb| From c3468fc0e91c4454d2e932deeeb5ce9dba7c8cf2 Mon Sep 17 00:00:00 2001 From: Gordon Williams Date: Tue, 24 May 2022 16:28:22 +0100 Subject: [PATCH 489/509] bthrm 0.09: Misc Fixes and improvements (https://github.com/espruino/BangleApps/pull/1655) --- apps/bthrm/ChangeLog | 1 + apps/bthrm/metadata.json | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/apps/bthrm/ChangeLog b/apps/bthrm/ChangeLog index 41eec666a..7ca8319b6 100644 --- a/apps/bthrm/ChangeLog +++ b/apps/bthrm/ChangeLog @@ -21,3 +21,4 @@ Adds some preset modes and a custom one Restructure the settings menu 0.08: Allow scanning for devices in settings +0.09: Misc Fixes and improvements (https://github.com/espruino/BangleApps/pull/1655) diff --git a/apps/bthrm/metadata.json b/apps/bthrm/metadata.json index 85c19ab33..39c1ff8bb 100644 --- a/apps/bthrm/metadata.json +++ b/apps/bthrm/metadata.json @@ -2,7 +2,7 @@ "id": "bthrm", "name": "Bluetooth Heart Rate Monitor", "shortName": "BT HRM", - "version": "0.08", + "version": "0.09", "description": "Overrides Bangle.js's build in heart rate monitor with an external Bluetooth one.", "icon": "app.png", "type": "app", From 4f512a15f4c23ade6788fd57628317dba178c97d Mon Sep 17 00:00:00 2001 From: Noah Howard <3317164+nh-99@users.noreply.github.com> Date: Tue, 24 May 2022 12:02:37 -0400 Subject: [PATCH 490/509] Remove new apps from master branch --- apps/discgolf/ChangeLog | 1 - apps/discgolf/README.md | 14 --- apps/discgolf/app-icon.js | 1 - apps/discgolf/app.js | 171 ------------------------------- apps/discgolf/app.png | Bin 10687 -> 0 bytes apps/discgolf/metadata.json | 14 --- apps/discgolf/summary_screen.png | Bin 3025 -> 0 bytes apps/discgolf/throw_screen.png | Bin 2459 -> 0 bytes apps/r2d2clk/ChangeLog | 1 - apps/r2d2clk/README.md | 7 -- apps/r2d2clk/app-icon.js | 1 - apps/r2d2clk/app.js | 67 ------------ apps/r2d2clk/app.png | Bin 3143 -> 0 bytes apps/r2d2clk/metadata.json | 15 --- 14 files changed, 292 deletions(-) delete mode 100644 apps/discgolf/ChangeLog delete mode 100644 apps/discgolf/README.md delete mode 100644 apps/discgolf/app-icon.js delete mode 100644 apps/discgolf/app.js delete mode 100644 apps/discgolf/app.png delete mode 100644 apps/discgolf/metadata.json delete mode 100644 apps/discgolf/summary_screen.png delete mode 100644 apps/discgolf/throw_screen.png delete mode 100644 apps/r2d2clk/ChangeLog delete mode 100644 apps/r2d2clk/README.md delete mode 100644 apps/r2d2clk/app-icon.js delete mode 100644 apps/r2d2clk/app.js delete mode 100644 apps/r2d2clk/app.png delete mode 100644 apps/r2d2clk/metadata.json diff --git a/apps/discgolf/ChangeLog b/apps/discgolf/ChangeLog deleted file mode 100644 index 220e1d1c2..000000000 --- a/apps/discgolf/ChangeLog +++ /dev/null @@ -1 +0,0 @@ -0.01: Initial version of disc golf app. Has throw and hole counter, along with summary screen. Uses buttons for holes & throws. \ No newline at end of file diff --git a/apps/discgolf/README.md b/apps/discgolf/README.md deleted file mode 100644 index 34a9dfe90..000000000 --- a/apps/discgolf/README.md +++ /dev/null @@ -1,14 +0,0 @@ -# Disc Golf - -Individual score tracking for disc golf on your wrist. - -![](throw_screen.png) -![](summary_screen.png) - -## Usage - -Press the side button once to increment throws. Double-tap the side button to increment holes. View your game summary with the button in the upper right of the screen. - -## Creator - -Made by [Noah Howard](https://github.com/nh-99) diff --git a/apps/discgolf/app-icon.js b/apps/discgolf/app-icon.js deleted file mode 100644 index cfc07a2fa..000000000 --- a/apps/discgolf/app-icon.js +++ /dev/null @@ -1 +0,0 @@ -require("heatshrink").decompress(atob("mEwxH+AH4A/ABFzudsAAImmABIppAAIQBFcYMBzwMDFbP+y5RJHYiHdLJYADG5AATzxaNFotszwuXFp5sFLq4tIVpANNF0D4FRqobFJ5peaFxKtJXgi9VzxdSLwwvUFyYvaFxIhKOYwvSFxoAEzyjJF7I/VFyzRjU5QICuYiNBxBJTQp7lFF7byQGQYwSOwovSOpJsFdpwvTao4voMQ4vQOQQwmX4oQCBAwwgCxAvWDIwvPGD4vIy4WJSSzcFMCCpGMC+eGChiUYJwjJPIRiTF5xULBxwvVEJgQQCIQOEF5X+zwfLSoY0HBYg9FF5a2QDSQvNWqJbBAQTaOMTY9PF6DFNAB4uRGLguUYygucfKwubGQgzLFsAAHFYV6Fc4A/AAw=")) \ No newline at end of file diff --git a/apps/discgolf/app.js b/apps/discgolf/app.js deleted file mode 100644 index 68bbd817d..000000000 --- a/apps/discgolf/app.js +++ /dev/null @@ -1,171 +0,0 @@ -Bangle.loadWidgets(); - -// -// App imports -// -var Layout = require("Layout"); - -// -// App variables -// -var holeCount = 1; -var throwCount = 0; -var drawTimeout; -var currentScreen = 'throw'; -var redraw = true; -var update = true; -var holeSummary = { - "< Back" : () => { update = true; redraw = true; currentScreen = 'throw'; E.showMenu(); createThrowLayout(); }, - "Hole #1": { value: 0 }, - "Hole #2": { value: 0 }, - "Hole #3": { value: 0 }, - "Hole #4": { value: 0 }, - "Hole #5": { value: 0 }, - "Hole #6": { value: 0 }, - "Hole #7": { value: 0 }, - "Hole #8": { value: 0 }, - "Hole #9": { value: 0 }, - "Front": { value: 0 }, - "Hole #10": { value: 0 }, - "Hole #11": { value: 0 }, - "Hole #12": { value: 0 }, - "Hole #13": { value: 0 }, - "Hole #14": { value: 0 }, - "Hole #15": { value: 0 }, - "Hole #16": { value: 0 }, - "Hole #17": { value: 0 }, - "Hole #18": { value: 0 }, - "Back": { value: 0 }, -}; - -// Images -function getBackImage() { - return atob("FhYBAAAAEAAAwAAHAAA//wH//wf//g///BwB+DAB4EAHwAAPAAA8AADwAAPAAB4AAHgAB+AH/wA/+AD/wAH8AA=="); -} -function getMenuImage() { - return { - width : 20, height : 20, bpp : 1, - buffer : require("heatshrink").decompress(atob("AAk///D//8CBcDBwITB4AiVA")) - }; -} -function getBasketIcon() { - return { - width : 20, height : 20, bpp : 1, - buffer : require("heatshrink").decompress(atob("gFggF/8EH/0AiWAgtogEW0EDt0Am3ggfsgEf4EB/EA//4j//wEChEP/8AgwnDAgw")) - }; -} -function getFrisbeeIcon() { - return { - width : 20, height : 20, bpp : 1, - buffer : require("heatshrink").decompress(atob("AAf+gF/wE+uEPx0B+PAn0cgf/4F3/0G/1g9/7g1/7AJB4+f/k+v3B/Hcg4WBj/4E4ItC")) - }; -} - -var throwLayout; - -function createThrowLayout() { - throwLayout = new Layout( { - type:"v", c: [ - // Title & menu button - { - type:"h", fillx:1, valign:-1, bgCol:g.theme.bg2, col: g.theme.fg2, c: [ - {type:"img", src:getBasketIcon()}, - {type:"txt", pad:4, font:"15%", label:holeCount, id: "holeCount"}, - {type:"txt", pad:4, font:"15%", label: '', fillx:1}, - {type:"btn", src:getMenuImage(), halign:1, cb: l=>{ currentScreen = 'summary'; update = true; redraw = true; }} - ] - }, - // Throw count - { - type:"h", filly:1, c: [ - {type:"img", pad:4, src:getFrisbeeIcon() }, - {type:"txt", fillx:1, font:"6x8:2", label:"Throws: "+throwCount, id:"throwCount"} - ] - } - ] - }, {lazy:true}); -} - -function incrementHole() { - if (holeCount > 18) return; - resetThrow(); - holeCount += 1; - holeSummary["Hole #" + holeCount] = {value: 0}; -} -function incrementThrow() { - throwCount += 1; - holeSummary["Hole #" + holeCount] = {value: throwCount}; -} -function decrementThrow() { - throwCount -= 1; - holeSummary["Hole #" + holeCount] = {value: throwCount}; -} -function resetThrow() { - throwCount = 0; -} -function computeFrontScore() { - var scoreSum = 0; - for (var i = 1; i < 10; i++) { - scoreSum += holeSummary["Hole #" + i].value; - } - holeSummary.Front = {value: scoreSum}; -} -function computeBackScore() { - var scoreSum = 0; - for (var i = 1; i < 19; i++) { - scoreSum += holeSummary["Hole #" + i].value; - } - holeSummary.Back = {value: scoreSum}; -} - -// update the app state/variables -function updateApp() { - throwLayout.holeCount.label = holeCount; - throwLayout.throwCount.label = "Throws: " + throwCount; -} - -// update the screen -function draw() { - updateApp(); - if (redraw) { - throwLayout.forgetLazyState(); - redraw = false; - } - if (update) { - if (currentScreen == 'throw') { - throwLayout.render(); - } else if (currentScreen == 'summary') { - E.showMenu(holeSummary); - } - update = false; - } - // schedule a draw for the next 500ms - if (drawTimeout) clearTimeout(drawTimeout); - drawTimeout = setTimeout(function() { - drawTimeout = undefined; - draw(); - }, 500 - (Date.now() % 500)); -} - -// -// button press events -// -setWatch((p) => { - if (p.time - p.lastTime < 0.2) { - decrementThrow(); - incrementHole(); - } else { - incrementThrow(); - } - computeFrontScore(); - computeBackScore(); - update = true; -}, BTN, {edge:"rising", debounce:50, repeat:true}); - -// -// main app function start -// -g.clear(); -Bangle.drawWidgets(); -createThrowLayout(); -draw(); \ No newline at end of file diff --git a/apps/discgolf/app.png b/apps/discgolf/app.png deleted file mode 100644 index 6aba5e54816571474aae74f0db98b39a7db7933a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10687 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 diff --git a/apps/discgolf/metadata.json b/apps/discgolf/metadata.json deleted file mode 100644 index 6d56f05e4..000000000 --- a/apps/discgolf/metadata.json +++ /dev/null @@ -1,14 +0,0 @@ -{ "id": "discgolf", - "name": "Disc Golf", - "shortName":"Disc Golf", - "version":"0.01", - "description": "A personal disc golf score tracker", - "icon": "app.png", - "tags": "", - "supports" : ["BANGLEJS2"], - "readme": "README.md", - "storage": [ - {"name":"discgolf.app.js","url":"app.js"}, - {"name":"discgolf.img","url":"app-icon.js","evaluate":true} - ] -} diff --git a/apps/discgolf/summary_screen.png b/apps/discgolf/summary_screen.png deleted file mode 100644 index 480d36eddfa8646b874e96458520979ac2de4ad6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3025 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 diff --git a/apps/r2d2clk/ChangeLog b/apps/r2d2clk/ChangeLog deleted file mode 100644 index 5560f00bc..000000000 --- a/apps/r2d2clk/ChangeLog +++ /dev/null @@ -1 +0,0 @@ -0.01: New App! diff --git a/apps/r2d2clk/README.md b/apps/r2d2clk/README.md deleted file mode 100644 index 24730a0bf..000000000 --- a/apps/r2d2clk/README.md +++ /dev/null @@ -1,7 +0,0 @@ -# R2D2 Clock - -A clock with R2D2's shiny metal face on it. :) - -## Creator - -Made by [Noah Howard](https://github.com/nh-99) diff --git a/apps/r2d2clk/app-icon.js b/apps/r2d2clk/app-icon.js deleted file mode 100644 index 246df9376..000000000 --- a/apps/r2d2clk/app-icon.js +++ /dev/null @@ -1 +0,0 @@ -require("heatshrink").decompress(atob("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")) \ No newline at end of file diff --git a/apps/r2d2clk/app.js b/apps/r2d2clk/app.js deleted file mode 100644 index a7ead76f1..000000000 --- a/apps/r2d2clk/app.js +++ /dev/null @@ -1,67 +0,0 @@ -Graphics.prototype.setFontUndo = function(scale) { - // Actual height 19 (20 - 2) - this.setFontCustom(atob("AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKqKAqooCqigKqKAAAACgAAKAAAoAACgAAAAAAAAACgAAKAAAoAACgAAAAAAKCgAoKAKqqAqqoCqqgKqqAKCgAoKAKqqAqqoCqqgKqqAKCgAoKAAAAAKgoAqCgKqKAqooKiioqKKiooqKiioKKqAoqoCgqAKCoAAAACoCgKgKAiCoCIKgKioAqKgACoAAKgACoAAKgACoqAKioCoIgKgiAoCoCgKgAAAAKqgAqqAKqqAqqoKiioqKKiooqKiioKAKAoAoCgCgKAKAAAACgAAKAAAoAACgAAAAAAKqgAqqAKqqAqqoCgCgKAKAAAACgCgKAKAqqoCqqgCqoAKqgAAAACigAKKAAqoACqgAqoACqgAKqAAqoAAqoACqgAKKAAooAAAAAAoAACgAAKAAAoAAqqACqoAKqgAqqAAKAAAoAACgAAKAAAAAAACoAAKgAAqAACoAAAAAoAACgAAKAAAoAACgAAKAAAoAACgAAKAAAoAACgAAKAAAAAAACgAAKAAAoAACgAAAAAAoAACgAAqAACoAAqAACoAAqAACoAAqAACoAAqAACoAAqAACoAAKAAAoAAAAAACqoAKqgCqqgKqqAoAoCgCgKAKAoAoCqqgKqqAKqgAqqAAAAAqqoCqqgKqqAqqoAAAAKCqAoKoCiqgKKqAoooCiigKKKAoooCqigKqKAKgoAqCgAAAAoAoCgCgKAKAoAoCiigKKKAoooCiigKqqAqqoAqqACqoAAAACqAAKoAAqoACqgAAKAAAoAACgAAKAAqqoCqqgKqqAqqoAAAAKoKAqgoCqigKqKAoooCiigKKKAoooCiqgKKqAoKgCgqAAAAAKqgAqqAKqqAqqoCiigKKKAoooCiigKKqAoqoCgqAKCoAAAACgAAKAAAoAACgAAKAAAoAACgAAKAAAqqoCqqgCqqAKqoAAAACqoAKqgCqqgKqqAoooCiigKKKAoooCqqgKqqAKqgAqqAAAAAKgAAqAAKqAAqoACigAKKAAooACigAKqqAqqoAqqgCqqAAAACgCgKAKAoAoCgCgAAAAoAqCgCoKAKgoAqAAAAAKAAAoAAKoAAqgAKqgAqqAKgqAqCoCgCgKAKAAAAAoKACgoAKCgAoKACgoAKCgAoKACgoAKCgAoKACgoAKCgAAAAKAKAoAoCoKgKgqAKqgAqqAAqgACqAACgAAKAAAAACgAAKAAAoAACgAAKKKAoooCiigKKKAqoACqgACoAAKgAAAAACqqAKqoCqqgKqqAoAACgAAKCoAoKgCiqgKKqAoooCiigKqqAqqoAqqACqoAAAAAqqgCqqAqqoCqqgKKAAooACigAKKAAqqoCqqgCqqAKqoAAAAKqqAqqoCqqgKqqAoooCiigKKKAoooCqqgKqqAKCgAoKAAAAAKqgAqqAKqqAqqoCgCgKAKAoAoCgCgKAKAoAoCgCgKAKAAAACqqgKqqAqqoCqqgKAKAoAoCoKgKgqAKqgAqqAAqgACqAAAAACqoAKqgCqqgKqqAoooCiigKKKAoooCgCgKAKAoAoCgCgAAAAKqoAqqgKqqAqqoCigAKKAAooACigAKAAAoAACgAAKAAAAAAAqqACqoAqqoCqqgKAKAoAoCiigKKKAoqoCiqgKKqAoqoAAAAKqqAqqoCqqgKqqAAoAACgAAKAAAoACqqgKqqAqqoCqqgAAAAoAoCgCgKAKAoAoCqqgKqqAqqoCqqgKAKAoAoCgCgKAKAAAAAAKAAAoAACoAAKgAAKAAAoAACgAAKAqqoCqqgKqoAqqgAAAAKqqAqqoCqqgKqqACqAAKoACqoAKqgCoKgKgqAoAoCgCgAAAAqqgCqqAKqqAqqoAACgAAKAAAoAACgAAKAAAoAACgAAKAAAACqqgKqqAqqoCqqgCoAAKgAAKgAAqAAKgAAqAAKqqAqqoCqqgKqqAAAACqqgKqqAqqoCqqgCoAAKgAAKgAAqAAqqoCqqgKqqAqqoAAAACqoAKqgCqqgKqqAoAoCgCgKAKAoAoCqqgKqqAKqgAqqAAAAAqqoCqqgKqqAqqoCigAKKAAooACigAKqAAqoAAqAACoAAAAAAqqACqoAqqoCqqgKAKAoAoCgKgKAqAqqoCqqgCqqAKqoAAAAKqqAqqoCqqgKqqAooACigAKKgAoqACqqgKqqAKioAqKgAAAAKgoAqCgKqKAqooCiigKKKAoooCiigKKqAoqoCgqAKCoAAAACgAAKAAAoAACgAAKqqAqqoCqqgKqqAoAACgAAKAAAoAAAAAAKqoAqqgCqqgKqqAAAoAACgAAKAAAoCqqgKqqAqqgCqqAAAAAqqACqoAKqoAqqgAAKgAAqAACoAAKgKqoAqqgCqoAKqgAAAACqqgKqqAqqoCqqgACoAAKgACoAAKgAAKgAAqAKqqAqqoCqqgKqqAAAACoKgKgqAqqoCqqgAqgACqAAKoAAqgAqqoCqqgKgqAqCoAAAAKoAAqgACqgAKqAAAqoACqgAKqAAqoCqgAKqAAqgACqAAAAAAoCoCgKgKCqAoKoCiqgKKqAqooCqigKoKAqgoCoCgKgKAAAACqqgKqqAqqoCqqgKAKAoAoAAAAKAAAoAACoAAKgAAKgAAqAAAqAACoAACoAAKgAAKgAAqAAAqAACoAACgAAKAAAACgCgKAKAqqoCqqgKqqAqqoAAA"), 32, atob("DQULDw0RDQUHBw0NBQ0FEQ0FDQ0NDQ0NDQ0FBQsNCw0RDQ0NDQ0NDQ0NDQ0NDw0NDQ0NDQ0NDQ8NDQ0HEQc="), 22+(scale<<8)+(1<<16)); - return this; -}; - -var IMAGEWIDTH = 117; -var IMAGEHEIGHT = 60; -var r2d2 = require("heatshrink").decompress(atob("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")); - -// 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() { - //reset().clearRect(0,24,g.getWidth(),g.getHeight()-IMAGEHEIGHT); - // draw r2d2 - g.drawImage(r2d2, (g.getWidth()/2)-(IMAGEWIDTH/2), g.getHeight()-IMAGEHEIGHT); - - var x = g.getWidth()/2; - var y = g.getHeight()/2 - 30; - g.reset(); - // work out locale-friendly date/time - var date = new Date(); - var timeStr = require("locale").time(date,1).trim(); - var dateStr = require("locale").date(date).toUpperCase(); - - - // draw time - g.setFontAlign(0,0).setFont("Undo:3"); - g.clearRect(0,y-30,g.getWidth(),y+30); // clear the background - g.drawString(timeStr,x,y); - // draw date - y += 40; - g.setFontAlign(0,0).setFont("Undo"); - g.clearRect(0,y-10,g.getWidth(),y+20); // clear the background - g.drawString(dateStr,x,y); - // queue draw in one minute - queueDraw(); -} - -// Clear the screen once, at startup -g.clear(); -// draw immediately at first, queue update -draw(); -// Stop updates when LCD is off, restart when on -Bangle.on('lcdPower',on=>{ - if (on) { - draw(); // draw immediately, queue redraw - } else { // stop draw timer - if (drawTimeout) clearTimeout(drawTimeout); - drawTimeout = undefined; - } -}); -// Show launcher when middle button pressed -Bangle.setUI("clock"); -// Load widgets -Bangle.loadWidgets(); -Bangle.drawWidgets(); \ No newline at end of file diff --git a/apps/r2d2clk/app.png b/apps/r2d2clk/app.png deleted file mode 100644 index 94502501d69c4d629548302d7d8b3fa7b5126452..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3143 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 diff --git a/apps/r2d2clk/metadata.json b/apps/r2d2clk/metadata.json deleted file mode 100644 index f2cde76f4..000000000 --- a/apps/r2d2clk/metadata.json +++ /dev/null @@ -1,15 +0,0 @@ -{ "id": "r2d2clk", - "name": "R2D2 Clock", - "shortName":"R2D2 Clock", - "version":"0.01", - "description": "A clock with R2D2's shiny metal face on it. :)", - "icon": "app.png", - "type": "clock", - "tags": "clock", - "supports" : ["BANGLEJS2"], - "readme": "README.md", - "storage": [ - {"name":"r2d2clk.app.js","url":"app.js"}, - {"name":"r2d2clk.img","url":"app-icon.js","evaluate":true} - ] -} From f5b85299a3bc17b2ebf38d2cba94b11e6e2370ef Mon Sep 17 00:00:00 2001 From: Noah Howard <3317164+nh-99@users.noreply.github.com> Date: Tue, 24 May 2022 12:04:19 -0400 Subject: [PATCH 491/509] Revert patches to mandelbrot clock --- apps/mandelbrotclock/mandelbrotclock.js | 41 ++++--------------------- 1 file changed, 6 insertions(+), 35 deletions(-) diff --git a/apps/mandelbrotclock/mandelbrotclock.js b/apps/mandelbrotclock/mandelbrotclock.js index ffc50e9bd..94636056e 100644 --- a/apps/mandelbrotclock/mandelbrotclock.js +++ b/apps/mandelbrotclock/mandelbrotclock.js @@ -1,5 +1,4 @@ // MIT License - James Milner 2021 -const locale = require('locale'); const mandelbrotBmp = { width: 176, @@ -13,51 +12,23 @@ const mandelbrotBmp = { ), }; -// 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() { g.drawImage(mandelbrotBmp); // work out how to display the current time - var date = new Date(); - var timeStr = locale.time(date,1); - var dateStr = locale.dow(date, true).toUpperCase() + ' ' + date.getDate(); + const d = new Date(); + const h = d.getHours(), + m = d.getMinutes(); + const time = h + ":" + ("0" + m).substr(-2); // Reset the state of the graphics library g.reset(); g.setColor(1, 1, 1); g.setFont("Vector", 30); - g.drawString(timeStr, 70, 58, false); - g.setFont("Vector", 20); - g.drawString(dateStr, 70, 88, false); - - queueDraw(); + g.drawString(time, 70, 68, false); } -// Clear the screen once, at startup g.clear(); // draw immediately at first draw(); - -// Stop updates when LCD is off, restart when on -Bangle.on('lcdPower',on=>{ - if (on) { - draw(); // draw immediately, queue redraw - } else { // stop draw timer - if (drawTimeout) clearTimeout(drawTimeout); - drawTimeout = undefined; - } -}); - -// Show launcher when middle button pressed -Bangle.setUI("clock"); +var secondInterval = setInterval(draw, 1000); From c64882a82feee1bdb4836d8e9a46170cd2fa31df Mon Sep 17 00:00:00 2001 From: Noah Howard <3317164+nh-99@users.noreply.github.com> Date: Tue, 24 May 2022 12:09:25 -0400 Subject: [PATCH 492/509] Add r2d2 clock --- apps/r2d2clk/ChangeLog | 1 + apps/r2d2clk/README.md | 11 ++++++ apps/r2d2clk/app-icon.js | 1 + apps/r2d2clk/app.js | 67 ++++++++++++++++++++++++++++++++++++ apps/r2d2clk/app.png | Bin 0 -> 3143 bytes apps/r2d2clk/metadata.json | 15 ++++++++ apps/r2d2clk/screenshot.png | Bin 0 -> 2885 bytes 7 files changed, 95 insertions(+) create mode 100644 apps/r2d2clk/ChangeLog create mode 100644 apps/r2d2clk/README.md create mode 100644 apps/r2d2clk/app-icon.js create mode 100644 apps/r2d2clk/app.js create mode 100644 apps/r2d2clk/app.png create mode 100644 apps/r2d2clk/metadata.json create mode 100644 apps/r2d2clk/screenshot.png diff --git a/apps/r2d2clk/ChangeLog b/apps/r2d2clk/ChangeLog new file mode 100644 index 000000000..5560f00bc --- /dev/null +++ b/apps/r2d2clk/ChangeLog @@ -0,0 +1 @@ +0.01: New App! diff --git a/apps/r2d2clk/README.md b/apps/r2d2clk/README.md new file mode 100644 index 000000000..cd98b9170 --- /dev/null +++ b/apps/r2d2clk/README.md @@ -0,0 +1,11 @@ +# R2D2 Clock + +A clock with R2D2's shiny metal face on it. :) + +![](screenshot.png) + +## Creator + +Made by [Noah Howard](https://github.com/nh-99) + +Based on [Interlaced Clock](https://github.com/espruino/BangleApps/tree/master/apps/intclock) \ No newline at end of file diff --git a/apps/r2d2clk/app-icon.js b/apps/r2d2clk/app-icon.js new file mode 100644 index 000000000..246df9376 --- /dev/null +++ b/apps/r2d2clk/app-icon.js @@ -0,0 +1 @@ +require("heatshrink").decompress(atob("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")) \ No newline at end of file diff --git a/apps/r2d2clk/app.js b/apps/r2d2clk/app.js new file mode 100644 index 000000000..a7ead76f1 --- /dev/null +++ b/apps/r2d2clk/app.js @@ -0,0 +1,67 @@ +Graphics.prototype.setFontUndo = function(scale) { + // Actual height 19 (20 - 2) + this.setFontCustom(atob("AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKqKAqooCqigKqKAAAACgAAKAAAoAACgAAAAAAAAACgAAKAAAoAACgAAAAAAKCgAoKAKqqAqqoCqqgKqqAKCgAoKAKqqAqqoCqqgKqqAKCgAoKAAAAAKgoAqCgKqKAqooKiioqKKiooqKiioKKqAoqoCgqAKCoAAAACoCgKgKAiCoCIKgKioAqKgACoAAKgACoAAKgACoqAKioCoIgKgiAoCoCgKgAAAAKqgAqqAKqqAqqoKiioqKKiooqKiioKAKAoAoCgCgKAKAAAACgAAKAAAoAACgAAAAAAKqgAqqAKqqAqqoCgCgKAKAAAACgCgKAKAqqoCqqgCqoAKqgAAAACigAKKAAqoACqgAqoACqgAKqAAqoAAqoACqgAKKAAooAAAAAAoAACgAAKAAAoAAqqACqoAKqgAqqAAKAAAoAACgAAKAAAAAAACoAAKgAAqAACoAAAAAoAACgAAKAAAoAACgAAKAAAoAACgAAKAAAoAACgAAKAAAAAAACgAAKAAAoAACgAAAAAAoAACgAAqAACoAAqAACoAAqAACoAAqAACoAAqAACoAAqAACoAAKAAAoAAAAAACqoAKqgCqqgKqqAoAoCgCgKAKAoAoCqqgKqqAKqgAqqAAAAAqqoCqqgKqqAqqoAAAAKCqAoKoCiqgKKqAoooCiigKKKAoooCqigKqKAKgoAqCgAAAAoAoCgCgKAKAoAoCiigKKKAoooCiigKqqAqqoAqqACqoAAAACqAAKoAAqoACqgAAKAAAoAACgAAKAAqqoCqqgKqqAqqoAAAAKoKAqgoCqigKqKAoooCiigKKKAoooCiqgKKqAoKgCgqAAAAAKqgAqqAKqqAqqoCiigKKKAoooCiigKKqAoqoCgqAKCoAAAACgAAKAAAoAACgAAKAAAoAACgAAKAAAqqoCqqgCqqAKqoAAAACqoAKqgCqqgKqqAoooCiigKKKAoooCqqgKqqAKqgAqqAAAAAKgAAqAAKqAAqoACigAKKAAooACigAKqqAqqoAqqgCqqAAAACgCgKAKAoAoCgCgAAAAoAqCgCoKAKgoAqAAAAAKAAAoAAKoAAqgAKqgAqqAKgqAqCoCgCgKAKAAAAAoKACgoAKCgAoKACgoAKCgAoKACgoAKCgAoKACgoAKCgAAAAKAKAoAoCoKgKgqAKqgAqqAAqgACqAACgAAKAAAAACgAAKAAAoAACgAAKKKAoooCiigKKKAqoACqgACoAAKgAAAAACqqAKqoCqqgKqqAoAACgAAKCoAoKgCiqgKKqAoooCiigKqqAqqoAqqACqoAAAAAqqgCqqAqqoCqqgKKAAooACigAKKAAqqoCqqgCqqAKqoAAAAKqqAqqoCqqgKqqAoooCiigKKKAoooCqqgKqqAKCgAoKAAAAAKqgAqqAKqqAqqoCgCgKAKAoAoCgCgKAKAoAoCgCgKAKAAAACqqgKqqAqqoCqqgKAKAoAoCoKgKgqAKqgAqqAAqgACqAAAAACqoAKqgCqqgKqqAoooCiigKKKAoooCgCgKAKAoAoCgCgAAAAKqoAqqgKqqAqqoCigAKKAAooACigAKAAAoAACgAAKAAAAAAAqqACqoAqqoCqqgKAKAoAoCiigKKKAoqoCiqgKKqAoqoAAAAKqqAqqoCqqgKqqAAoAACgAAKAAAoACqqgKqqAqqoCqqgAAAAoAoCgCgKAKAoAoCqqgKqqAqqoCqqgKAKAoAoCgCgKAKAAAAAAKAAAoAACoAAKgAAKAAAoAACgAAKAqqoCqqgKqoAqqgAAAAKqqAqqoCqqgKqqACqAAKoACqoAKqgCoKgKgqAoAoCgCgAAAAqqgCqqAKqqAqqoAACgAAKAAAoAACgAAKAAAoAACgAAKAAAACqqgKqqAqqoCqqgCoAAKgAAKgAAqAAKgAAqAAKqqAqqoCqqgKqqAAAACqqgKqqAqqoCqqgCoAAKgAAKgAAqAAqqoCqqgKqqAqqoAAAACqoAKqgCqqgKqqAoAoCgCgKAKAoAoCqqgKqqAKqgAqqAAAAAqqoCqqgKqqAqqoCigAKKAAooACigAKqAAqoAAqAACoAAAAAAqqACqoAqqoCqqgKAKAoAoCgKgKAqAqqoCqqgCqqAKqoAAAAKqqAqqoCqqgKqqAooACigAKKgAoqACqqgKqqAKioAqKgAAAAKgoAqCgKqKAqooCiigKKKAoooCiigKKqAoqoCgqAKCoAAAACgAAKAAAoAACgAAKqqAqqoCqqgKqqAoAACgAAKAAAoAAAAAAKqoAqqgCqqgKqqAAAoAACgAAKAAAoCqqgKqqAqqgCqqAAAAAqqACqoAKqoAqqgAAKgAAqAACoAAKgKqoAqqgCqoAKqgAAAACqqgKqqAqqoCqqgACoAAKgACoAAKgAAKgAAqAKqqAqqoCqqgKqqAAAACoKgKgqAqqoCqqgAqgACqAAKoAAqgAqqoCqqgKgqAqCoAAAAKoAAqgACqgAKqAAAqoACqgAKqAAqoCqgAKqAAqgACqAAAAAAoCoCgKgKCqAoKoCiqgKKqAqooCqigKoKAqgoCoCgKgKAAAACqqgKqqAqqoCqqgKAKAoAoAAAAKAAAoAACoAAKgAAKgAAqAAAqAACoAACoAAKgAAKgAAqAAAqAACoAACgAAKAAAACgCgKAKAqqoCqqgKqqAqqoAAA"), 32, atob("DQULDw0RDQUHBw0NBQ0FEQ0FDQ0NDQ0NDQ0FBQsNCw0RDQ0NDQ0NDQ0NDQ0NDw0NDQ0NDQ0NDQ8NDQ0HEQc="), 22+(scale<<8)+(1<<16)); + return this; +}; + +var IMAGEWIDTH = 117; +var IMAGEHEIGHT = 60; +var r2d2 = require("heatshrink").decompress(atob("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")); + +// 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() { + //reset().clearRect(0,24,g.getWidth(),g.getHeight()-IMAGEHEIGHT); + // draw r2d2 + g.drawImage(r2d2, (g.getWidth()/2)-(IMAGEWIDTH/2), g.getHeight()-IMAGEHEIGHT); + + var x = g.getWidth()/2; + var y = g.getHeight()/2 - 30; + g.reset(); + // work out locale-friendly date/time + var date = new Date(); + var timeStr = require("locale").time(date,1).trim(); + var dateStr = require("locale").date(date).toUpperCase(); + + + // draw time + g.setFontAlign(0,0).setFont("Undo:3"); + g.clearRect(0,y-30,g.getWidth(),y+30); // clear the background + g.drawString(timeStr,x,y); + // draw date + y += 40; + g.setFontAlign(0,0).setFont("Undo"); + g.clearRect(0,y-10,g.getWidth(),y+20); // clear the background + g.drawString(dateStr,x,y); + // queue draw in one minute + queueDraw(); +} + +// Clear the screen once, at startup +g.clear(); +// draw immediately at first, queue update +draw(); +// Stop updates when LCD is off, restart when on +Bangle.on('lcdPower',on=>{ + if (on) { + draw(); // draw immediately, queue redraw + } else { // stop draw timer + if (drawTimeout) clearTimeout(drawTimeout); + drawTimeout = undefined; + } +}); +// Show launcher when middle button pressed +Bangle.setUI("clock"); +// Load widgets +Bangle.loadWidgets(); +Bangle.drawWidgets(); \ No newline at end of file diff --git a/apps/r2d2clk/app.png b/apps/r2d2clk/app.png new file mode 100644 index 0000000000000000000000000000000000000000..94502501d69c4d629548302d7d8b3fa7b5126452 GIT binary patch literal 3143 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 literal 0 HcmV?d00001 diff --git a/apps/r2d2clk/metadata.json b/apps/r2d2clk/metadata.json new file mode 100644 index 000000000..f2cde76f4 --- /dev/null +++ b/apps/r2d2clk/metadata.json @@ -0,0 +1,15 @@ +{ "id": "r2d2clk", + "name": "R2D2 Clock", + "shortName":"R2D2 Clock", + "version":"0.01", + "description": "A clock with R2D2's shiny metal face on it. :)", + "icon": "app.png", + "type": "clock", + "tags": "clock", + "supports" : ["BANGLEJS2"], + "readme": "README.md", + "storage": [ + {"name":"r2d2clk.app.js","url":"app.js"}, + {"name":"r2d2clk.img","url":"app-icon.js","evaluate":true} + ] +} diff --git a/apps/r2d2clk/screenshot.png b/apps/r2d2clk/screenshot.png new file mode 100644 index 0000000000000000000000000000000000000000..f0b3ca84f82f68f44b89a9c46a66fbe09adf0422 GIT binary patch literal 2885 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 literal 0 HcmV?d00001 From 43b07419b92a8ce1ee4759fac15f5b3f1fc2bf1a Mon Sep 17 00:00:00 2001 From: Gabriele Monaco Date: Wed, 25 May 2022 08:59:24 +0200 Subject: [PATCH 493/509] messages 0.38: using Telegram icon on Telegram FOSS --- apps/messages/app.js | 1 + apps/messages/metadata.json | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/apps/messages/app.js b/apps/messages/app.js index aac59e246..ee9afc041 100644 --- a/apps/messages/app.js +++ b/apps/messages/app.js @@ -112,6 +112,7 @@ function getMessageImage(msg) { if (s=="snapchat") return atob("GBgBAAAAAAAAAH4AAf+AAf+AA//AA//AA//AA//AA//AH//4D//wB//gA//AB//gD//wH//4f//+P//8D//wAf+AAH4AAAAAAAAA"); if (s=="teams") return atob("GBgBAAAAAAAAAAQAAB4AAD8IAA8cP/M+f/scf/gIeDgAfvvefvvffvvffvvffvvff/vff/veP/PeAA/cAH/AAD+AAD8AAAQAAAAA"); if (s=="telegram") return atob("GBiBAAAAAAAAAAAAAAAAAwAAHwAA/wAD/wAf3gD/Pgf+fh/4/v/z/P/H/D8P/Acf/AM//AF/+AF/+AH/+ADz+ADh+ADAcAAAMAAAAA=="); + if (s=="telegram foss") return atob("GBiBAAAAAAAAAAAAAAAAAwAAHwAA/wAD/wAf3gD/Pgf+fh/4/v/z/P/H/D8P/Acf/AM//AF/+AF/+AH/+ADz+ADh+ADAcAAAMAAAAA=="); if (s=="threema") return atob("GBjB/4Yx//8AAAAAAAAAAAAAfgAB/4AD/8AH/+AH/+AP//AP2/APw/APw/AHw+AH/+AH/8AH/4AH/gAAAAAAAAAAAAAAAAAAAAAAAAAAAAA="); if (s=="to do") return atob("GBgBAAAAAAAAAAAwAAB4AAD8AAH+AAP/DAf/Hg//Px/+f7/8///4///wf//gP//AH/+AD/8AB/4AA/wAAfgAAPAAAGAAAAAAAAAA"); if (s=="twitch") return atob("GBgBH//+P//+P//+eAAGeAAGeAAGeDGGeDOGeDOGeDOGeDOGeDOGeDOGeAAOeAAOeAAcf4/4f5/wf7/gf//Af/+AA/AAA+AAAcAA"); diff --git a/apps/messages/metadata.json b/apps/messages/metadata.json index ab9b03273..fd09fdfe4 100644 --- a/apps/messages/metadata.json +++ b/apps/messages/metadata.json @@ -1,7 +1,7 @@ { "id": "messages", "name": "Messages", - "version": "0.37", + "version": "0.38", "description": "App to display notifications from iOS and Gadgetbridge/Android", "icon": "app.png", "type": "app", From 8e4063004c86e06249d9c215ffc1d56d078defb2 Mon Sep 17 00:00:00 2001 From: Gordon Williams Date: Wed, 25 May 2022 08:24:20 +0100 Subject: [PATCH 494/509] changelog and duplicate fix --- apps/messages/ChangeLog | 2 +- apps/messages/app.js | 3 +-- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/apps/messages/ChangeLog b/apps/messages/ChangeLog index d6ad393d6..53157f0d8 100644 --- a/apps/messages/ChangeLog +++ b/apps/messages/ChangeLog @@ -50,4 +50,4 @@ 0.35: Reset graphics colors before rendering a message (possibly fix #1752) 0.36: Ensure a new message plus an almost immediate deletion of that message doesn't load the messages app (fix #1362) 0.37: Now use the setUI 'back' icon in the top left rather than specific buttons/menu items - +0.38: Add telegram foss handling diff --git a/apps/messages/app.js b/apps/messages/app.js index ee9afc041..93c8ebf3e 100644 --- a/apps/messages/app.js +++ b/apps/messages/app.js @@ -111,8 +111,7 @@ function getMessageImage(msg) { if (s=="sms message") return getNotificationImage(); if (s=="snapchat") return atob("GBgBAAAAAAAAAH4AAf+AAf+AA//AA//AA//AA//AA//AH//4D//wB//gA//AB//gD//wH//4f//+P//8D//wAf+AAH4AAAAAAAAA"); if (s=="teams") return atob("GBgBAAAAAAAAAAQAAB4AAD8IAA8cP/M+f/scf/gIeDgAfvvefvvffvvffvvffvvff/vff/veP/PeAA/cAH/AAD+AAD8AAAQAAAAA"); - if (s=="telegram") return atob("GBiBAAAAAAAAAAAAAAAAAwAAHwAA/wAD/wAf3gD/Pgf+fh/4/v/z/P/H/D8P/Acf/AM//AF/+AF/+AH/+ADz+ADh+ADAcAAAMAAAAA=="); - if (s=="telegram foss") return atob("GBiBAAAAAAAAAAAAAAAAAwAAHwAA/wAD/wAf3gD/Pgf+fh/4/v/z/P/H/D8P/Acf/AM//AF/+AF/+AH/+ADz+ADh+ADAcAAAMAAAAA=="); + if (s=="telegram" || s=="telegram foss") return atob("GBiBAAAAAAAAAAAAAAAAAwAAHwAA/wAD/wAf3gD/Pgf+fh/4/v/z/P/H/D8P/Acf/AM//AF/+AF/+AH/+ADz+ADh+ADAcAAAMAAAAA=="); if (s=="threema") return atob("GBjB/4Yx//8AAAAAAAAAAAAAfgAB/4AD/8AH/+AH/+AP//AP2/APw/APw/AHw+AH/+AH/8AH/4AH/gAAAAAAAAAAAAAAAAAAAAAAAAAAAAA="); if (s=="to do") return atob("GBgBAAAAAAAAAAAwAAB4AAD8AAH+AAP/DAf/Hg//Px/+f7/8///4///wf//gP//AH/+AD/8AB/4AA/wAAfgAAPAAAGAAAAAAAAAA"); if (s=="twitch") return atob("GBgBH//+P//+P//+eAAGeAAGeAAGeDGGeDOGeDOGeDOGeDOGeDOGeDOGeAAOeAAOeAAcf4/4f5/wf7/gf//Af/+AA/AAA+AAAcAA"); From cb890e6fc586e5efc5a26f1019c7384482d4ff12 Mon Sep 17 00:00:00 2001 From: Lubomir Date: Tue, 24 May 2022 22:08:43 +1000 Subject: [PATCH 495/509] android: Fix SMS bug --- apps/android/ChangeLog | 1 + apps/android/boot.js | 13 ++++++++++++- apps/android/metadata.json | 2 +- 3 files changed, 14 insertions(+), 2 deletions(-) diff --git a/apps/android/ChangeLog b/apps/android/ChangeLog index 55f456795..f13ccd95c 100644 --- a/apps/android/ChangeLog +++ b/apps/android/ChangeLog @@ -8,3 +8,4 @@ 0.07: Include charging state in battery updates to phone 0.08: Handling of alarms 0.09: Alarm vibration, repeat, and auto-snooze now handled by sched +0.10: Fix SMS bug diff --git a/apps/android/boot.js b/apps/android/boot.js index fb2101aa4..efd7e7e46 100644 --- a/apps/android/boot.js +++ b/apps/android/boot.js @@ -3,6 +3,7 @@ Bluetooth.println(""); Bluetooth.println(JSON.stringify(message)); } + var lastMsg; var settings = require("Storage").readJSON("android.settings.json",1)||{}; //default alarm settings @@ -18,7 +19,17 @@ /* TODO: Call handling, fitness */ var HANDLERS = { // {t:"notify",id:int, src,title,subject,body,sender,tel:string} add - "notify" : function() { Object.assign(event,{t:"add",positive:true, negative:true});require("messages").pushMessage(event); }, + "notify" : function() { + Object.assign(event,{t:"add",positive:true, negative:true}); + // Detect a weird GadgetBridge bug and fix it + // For some reason SMS messages send two GB notifications, with different sets of info + if (lastMsg && event.body == lastMsg.body && lastMsg.src == undefined && event.src == "Messages") { + // Mutate the other message + event.id = lastMsg.id; + } + lastMsg = event; + 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 diff --git a/apps/android/metadata.json b/apps/android/metadata.json index 4051a344b..bf37b8407 100644 --- a/apps/android/metadata.json +++ b/apps/android/metadata.json @@ -2,7 +2,7 @@ "id": "android", "name": "Android Integration", "shortName": "Android", - "version": "0.09", + "version": "0.10", "description": "Display notifications/music/etc sent from the Gadgetbridge app on Android. This replaces the old 'Gadgetbridge' Bangle.js widget.", "icon": "app.png", "tags": "tool,system,messages,notifications,gadgetbridge", From 68edab1a18ef817bfd47f3531c5c51adf0b1b4e9 Mon Sep 17 00:00:00 2001 From: Gordon Williams Date: Wed, 25 May 2022 09:58:02 +0100 Subject: [PATCH 496/509] Move getMessageImage/getMessageImageCol to the library as per https://github.com/espruino/BangleApps/pull/1872 No version bump as no functionality changes --- apps/messages/app.js | 95 +++----------------------------------------- apps/messages/lib.js | 81 +++++++++++++++++++++++++++++++++++++ 2 files changed, 86 insertions(+), 90 deletions(-) diff --git a/apps/messages/app.js b/apps/messages/app.js index 93c8ebf3e..63154c4b4 100644 --- a/apps/messages/app.js +++ b/apps/messages/app.js @@ -67,99 +67,14 @@ function saveMessages() { require("Storage").writeJSON("messages.json",MESSAGES) } -function getNotificationImage() { - 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 getFBIcon() { - return atob("GBiBAAAAAAAAAAAYAAD/AAP/wAf/4A/48A/g8B/g+B/j+B/n+D/n/D8A/B8A+B+B+B/n+A/n8A/n8Afn4APnwADnAAAAAAAAAAAAAA=="); -} function getPosImage() { return atob("GRSBAAAAAYAAAcAAAeAAAfAAAfAAAfAAAfAAAfAAAfBgAfA4AfAeAfAPgfAD4fAA+fAAP/AAD/AAA/AAAPAAADAAAA=="); } function getNegImage() { return atob("FhaBADAAMeAB78AP/4B/fwP4/h/B/P4D//AH/4AP/AAf4AB/gAP/AB/+AP/8B/P4P4fx/A/v4B//AD94AHjAAMA="); } -/* -* icons should be 24x24px with 1bpp colors and 'Transparency to Color' -* http://www.espruino.com/Image+Converter -*/ -function getMessageImage(msg) { - if (msg.img) return atob(msg.img); - var s = (msg.src||"").toLowerCase(); - if (s=="alarm" || s =="alarmclockreceiver") return atob("GBjBAP////8AAAAAAAACAEAHAOAefng5/5wTgcgHAOAOGHAMGDAYGBgYGBgYGBgYGBgYDhgYBxgMATAOAHAHAOADgcAB/4AAfgAAAAAAAAA="); - if (s=="bibel") return atob("GBgBAAAAA//wD//4D//4H//4H/f4H/f4H+P4H4D4H4D4H/f4H/f4H/f4H/f4H/f4H//4H//4H//4GAAAEAAAEAAACAAAB//4AAAA"); - if (s=="calendar") return atob("GBiBAAAAAAAAAAAAAA//8B//+BgAGBgAGBgAGB//+B//+B//+B9m2B//+B//+Btm2B//+B//+Btm+B//+B//+A//8AAAAAAAAAAAAA=="); - if (s=="corona-warn") return atob("GBgBAAAAABwAAP+AAf/gA//wB/PwD/PgDzvAHzuAP8EAP8AAPAAAPMAAP8AAH8AAHzsADzuAB/PAB/PgA//wAP/gAH+AAAwAAAAA"); - if (s=="discord") return atob("GBgBAAAAAAAAAAAAAIEABwDgDP8wH//4H//4P//8P//8P//8Pjx8fhh+fzz+f//+f//+e//ePH48HwD4AgBAAAAAAAAAAAAAAAAA"); - if (s=="facebook") return getFBIcon(); - if (s=="gmail") return getNotificationImage(); - if (s=="google home") return atob("GBiCAAAAAAAAAAAAAAAAAAAAAoAAAAAACqAAAAAAKqwAAAAAqroAAAACquqAAAAKq+qgAAAqr/qoAACqv/6qAAKq//+qgA6r///qsAqr///6sAqv///6sAqv///6sAqv///6sA6v///6sA6v///qsA6qqqqqsA6qqqqqsA6qqqqqsAP7///vwAAAAAAAAAAAAAAAAA=="); - if (s=="hangouts") return atob("FBaBAAH4AH/gD/8B//g//8P//H5n58Y+fGPnxj5+d+fmfj//4//8H//B//gH/4A/8AA+AAHAABgAAAA="); - if (s=="home assistant") return atob("FhaBAAAAAADAAAeAAD8AAf4AD/3AfP8D7fwft/D/P8ec572zbzbNsOEhw+AfD8D8P4fw/z/D/P8P8/w/z/AAAAA="); - if (s=="instagram") return atob("GBiBAAAAAAAAAAAAAAAAAAP/wAYAYAwAMAgAkAh+EAjDEAiBEAiBEAiBEAiBEAjDEAh+EAgAEAwAMAYAYAP/wAAAAAAAAAAAAAAAAA=="); - if (s=="kalender") return atob("GBgBBgBgBQCgff++RQCiRgBiQAACf//+QAACQAACR//iRJkiRIEiR//iRNsiRIEiRJkiR//iRIEiRIEiR//iQAACQAACf//+AAAA"); - if (s=="lieferando") return atob("GBgBABgAAH5wAP9wAf/4A//4B//4D//4H//4P/88fV8+fV4//V4//Vw/HVw4HVw4HBg4HBg4HBg4HDg4Hjw4Hj84Hj44Hj44Hj44"); - if (s=="mail") return getNotificationImage(); - if (s=="messenger") return getFBIcon(); - if (s=="nina") return atob("GBgBAAAABAAQCAAICAAIEAAEEgAkJAgSJBwSKRxKSj4pUn8lVP+VVP+VUgAlSgApKQBKJAASJAASEgAkEAAECAAICAAIBAAQAAAA"); - if (s=="outlook mail") return atob("HBwBAAAAAAAAAAAIAAAfwAAP/gAB/+AAP/5/A//v/D/+/8P/7/g+Pv8Dye/gPd74w5znHDnOB8Oc4Pw8nv/Dwe/8Pj7/w//v/D/+/8P/7/gf/gAA/+AAAfwAAACAAAAAAAAAAAA="); - if (s=="phone") return atob("FxeBABgAAPgAAfAAB/AAD+AAH+AAP8AAP4AAfgAA/AAA+AAA+AAA+AAB+AAB+AAB+OAB//AB//gB//gA//AA/8AAf4AAPAA="); - if (s=="post & dhl") return atob("GBgBAPgAE/5wMwZ8NgN8NgP4NgP4HgP4HgPwDwfgD//AB/+AAf8AAAAABs7AHcdgG4MwAAAAGESAFESAEkSAEnyAEkSAFESAGETw"); - if (s=="signal") return atob("GBgBAAAAAGwAAQGAAhggCP8QE//AB//oJ//kL//wD//0D//wT//wD//wL//0J//kB//oA//ICf8ABfxgBYBAADoABMAABAAAAAAA"); - 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=="slack") return atob("GBiBAAAAAAAAAABAAAHvAAHvAADvAAAPAB/PMB/veD/veB/mcAAAABzH8B3v+B3v+B3n8AHgAAHuAAHvAAHvAADGAAAAAAAAAAAAAA=="); - if (s=="sms message") return getNotificationImage(); - if (s=="snapchat") return atob("GBgBAAAAAAAAAH4AAf+AAf+AA//AA//AA//AA//AA//AH//4D//wB//gA//AB//gD//wH//4f//+P//8D//wAf+AAH4AAAAAAAAA"); - if (s=="teams") return atob("GBgBAAAAAAAAAAQAAB4AAD8IAA8cP/M+f/scf/gIeDgAfvvefvvffvvffvvffvvff/vff/veP/PeAA/cAH/AAD+AAD8AAAQAAAAA"); - if (s=="telegram" || s=="telegram foss") return atob("GBiBAAAAAAAAAAAAAAAAAwAAHwAA/wAD/wAf3gD/Pgf+fh/4/v/z/P/H/D8P/Acf/AM//AF/+AF/+AH/+ADz+ADh+ADAcAAAMAAAAA=="); - if (s=="threema") return atob("GBjB/4Yx//8AAAAAAAAAAAAAfgAB/4AD/8AH/+AH/+AP//AP2/APw/APw/AHw+AH/+AH/8AH/4AH/gAAAAAAAAAAAAAAAAAAAAAAAAAAAAA="); - if (s=="to do") return atob("GBgBAAAAAAAAAAAwAAB4AAD8AAH+AAP/DAf/Hg//Px/+f7/8///4///wf//gP//AH/+AD/8AB/4AA/wAAfgAAPAAAGAAAAAAAAAA"); - if (s=="twitch") return atob("GBgBH//+P//+P//+eAAGeAAGeAAGeDGGeDOGeDOGeDOGeDOGeDOGeDOGeAAOeAAOeAAcf4/4f5/wf7/gf//Af/+AA/AAA+AAAcAA"); - 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 (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=="wordfeud") return atob("GBgCWqqqqqqlf//////9v//////+v/////++v/////++v8///Lu+v8///L++v8///P/+v8v//P/+v9v//P/+v+fx/P/+v+Pk+P/+v/PN+f/+v/POuv/+v/Ofdv/+v/NvM//+v/I/Y//+v/k/k//+v/i/w//+v/7/6//+v//////+v//////+f//////9Wqqqqqql"); - if (s=="youtube") return atob("GBgBAAAAAAAAAAAAAAAAAf8AH//4P//4P//8P//8P5/8P4/8f4P8f4P8P4/8P5/8P//8P//8P//4H//4Af8AAAAAAAAAAAAAAAAA"); - if (msg.id=="music") return atob("FhaBAH//+/////////////h/+AH/4Af/gB/+H3/7/f/v9/+/3/7+f/vB/w8H+Dwf4PD/x/////////////3//+A="); - return getNotificationImage(); -} -function getMessageImageCol(msg,def) { - return { - // generic colors, using B2-safe colors - "alarm": "#fff", - "mail": "#ff0", - "music": "#f0f", - "phone": "#0f0", - "sms message": "#0ff", - // brands, according to https://www.schemecolor.com/?s (picking one for multicolored logos) - // all dithered on B2, but we only use the color for the icons. (Could maybe pick the closest 3-bit color for B2?) - "bibel": "#54342c", - "discord": "#738adb", - "facebook": "#4267b2", - "gmail": "#ea4335", - "google home": "#fbbc05", - "hangouts": "#1ba261", - "home assistant": "#fff", // ha-blue is #41bdf5, but that's the background - "instagram": "#dd2a7b", - "liferando": "#ee5c00", - "messenger": "#0078ff", - "nina": "#e57004", - "outlook mail": "#0072c6", - "post & dhl": "#f2c101", - "signal": "#00f", - "skype": "#00aff0", - "slack": "#e51670", - "snapchat": "#ff0", - "teams": "#464eb8", - "telegram": "#0088cc", - "threema": "#000", - "to do": "#3999e5", - "twitch": "#6441A4", - "twitter": "#1da1f2", - "whatsapp": "#4fce5d", - "wordfeud": "#e7d3c7", - "youtube": "#f00", - }[(msg.src||"").toLowerCase()]||(def !== undefined?def:g.theme.fg); -} + + function showMapMessage(msg) { active = "map"; @@ -411,7 +326,7 @@ function showMessage(msgid) { {type:"txt", font:fontSmall, label:msg.src||/*LANG*/"Message", bgCol:g.theme.bg2, col: g.theme.fg2, fillx:1, pad:2, halign:1 }, title?{type:"txt", font:titleFont, label:title, bgCol:g.theme.bg2, col: g.theme.fg2, fillx:1, pad:2 }:{}, ]}, - { type:"btn", src:getMessageImage(msg), col:getMessageImageCol(msg), pad: 3, cb:()=>{ + { type:"btn", src:require("messages").getMessageImage(msg), col:require("messages").getMessageImageCol(msg), pad: 3, cb:()=>{ cancelReloadTimeout(); // don't auto-reload to clock now showMessageSettings(msg); }}, @@ -467,14 +382,14 @@ function checkMessages(options) { g.clearRect(r.x,r.y,r.x+r.w, r.y+r.h); if (!msg) return; var x = r.x+2, title = msg.title, body = msg.body; - var img = getMessageImage(msg); + var img = require("messages").getMessageImage(msg); if (msg.id=="music") { title = msg.artist || /*LANG*/"Music"; body = msg.track; } if (img) { var fg = g.getColor(); - g.setColor(getMessageImageCol(msg,fg)).drawImage(img, x+24, r.y+24, {rotate:0}) // force centering + g.setColor(require("messages").getMessageImageCol(msg,fg)).drawImage(img, x+24, r.y+24, {rotate:0}) // force centering .setColor(fg); // only color the icon x += 50; } diff --git a/apps/messages/lib.js b/apps/messages/lib.js index c39c8886c..3f801e101 100644 --- a/apps/messages/lib.js +++ b/apps/messages/lib.js @@ -104,3 +104,84 @@ exports.clearAll = function(event) { if (global.WIDGETS && WIDGETS.messages) WIDGETS.messages.hide(); } + +exports.getMessageImage = function(msg) { + /* + * icons should be 24x24px with 1bpp colors and 'Transparency to Color' + * http://www.espruino.com/Image+Converter + */ + if (msg.img) return atob(msg.img); + var s = (msg.src||"").toLowerCase(); + if (s=="alarm" || s =="alarmclockreceiver") return atob("GBjBAP////8AAAAAAAACAEAHAOAefng5/5wTgcgHAOAOGHAMGDAYGBgYGBgYGBgYGBgYDhgYBxgMATAOAHAHAOADgcAB/4AAfgAAAAAAAAA="); + if (s=="bibel") return atob("GBgBAAAAA//wD//4D//4H//4H/f4H/f4H+P4H4D4H4D4H/f4H/f4H/f4H/f4H/f4H//4H//4H//4GAAAEAAAEAAACAAAB//4AAAA"); + if (s=="calendar") return atob("GBiBAAAAAAAAAAAAAA//8B//+BgAGBgAGBgAGB//+B//+B//+B9m2B//+B//+Btm2B//+B//+Btm+B//+B//+A//8AAAAAAAAAAAAA=="); + if (s=="corona-warn") return atob("GBgBAAAAABwAAP+AAf/gA//wB/PwD/PgDzvAHzuAP8EAP8AAPAAAPMAAP8AAH8AAHzsADzuAB/PAB/PgA//wAP/gAH+AAAwAAAAA"); + if (s=="discord") return atob("GBgBAAAAAAAAAAAAAIEABwDgDP8wH//4H//4P//8P//8P//8Pjx8fhh+fzz+f//+f//+e//ePH48HwD4AgBAAAAAAAAAAAAAAAAA"); + if (s=="facebook" || s=="messenger") return atob("GBiBAAAAAAAAAAAYAAD/AAP/wAf/4A/48A/g8B/g+B/j+B/n+D/n/D8A/B8A+B+B+B/n+A/n8A/n8Afn4APnwADnAAAAAAAAAAAAAA=="); + if (s=="google home") return atob("GBiCAAAAAAAAAAAAAAAAAAAAAoAAAAAACqAAAAAAKqwAAAAAqroAAAACquqAAAAKq+qgAAAqr/qoAACqv/6qAAKq//+qgA6r///qsAqr///6sAqv///6sAqv///6sAqv///6sA6v///6sA6v///qsA6qqqqqsA6qqqqqsA6qqqqqsAP7///vwAAAAAAAAAAAAAAAAA=="); + if (s=="hangouts") return atob("FBaBAAH4AH/gD/8B//g//8P//H5n58Y+fGPnxj5+d+fmfj//4//8H//B//gH/4A/8AA+AAHAABgAAAA="); + if (s=="home assistant") return atob("FhaBAAAAAADAAAeAAD8AAf4AD/3AfP8D7fwft/D/P8ec572zbzbNsOEhw+AfD8D8P4fw/z/D/P8P8/w/z/AAAAA="); + if (s=="instagram") return atob("GBiBAAAAAAAAAAAAAAAAAAP/wAYAYAwAMAgAkAh+EAjDEAiBEAiBEAiBEAiBEAjDEAh+EAgAEAwAMAYAYAP/wAAAAAAAAAAAAAAAAA=="); + if (s=="kalender") return atob("GBgBBgBgBQCgff++RQCiRgBiQAACf//+QAACQAACR//iRJkiRIEiR//iRNsiRIEiRJkiR//iRIEiRIEiR//iQAACQAACf//+AAAA"); + if (s=="lieferando") return atob("GBgBABgAAH5wAP9wAf/4A//4B//4D//4H//4P/88fV8+fV4//V4//Vw/HVw4HVw4HBg4HBg4HBg4HDg4Hjw4Hj84Hj44Hj44Hj44"); + if (s=="nina") return atob("GBgBAAAABAAQCAAICAAIEAAEEgAkJAgSJBwSKRxKSj4pUn8lVP+VVP+VUgAlSgApKQBKJAASJAASEgAkEAAECAAICAAIBAAQAAAA"); + if (s=="outlook mail") return atob("HBwBAAAAAAAAAAAIAAAfwAAP/gAB/+AAP/5/A//v/D/+/8P/7/g+Pv8Dye/gPd74w5znHDnOB8Oc4Pw8nv/Dwe/8Pj7/w//v/D/+/8P/7/gf/gAA/+AAAfwAAACAAAAAAAAAAAA="); + if (s=="phone") return atob("FxeBABgAAPgAAfAAB/AAD+AAH+AAP8AAP4AAfgAA/AAA+AAA+AAA+AAB+AAB+AAB+OAB//AB//gB//gA//AA/8AAf4AAPAA="); + if (s=="post & dhl") return atob("GBgBAPgAE/5wMwZ8NgN8NgP4NgP4HgP4HgPwDwfgD//AB/+AAf8AAAAABs7AHcdgG4MwAAAAGESAFESAEkSAEnyAEkSAFESAGETw"); + if (s=="signal") return atob("GBgBAAAAAGwAAQGAAhggCP8QE//AB//oJ//kL//wD//0D//wT//wD//wL//0J//kB//oA//ICf8ABfxgBYBAADoABMAABAAAAAAA"); + 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=="slack") return atob("GBiBAAAAAAAAAABAAAHvAAHvAADvAAAPAB/PMB/veD/veB/mcAAAABzH8B3v+B3v+B3n8AHgAAHuAAHvAAHvAADGAAAAAAAAAAAAAA=="); + if (s=="snapchat") return atob("GBgBAAAAAAAAAH4AAf+AAf+AA//AA//AA//AA//AA//AH//4D//wB//gA//AB//gD//wH//4f//+P//8D//wAf+AAH4AAAAAAAAA"); + if (s=="teams") return atob("GBgBAAAAAAAAAAQAAB4AAD8IAA8cP/M+f/scf/gIeDgAfvvefvvffvvffvvffvvff/vff/veP/PeAA/cAH/AAD+AAD8AAAQAAAAA"); + if (s=="telegram" || s=="telegram foss") return atob("GBiBAAAAAAAAAAAAAAAAAwAAHwAA/wAD/wAf3gD/Pgf+fh/4/v/z/P/H/D8P/Acf/AM//AF/+AF/+AH/+ADz+ADh+ADAcAAAMAAAAA=="); + if (s=="threema") return atob("GBjB/4Yx//8AAAAAAAAAAAAAfgAB/4AD/8AH/+AH/+AP//AP2/APw/APw/AHw+AH/+AH/8AH/4AH/gAAAAAAAAAAAAAAAAAAAAAAAAAAAAA="); + if (s=="to do") return atob("GBgBAAAAAAAAAAAwAAB4AAD8AAH+AAP/DAf/Hg//Px/+f7/8///4///wf//gP//AH/+AD/8AB/4AA/wAAfgAAPAAAGAAAAAAAAAA"); + if (s=="twitch") return atob("GBgBH//+P//+P//+eAAGeAAGeAAGeDGGeDOGeDOGeDOGeDOGeDOGeDOGeAAOeAAOeAAcf4/4f5/wf7/gf//Af/+AA/AAA+AAAcAA"); + 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 (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=="wordfeud") return atob("GBgCWqqqqqqlf//////9v//////+v/////++v/////++v8///Lu+v8///L++v8///P/+v8v//P/+v9v//P/+v+fx/P/+v+Pk+P/+v/PN+f/+v/POuv/+v/Ofdv/+v/NvM//+v/I/Y//+v/k/k//+v/i/w//+v/7/6//+v//////+v//////+f//////9Wqqqqqql"); + if (s=="youtube") return atob("GBgBAAAAAAAAAAAAAAAAAf8AH//4P//4P//8P//8P5/8P4/8f4P8f4P8P4/8P5/8P//8P//8P//4H//4Af8AAAAAAAAAAAAAAAAA"); + 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 (s=="sms message" || s=="mail" || s=="gmail") // .. default icon (below) + return atob("HBKBAD///8H///iP//8cf//j4//8f5//j/x/8//j/H//H4//4PB//EYj/44HH/Hw+P4//8fH//44///xH///g////A=="); +}; + +exports.getMessageImageCol = function(msg,def) { + return { + // generic colors, using B2-safe colors + "alarm": "#fff", + "mail": "#ff0", + "music": "#f0f", + "phone": "#0f0", + "sms message": "#0ff", + // brands, according to https://www.schemecolor.com/?s (picking one for multicolored logos) + // all dithered on B2, but we only use the color for the icons. (Could maybe pick the closest 3-bit color for B2?) + "bibel": "#54342c", + "discord": "#738adb", + "facebook": "#4267b2", + "gmail": "#ea4335", + "google home": "#fbbc05", + "hangouts": "#1ba261", + "home assistant": "#fff", // ha-blue is #41bdf5, but that's the background + "instagram": "#dd2a7b", + "liferando": "#ee5c00", + "messenger": "#0078ff", + "nina": "#e57004", + "outlook mail": "#0072c6", + "post & dhl": "#f2c101", + "signal": "#00f", + "skype": "#00aff0", + "slack": "#e51670", + "snapchat": "#ff0", + "teams": "#464eb8", + "telegram": "#0088cc", + "telegram foss": "#0088cc", + "threema": "#000", + "to do": "#3999e5", + "twitch": "#6441A4", + "twitter": "#1da1f2", + "whatsapp": "#4fce5d", + "wordfeud": "#e7d3c7", + "youtube": "#f00", + }[(msg.src||"").toLowerCase()]||(def !== undefined?def:g.theme.fg); +}; From a6d92c11151b4e0127bdc9fcccea7fa13098ba05 Mon Sep 17 00:00:00 2001 From: Gordon Williams Date: Wed, 25 May 2022 10:00:27 +0100 Subject: [PATCH 497/509] inline tick/cross images to save some space --- apps/messages/app.js | 13 ++----------- 1 file changed, 2 insertions(+), 11 deletions(-) diff --git a/apps/messages/app.js b/apps/messages/app.js index 63154c4b4..745f7d208 100644 --- a/apps/messages/app.js +++ b/apps/messages/app.js @@ -67,15 +67,6 @@ function saveMessages() { require("Storage").writeJSON("messages.json",MESSAGES) } -function getPosImage() { - return atob("GRSBAAAAAYAAAcAAAeAAAfAAAfAAAfAAAfAAAfAAAfBgAfA4AfAeAfAPgfAD4fAA+fAAP/AAD/AAA/AAAPAAADAAAA=="); -} -function getNegImage() { - return atob("FhaBADAAMeAB78AP/4B/fwP4/h/B/P4D//AH/4AP/AAf4AB/gAP/AB/+AP/8B/P4P4fx/A/v4B//AD94AHjAAMA="); -} - - - function showMapMessage(msg) { active = "map"; var m; @@ -302,7 +293,7 @@ function showMessage(msgid) { var buttons = [ ]; if (msg.positive) { - buttons.push({type:"btn", src:getPosImage(), cb:()=>{ + buttons.push({type:"btn", src:atob("GRSBAAAAAYAAAcAAAeAAAfAAAfAAAfAAAfAAAfAAAfBgAfA4AfAeAfAPgfAD4fAA+fAAP/AAD/AAA/AAAPAAADAAAA=="), cb:()=>{ msg.new = false; saveMessages(); cancelReloadTimeout(); // don't auto-reload to clock now Bangle.messageResponse(msg,true); @@ -311,7 +302,7 @@ function showMessage(msgid) { } if (msg.negative) { if (buttons.length) buttons.push({width:32}); // nasty hack... - buttons.push({type:"btn", src:getNegImage(), cb:()=>{ + buttons.push({type:"btn", src:atob("FhaBADAAMeAB78AP/4B/fwP4/h/B/P4D//AH/4AP/AAf4AB/gAP/AB/+AP/8B/P4P4fx/A/v4B//AD94AHjAAMA="), cb:()=>{ msg.new = false; saveMessages(); cancelReloadTimeout(); // don't auto-reload to clock now Bangle.messageResponse(msg,false); From f0e262757109e83bb3b6bf77e4aba3c2658fd067 Mon Sep 17 00:00:00 2001 From: Alessandro Cocco Date: Tue, 24 May 2022 22:25:44 +0200 Subject: [PATCH 498/509] Move Layout docs to a separate file --- modules/Layout.js | 70 +--------------------------------------- modules/Layout.md | 81 +++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 82 insertions(+), 69 deletions(-) create mode 100644 modules/Layout.md diff --git a/modules/Layout.js b/modules/Layout.js index 43419a397..19cfabe11 100644 --- a/modules/Layout.js +++ b/modules/Layout.js @@ -1,74 +1,6 @@ /* Copyright (c) 2022 Bangle.js contributors. See the file LICENSE for copying permission. */ -/* -Take a look at README.md for hints on developing with this library. -Usage: -``` -var Layout = require("Layout"); -var layout = new Layout( layoutObject, options ) -layout.render(optionalObject); -``` -For example: -``` -var Layout = require("Layout"); -var layout = new Layout( { - type:"v", c: [ - {type:"txt", font:"20%", label:"12:00" }, - {type:"txt", font:"6x8", label:"The Date" } - ] -}); -g.clear(); -layout.render(); -``` -layoutObject has: -* A `type` field of: - * `undefined` - blank, can be used for padding - * `"txt"` - a text label, with value `label`. 'font' is required - * `"btn"` - a button, with value `label` and callback `cb` - optional `src` specifies an image (like img) in which case label is ignored - Default font is `6x8`, scale 2. This can be overridden with the `font` or `scale` fields. - * `"img"` - an image where `src` is an image, or a function which is called to return an image to draw. - * `"custom"` - a custom block where `render(layoutObj)` is called to render - * `"h"` - Horizontal layout, `c` is an array of more `layoutObject` - * `"v"` - Vertical layout, `c` is an array of more `layoutObject` -* 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. Set scale with :, e.g. `6x8:2`. -* A `scale` field, eg `2` to set scale of an image -* A `r` field to set rotation of text or images (0: 0°, 1: 90°, 2: 180°, 3: 270°). -* 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 WITHIN a `v` container. `-1`=left, `1`=right, `0`=center -* A `valign` field to set vertical alignment WITHIN a `h` container. `-1`=top, `1`=bottom, `0`=center -* A `pad` integer field to set pixels padding -* A `fillx` int to choose if the object should fill available space in x. 0=no, 1=yes, 2=2x more space -* 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 -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 -* `back` - a callback function, passed as `back` into Bangle.setUI (which usually adds an icon in the top left) - -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. -Once `layout.update()` is called, the following fields are added -to each object: -* `x` and `y` for the top left position -* `w` and `h` for the width and height -* `_w` and `_h` for the **minimum** width and height -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 -* `layout.setUI()` - (called when module initialised) This sets up input (buttons, touch, etc) with Bangle._setUI - This can be useful if you called E.showMenu/showPrompt/etc and those grabbed input away from layour -*/ +// See Layout.md for documentation function Layout(layout, options) { this._l = this.l = layout; diff --git a/modules/Layout.md b/modules/Layout.md new file mode 100644 index 000000000..7a4177957 --- /dev/null +++ b/modules/Layout.md @@ -0,0 +1,81 @@ +Bangle.js Layout Library +======================== + +> Take a look at README.md for hints on developing with this library. + +Usage +----- + +```JS +var Layout = require("Layout"); +var layout = new Layout(layoutObject, options) + +layout.render(optionalObject); +``` + +For example: + +```JS +var Layout = require("Layout"); +var layout = new Layout({ + type:"v", + c: [ + { type: "txt", font: "20%", label: "12:00" }, + { type: "txt", font: "6x8", label: "The Date" } + ] +}); + +g.clear(); + +layout.render(); +``` + +`layoutObject` has: + +- A `type` field of: + - `undefined` - blank, can be used for padding + - `"txt"` - a text label, with value `label`. `font` is required + - `"btn"` - a button, with value `label` and callback `cb`. Optional `src` specifies an image (like img) in which case label is ignored. Default font is `6x8`, scale 2. This can be overridden with the `font` or `scale` fields. + - `"img"` - an image where `src` is an image, or a function which is called to return an image to draw + - `"custom"` - a custom block where `render(layoutObj)` is called to render + - `"h"` - Horizontal layout, `c` is an array of more `layoutObject` + - `"v"` - Vertical layout, `c` is an array of more `layoutObject` +- 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. Set scale with :, e.g. `6x8:2`. +- A `scale` field, eg `2` to set scale of an image +- A `r` field to set rotation of text or images (0: 0°, 1: 90°, 2: 180°, 3: 270°). +- 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 WITHIN a `v` container. `-1`=left, `1`=right, `0`=center +- A `valign` field to set vertical alignment WITHIN a `h` container. `-1`=top, `1`=bottom, `0`=center +- A `pad` integer field to set pixels padding +- A `fillx` int to choose if the object should fill available space in x. 0=no, 1=yes, 2=2x more space +- 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 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 +- `back` - a callback function, passed as `back` into Bangle.setUI (which usually adds an icon in the top left) + +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. + +Once `layout.update()` is called, the following fields are added to each object: + +- `x` and `y` for the top left position +- `w` and `h` for the width and height +- `_w` and `_h` for the **minimum** width and height + +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 + +Links +----- + +- [Official tutorial](https://www.espruino.com/Bangle.js+Layout) From 4cbc80ddbb4e065e0aa7a5f1b4f28a54a9bcadb4 Mon Sep 17 00:00:00 2001 From: Gordon Williams Date: Wed, 25 May 2022 14:12:55 +0100 Subject: [PATCH 499/509] oops - disable battery calibration for Bangle.js 1 --- apps/setting/settings.js | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/apps/setting/settings.js b/apps/setting/settings.js index 5c14e914d..73cb4b497 100644 --- a/apps/setting/settings.js +++ b/apps/setting/settings.js @@ -545,8 +545,10 @@ function showUtilMenu() { setInterval(function() { var i=1000;while (i--); }, 1); - }, - /*LANG*/'Calibrate Battery': () => { + } + }; + if (BANGLEJS2) + menu[/*LANG*/'Calibrate Battery'] = () => { E.showPrompt(/*LANG*/"Is the battery fully charged?",{title:/*LANG*/"Calibrate"}).then(ok => { if (ok) { var s=require("Storage").readJSON("setting.json"); @@ -558,7 +560,7 @@ function showUtilMenu() { } }); }, - /*LANG*/'Reset Settings': () => { + menu[/*LANG*/'Reset Settings'] = () => { E.showPrompt(/*LANG*/'Reset to Defaults?',{title:/*LANG*/"Settings"}).then((v) => { if (v) { E.showMessage('Resetting'); @@ -567,8 +569,8 @@ function showUtilMenu() { } else showUtilMenu(); }); }, - /*LANG*/'Turn Off': ()=>{ if (Bangle.softOff) Bangle.softOff(); else Bangle.off() } - }; + menu[/*LANG*/'Turn Off'] = ()=>{ if (Bangle.softOff) Bangle.softOff(); else Bangle.off() } + if (Bangle.factoryReset) { menu[/*LANG*/'Factory Reset'] = ()=>{ E.showPrompt(/*LANG*/'This will remove everything!',{title:/*LANG*/"Factory Reset"}).then((v) => { From 280fd5e665249ea92256c30a36ed25d74bffaee6 Mon Sep 17 00:00:00 2001 From: Alessandro Cocco Date: Wed, 25 May 2022 23:13:37 +0200 Subject: [PATCH 500/509] [Alarms & Timers] Fix dow handling for timers --- apps/alarm/app.js | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/apps/alarm/app.js b/apps/alarm/app.js index 8e2e2b0a6..fe0f67dbb 100644 --- a/apps/alarm/app.js +++ b/apps/alarm/app.js @@ -37,8 +37,8 @@ function handleFirstDayOfWeek(dow) { return dow; } -// Check the first day of week and update the dow field accordingly. -alarms.forEach(alarm => alarm.dow = handleFirstDayOfWeek(alarm.dow)); +// Check the first day of week and update the dow field accordingly (alarms only!) +alarms.filter(e => e.timer === undefined).forEach(a => a.dow = handleFirstDayOfWeek(a.dow)); function showMainMenu() { const menu = { @@ -158,14 +158,14 @@ function saveAlarm(alarm, alarmIndex, time) { } function saveAndReload() { - // Before saving revert the dow to the standard format - alarms.forEach(a => a.dow = handleFirstDayOfWeek(a.dow, firstDayOfWeek)); + // Before saving revert the dow to the standard format (alarms only!) + alarms.filter(e => e.timer === undefined).forEach(a => a.dow = handleFirstDayOfWeek(a.dow)); require("sched").setAlarms(alarms); require("sched").reload(); // Fix after save - alarms.forEach(a => a.dow = handleFirstDayOfWeek(a.dow, firstDayOfWeek)); + alarms.filter(e => e.timer === undefined).forEach(a => a.dow = handleFirstDayOfWeek(a.dow)); } function decodeDOW(alarm) { From 2fd5ec8f37dd860db57da2e98d373b2f6ceedb3b Mon Sep 17 00:00:00 2001 From: Alessandro Cocco Date: Wed, 25 May 2022 23:20:00 +0200 Subject: [PATCH 501/509] [Alarms & Timers] Update metadata and changelog --- apps/alarm/ChangeLog | 1 + apps/alarm/metadata.json | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/apps/alarm/ChangeLog b/apps/alarm/ChangeLog index 3d75e1209..b00055334 100644 --- a/apps/alarm/ChangeLog +++ b/apps/alarm/ChangeLog @@ -28,3 +28,4 @@ 0.26: Add support for Monday as first day of the week (#1780) 0.27: New UI! 0.28: Fix bug with alarms not firing when configured to fire only once +0.29: Fix wrong 'dow' handling in new timer if first day of week is Monday diff --git a/apps/alarm/metadata.json b/apps/alarm/metadata.json index b38ab1ef1..cac837b5e 100644 --- a/apps/alarm/metadata.json +++ b/apps/alarm/metadata.json @@ -2,7 +2,7 @@ "id": "alarm", "name": "Alarms & Timers", "shortName": "Alarms", - "version": "0.28", + "version": "0.29", "description": "Set alarms and timers on your Bangle", "icon": "app.png", "tags": "tool,alarm,widget", From 182743a0e3649a311cb0beaf485103bfd6798d4b Mon Sep 17 00:00:00 2001 From: Noah Howard <3317164+nh-99@users.noreply.github.com> Date: Wed, 25 May 2022 17:33:40 -0400 Subject: [PATCH 502/509] Add screenshot of R2D2 clock to metadata for app store --- apps/r2d2clk/metadata.json | 1 + 1 file changed, 1 insertion(+) diff --git a/apps/r2d2clk/metadata.json b/apps/r2d2clk/metadata.json index f2cde76f4..249180ac8 100644 --- a/apps/r2d2clk/metadata.json +++ b/apps/r2d2clk/metadata.json @@ -4,6 +4,7 @@ "version":"0.01", "description": "A clock with R2D2's shiny metal face on it. :)", "icon": "app.png", + "screenshots": [{"url":"screenshot.png"}], "type": "clock", "tags": "clock", "supports" : ["BANGLEJS2"], From 211af92a41a5d167f9a42d5c73b4c3f09004234d Mon Sep 17 00:00:00 2001 From: Gordon Williams Date: Thu, 26 May 2022 09:58:59 +0100 Subject: [PATCH 503/509] bangle.js 2 compat --- apps/rndmclk/metadata.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/rndmclk/metadata.json b/apps/rndmclk/metadata.json index e837c4bce..bb8e92f95 100644 --- a/apps/rndmclk/metadata.json +++ b/apps/rndmclk/metadata.json @@ -6,7 +6,7 @@ "icon": "rndmclk.png", "type": "widget", "tags": "widget,clock", - "supports": ["BANGLEJS"], + "supports": ["BANGLEJS","BANGLEJS2"], "readme": "README.md", "storage": [ {"name":"rndmclk.wid.js","url":"widget.js"} From 6f202bc9254a96de7bccba21fe75ce75d00cf95b Mon Sep 17 00:00:00 2001 From: Gordon Williams Date: Thu, 26 May 2022 09:59:11 +0100 Subject: [PATCH 504/509] fix locale errors after recent PRs --- apps/locale/locales.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/apps/locale/locales.js b/apps/locale/locales.js index d1ac7687f..de56503fd 100644 --- a/apps/locale/locales.js +++ b/apps/locale/locales.js @@ -11,6 +11,8 @@ const speedUnits = { // how many kph per X? "kmh": 1, "kph": 1, "km/h": 1, + "kmt": 1, + "km/tim": 1, "mph": 1.60934, "kts": 1.852 }; From ed56c9142742eb3e7a132c730a4769a028396dde Mon Sep 17 00:00:00 2001 From: Gordon Williams Date: Thu, 26 May 2022 09:59:18 +0100 Subject: [PATCH 505/509] add relevant interface code to customize.js, and add checks to ensure the right file is used --- core | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core b/core index 404e98183..2054537a9 160000 --- a/core +++ b/core @@ -1 +1 @@ -Subproject commit 404e981834f2e8df9c505a8fab12ae12fe3bd562 +Subproject commit 2054537a9958f9812ae2cad908b6597ff01e449d From 6b8cf13f6c635efc1392c82c8a95f2927ba65e4f Mon Sep 17 00:00:00 2001 From: Gordon Williams Date: Thu, 26 May 2022 10:07:04 +0100 Subject: [PATCH 506/509] 0.46: Fix regression after making 'calibrate battery' only for Bangle.js 2 --- apps/setting/ChangeLog | 1 + apps/setting/metadata.json | 2 +- apps/setting/settings.js | 6 +++--- 3 files changed, 5 insertions(+), 4 deletions(-) diff --git a/apps/setting/ChangeLog b/apps/setting/ChangeLog index 6d3bbb468..eca2b7938 100644 --- a/apps/setting/ChangeLog +++ b/apps/setting/ChangeLog @@ -49,3 +49,4 @@ 0.44: Add "Start Week On X" option (#1780) UI improvements to Locale and Date & Time menu 0.45: Add calibrate battery option +0.46: Fix regression after making 'calibrate battery' only for Bangle.js 2 diff --git a/apps/setting/metadata.json b/apps/setting/metadata.json index c5c368fae..183290a85 100644 --- a/apps/setting/metadata.json +++ b/apps/setting/metadata.json @@ -1,7 +1,7 @@ { "id": "setting", "name": "Settings", - "version": "0.45", + "version": "0.46", "description": "A menu for setting up Bangle.js", "icon": "settings.png", "tags": "tool,system", diff --git a/apps/setting/settings.js b/apps/setting/settings.js index 73cb4b497..150251e7d 100644 --- a/apps/setting/settings.js +++ b/apps/setting/settings.js @@ -559,7 +559,7 @@ function showUtilMenu() { E.showAlert(/*LANG*/"Please charge Bangle.js for 3 hours and try again").then(() => load("settings.app.js")); } }); - }, + }; menu[/*LANG*/'Reset Settings'] = () => { E.showPrompt(/*LANG*/'Reset to Defaults?',{title:/*LANG*/"Settings"}).then((v) => { if (v) { @@ -568,8 +568,8 @@ function showUtilMenu() { setTimeout(showMainMenu, 50); } else showUtilMenu(); }); - }, - menu[/*LANG*/'Turn Off'] = ()=>{ if (Bangle.softOff) Bangle.softOff(); else Bangle.off() } + }; + menu[/*LANG*/'Turn Off'] = ()=>{ if (Bangle.softOff) Bangle.softOff(); else Bangle.off() }; if (Bangle.factoryReset) { menu[/*LANG*/'Factory Reset'] = ()=>{ From 3a3a01136b018fc2a9ea2b0069d9442c228f9b1d Mon Sep 17 00:00:00 2001 From: Gordon Williams Date: Thu, 26 May 2022 12:50:44 +0100 Subject: [PATCH 507/509] mylocation 0.07: Move mylocation app into 'Settings -> Apps' --- README.md | 1 + apps/mylocation/ChangeLog | 1 + apps/mylocation/README.md | 2 ++ apps/mylocation/icon.js | 1 - apps/mylocation/metadata.json | 7 +++--- apps/mylocation/{app.js => settings.js} | 30 ++++++++++++------------- bin/sanitycheck.js | 4 ++-- 7 files changed, 24 insertions(+), 22 deletions(-) delete mode 100644 apps/mylocation/icon.js rename apps/mylocation/{app.js => settings.js} (73%) diff --git a/README.md b/README.md index ee555cad2..b3da9f685 100644 --- a/README.md +++ b/README.md @@ -256,6 +256,7 @@ and which gives information about the app for the Launcher. // 'clock' - a clock - required for clocks to automatically start // 'widget' - a widget // 'bootloader' - an app that at startup (app.boot.js) but doesn't have a launcher entry for 'app.js' + // 'settings' - apps that appear in Settings->Apps (with appname.settings.js) but that have no 'app.js' // 'RAM' - code that runs and doesn't upload anything to storage // 'launch' - replacement 'Launcher' // 'textinput' - provides a 'textinput' library that allows text to be input on the Bangle diff --git a/apps/mylocation/ChangeLog b/apps/mylocation/ChangeLog index 1239554f0..c14e64ba9 100644 --- a/apps/mylocation/ChangeLog +++ b/apps/mylocation/ChangeLog @@ -4,3 +4,4 @@ 0.04: Fixed issue selecting Frankfurt not saved 0.05: Fixed issue with back option 0.06: renamed source files to match standard +0.07: Move mylocation app into 'Settings -> Apps' diff --git a/apps/mylocation/README.md b/apps/mylocation/README.md index fd597397a..a6a16ce83 100644 --- a/apps/mylocation/README.md +++ b/apps/mylocation/README.md @@ -2,6 +2,8 @@ *Sets and stores GPS lat and lon of your preferred city* +To access, go to `Settings -> Apps -> My Location` + * Select one of the preset Cities or setup through the GPS * Other Apps can read this information to do calculations based on location * When the City shows ??? it means the location has been set through the GPS diff --git a/apps/mylocation/icon.js b/apps/mylocation/icon.js deleted file mode 100644 index b79f5875f..000000000 --- a/apps/mylocation/icon.js +++ /dev/null @@ -1 +0,0 @@ -require("heatshrink").decompress(atob("mEw4UA///gH4AYPO/QPDgNVqtADY/1BYNfBQ0PBQIAB+ALFmoLDrgLF6oLDq4KEgYKDBYPABYcNBYlVuAuIGAwuEAANUBYYKFHgg6Bq4ZCr4DBHgQLBvWq2te1WlBYZGBBYOr1Wq1qSDBYNqBIILDKgQLLgoLHqBqDBfJHLBZBrOgKPCBYiPCU4NaBYe1WYrABBQLCCfgYGCrwVBa4kAirvKNgIAErgLDKgIAEKQQ8EAAY6DBZhIDIww8GHQg8GHQgwGFwowEFwx5EOog8GHQ0AlWpBYNq1AKFWIILBAYOgBYbICytWAgQKCgTgDcwYXGAAgvGAAY8EEgYWGBgoVEA==")) diff --git a/apps/mylocation/metadata.json b/apps/mylocation/metadata.json index 16549b2ba..4ab9aa37e 100644 --- a/apps/mylocation/metadata.json +++ b/apps/mylocation/metadata.json @@ -2,16 +2,15 @@ "name": "My Location", "shortName":"My Location", "icon": "app.png", - "type": "app", + "type": "settings", "screenshots": [{"url":"screenshot_1.png"}], - "version":"0.06", + "version":"0.07", "description": "Sets and stores the lat and long of your preferred City or it can be set from the GPS. mylocation.json can be used by other apps that need your main location lat and lon. See README", "readme": "README.md", "tags": "tool,utility", "supports": ["BANGLEJS", "BANGLEJS2"], "storage": [ - {"name":"mylocation.app.js","url":"app.js"}, - {"name":"mylocation.img","url":"icon.js","evaluate": true } + {"name":"mylocation.settings.js","url":"settings.js"} ], "data": [ {"name":"mylocation.json"} diff --git a/apps/mylocation/app.js b/apps/mylocation/settings.js similarity index 73% rename from apps/mylocation/app.js rename to apps/mylocation/settings.js index fd5c9cc6d..7033500fa 100644 --- a/apps/mylocation/app.js +++ b/apps/mylocation/settings.js @@ -1,5 +1,4 @@ -Bangle.loadWidgets(); -Bangle.drawWidgets(); +(function(back) { const SETTINGS_FILE = "mylocation.json"; let settings; @@ -18,7 +17,7 @@ function loadSettings() { } } -function save() { +function saveSettings() { settings = s; require('Storage').write(SETTINGS_FILE, settings); } @@ -34,29 +33,29 @@ function setFromGPS() { //console.log("fix from GPS"); s = {'lat': gps.lat, 'lon': gps.lon, 'location': '???' }; Bangle.buzz(1500); // buzz on first position - Bangle.setGPSPower(0); - save(); + Bangle.setGPSPower(0, "mylocation"); + saveSettings(); Bangle.setUI("updown", ()=>{ load(); }); - E.showPrompt("Location has been saved from the GPS fix",{ - title:"Location Saved", - buttons : {"OK":1} + E.showPrompt(/*LANG*/"Location has been saved from the GPS fix",{ + title:/*LANG*/"Location Saved", + buttons : {/*LANG*/"OK":1} }).then(function(v) { load(); // load default clock }); }); - Bangle.setGPSPower(1); - E.showMessage("Waiting for GPS fix. Place watch in the open. Could take 10 minutes. Long press to abort", "GPS Running"); + Bangle.setGPSPower(1, "mylocation"); + E.showMessage(/*LANG*/"Waiting for GPS fix. Place watch in the open. Could take 10 minutes. Long press to abort", "GPS Running"); Bangle.setUI("updown", undefined); } function showMainMenu() { //console.log("showMainMenu"); const mainmenu = { - '': { 'title': 'My Location' }, - '< Back': ()=>{ load(); }, - 'City': { + '': { 'title': /*LANG*/'My Location' }, + '< Back': ()=>{ back(); }, + /*LANG*/'City': { value: 0 | locations.indexOf(s.location), min: 0, max: locations.length - 1, format: v => locations[v], @@ -65,14 +64,15 @@ function showMainMenu() { s.location = locations[v]; s.lat = lats[v]; s.lon = lons[v]; - save(); + saveSettings(); } } }, - 'Set From GPS': ()=>{ setFromGPS(); } + /*LANG*/'Set From GPS': ()=>{ setFromGPS(); } }; return E.showMenu(mainmenu); } loadSettings(); showMainMenu(); +}) diff --git a/bin/sanitycheck.js b/bin/sanitycheck.js index 850b793f4..81c0f75ac 100755 --- a/bin/sanitycheck.js +++ b/bin/sanitycheck.js @@ -65,7 +65,7 @@ const APP_KEYS = [ const STORAGE_KEYS = ['name', 'url', 'content', 'evaluate', 'noOverwite', 'supports']; const DATA_KEYS = ['name', 'wildcard', 'storageFile', 'url', 'content', 'evaluate']; const SUPPORTS_DEVICES = ["BANGLEJS","BANGLEJS2"]; // device IDs allowed for 'supports' -const METADATA_TYPES = ["app","clock","widget","bootloader","RAM","launch","textinput","scheduler","notify","locale"]; // values allowed for "type" field +const METADATA_TYPES = ["app","clock","widget","bootloader","RAM","launch","textinput","scheduler","notify","locale","settings"]; // values allowed for "type" field const FORBIDDEN_FILE_NAME_CHARS = /[,;]/; // used as separators in appid.info const VALID_DUPLICATES = [ '.tfmodel', '.tfnames' ]; const GRANDFATHERED_ICONS = ["s7clk", "snek", "astral", "alpinenav", "slomoclock", "arrow", "pebble", "rebble"]; @@ -140,7 +140,7 @@ apps.forEach((app,appIdx) => { ERROR(`App ${app.id} 'dependencies' must all be tagged 'type' or 'app' right now`); if (app.dependencies[dependency]=="type" && !METADATA_TYPES.includes(dependency)) ERROR(`App ${app.id} 'type' dependency must be one of `+METADATA_TYPES); - + }); } else ERROR(`App ${app.id} 'dependencies' must be an object`); From 95bf53e68d9bbe40f7879f743568e59d71b198be Mon Sep 17 00:00:00 2001 From: Stiralbios Date: Thu, 26 May 2022 16:44:56 +0200 Subject: [PATCH 508/509] [TerminalClock] Add power related settings to control sensors --- apps/terminalclock/ChangeLog | 1 + apps/terminalclock/README.md | 5 +++ apps/terminalclock/app.js | 65 +++++++++++++++++++++++++------- apps/terminalclock/metadata.json | 2 +- apps/terminalclock/settings.js | 23 ++++++++++- 5 files changed, 81 insertions(+), 15 deletions(-) diff --git a/apps/terminalclock/ChangeLog b/apps/terminalclock/ChangeLog index b752c829d..ce31583e9 100644 --- a/apps/terminalclock/ChangeLog +++ b/apps/terminalclock/ChangeLog @@ -3,3 +3,4 @@ 0.03: Add Banglejs 1 compatibility 0.04: Fix settings bug 0.05: Add altitude display (only Bangle.js 2) +0.06: Add power related settings to control the HR and pressure(altitude) sensor from the watchface diff --git a/apps/terminalclock/README.md b/apps/terminalclock/README.md index c7452397d..93967e8a7 100644 --- a/apps/terminalclock/README.md +++ b/apps/terminalclock/README.md @@ -8,3 +8,8 @@ It can display : - hrm - motion - steps + + +"Power saving" setting control the HR and pressure (altitude) sensors. +If "Off" they will always be on. +If "On" the sensors will be turned on every "Power on interval" minutes for 45 secondes diff --git a/apps/terminalclock/app.js b/apps/terminalclock/app.js index 61861f745..833ed7694 100644 --- a/apps/terminalclock/app.js +++ b/apps/terminalclock/app.js @@ -3,15 +3,14 @@ var fontColor = g.theme.dark ? "#0f0" : "#000"; var heartRate = 0; var altitude = -9001; -// handling the differents versions of the Banglejs smartwatch +// handling the differents versions of the Banglejs smartwatch screen sizes if (process.env.HWVERSION == 1){ var paddingY = 3; var font6x8At4Size = 48; var font6x8At2Size = 27; var font6x8FirstTextSize = 6; var font6x8DefaultTextSize = 3; -} -else{ +} else{ var paddingY = 2; var font6x8At4Size = 32; var font6x8At2Size = 18; @@ -66,7 +65,7 @@ function drawDate(now, pos){ drawLine(locale_date, pos); } -function drawInput(now, pos){ +function drawInput(pos){ clearField(pos); drawLine(">", pos); } @@ -129,17 +128,55 @@ function draw(){ drawStepCount(curPos); curPos++; } - drawInput(now, curPos); + drawInput(curPos); } +function turnOnServices(){ + if(settings.showHRM){ + Bangle.setHRMPower(true, "terminalclock"); + } + if(settings.showAltitude && process.env.HWVERSION != 1){ + Bangle.setBarometerPower(true, "terminalclock"); + } + if(settings.powerSaving){ + setTimeout(function () { + turnOffServices(); + }, 45000); + } +} + +function turnOffServices(){ + if(settings.showHRM){ + Bangle.setHRMPower(false, "terminalclock"); + } + if(settings.showAltitude && process.env.HWVERSION != 1){ + Bangle.setBarometerPower(false, "terminalclock"); + } +} + +var unlockDrawIntervalID = -1; +Bangle.on('lock', function(on){ + if(!on){ // unclock + if(settings.powerSaving){ + turnOnServices(); + } + unlockDrawIntervalID = setInterval(draw, 1000); // every second + } + if(on && unlockDrawIntervalID != -1){ // lock + clearInterval(unlockDrawIntervalID); + } +}); + Bangle.on('HRM',function(hrmInfo) { + console.log('in hrm'); if(hrmInfo.confidence >= settings.HRMinConfidence) heartRate = hrmInfo.bpm; }); -var MEDIANLENGTH = 20; -var avr = [], median; +var MEDIANLENGTH = 20; // technical +var avr = [], median; // technical Bangle.on('pressure', function(e) { + console.log('in pressure'); while (avr.length>MEDIANLENGTH) avr.pop(); avr.unshift(e.altitude); median = avr.slice().sort(); @@ -161,18 +198,20 @@ var settings = Object.assign({ showActivity: true, showStepCount: true, showAltitude: process.env.HWVERSION != 1 ? true : false, + powerSaving: true, + PowerOnInterval: 15, }, require('Storage').readJSON("terminalclock.json", true) || {}); -if(settings.showAltitude && process.env.HWVERSION != 1){ - Bangle.setBarometerPower(true, "app"); +// turn the services before drawing anything +turnOnServices(); +if(settings.powerSaving){ + setInterval(turnOnServices, settings.PowerOnInterval*60000); // every PowerOnInterval min } - // Show launcher when middle button pressed Bangle.setUI("clock"); -// Load widgets +// Load and draw widgets Bangle.loadWidgets(); Bangle.drawWidgets(); // draw immediately at first draw(); - -var secondInterval = setInterval(draw, 10000); +setInterval(draw, 10000); // every 10 seconds diff --git a/apps/terminalclock/metadata.json b/apps/terminalclock/metadata.json index 7bc00bca4..9f76ed8f2 100644 --- a/apps/terminalclock/metadata.json +++ b/apps/terminalclock/metadata.json @@ -3,7 +3,7 @@ "name": "Terminal Clock", "shortName":"Terminal Clock", "description": "A terminal cli like clock displaying multiple sensor data", - "version":"0.05", + "version":"0.06", "icon": "app.png", "type": "clock", "tags": "clock", diff --git a/apps/terminalclock/settings.js b/apps/terminalclock/settings.js index 4b09aad6a..bd860b491 100644 --- a/apps/terminalclock/settings.js +++ b/apps/terminalclock/settings.js @@ -8,6 +8,8 @@ showHRM: true, showActivity: true, showStepCount: true, + powerSaving: true, + PowerOnInterval: 15, }, require('Storage').readJSON(FILE, true) || {}); function writeSettings() { @@ -65,10 +67,29 @@ settings.showStepCount = v; writeSettings(); } + }, + 'Power saving': { + value: settings.powerSaving, + format: v => v?"On":"Off", + onchange: v => { + settings.powerSaving = v; + writeSettings(); + } + }, + 'Power on interval': { + value: settings.PowerOnInterval, + min: 3, max: 60, + onchange: v => { + settings.PowerOnInterval = v; + writeSettings(); + }, + format: x => { + return x + " min"; + } } } if (process.env.HWVERSION == 1) { delete menu['Show Altitude'] } E.showMenu(menu); -}) +}) \ No newline at end of file From 76c40f94a259737f0dadbe6929d819147d4b84cc Mon Sep 17 00:00:00 2001 From: Stiralbios Date: Thu, 26 May 2022 16:53:50 +0200 Subject: [PATCH 509/509] [TerminalClock] Remove logs --- apps/terminalclock/app.js | 2 -- 1 file changed, 2 deletions(-) diff --git a/apps/terminalclock/app.js b/apps/terminalclock/app.js index 833ed7694..7dc3bf1d1 100644 --- a/apps/terminalclock/app.js +++ b/apps/terminalclock/app.js @@ -168,7 +168,6 @@ Bangle.on('lock', function(on){ }); Bangle.on('HRM',function(hrmInfo) { - console.log('in hrm'); if(hrmInfo.confidence >= settings.HRMinConfidence) heartRate = hrmInfo.bpm; }); @@ -176,7 +175,6 @@ Bangle.on('HRM',function(hrmInfo) { var MEDIANLENGTH = 20; // technical var avr = [], median; // technical Bangle.on('pressure', function(e) { - console.log('in pressure'); while (avr.length>MEDIANLENGTH) avr.pop(); avr.unshift(e.altitude); median = avr.slice().sort();

          sK4J_3@?sc=_ru1Erx&l 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�Mkcvd}Cp-Bkqck>M0ZHcgM=+6(zp4 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 z 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 QZiIYWP8e}=^azo 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ĜAmL&}*cKzZ3VyPP0U%pIK#4P^2njD8o~E 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 Date: Fri, 6 May 2022 12:58:10 -0700 Subject: [PATCH 191/509] bump eslint version add airbnb config add suggested package.json attrs --- package.json | 2 ++ 1 file changed, 2 insertions(+) diff --git a/package.json b/package.json index 32c96e3ea..8aa50c9a3 100644 --- a/package.json +++ b/package.json @@ -3,6 +3,8 @@ "description": "Bangle.js App Loader (and Apps)", "author": "Gordon Williams (http://espruino.com)", "version": "0.0.1", + "license": "MIT", + "repository": "https://github.com/espruino/BangleApps", "devDependencies": { "eslint": "7.1.0" }, From 4c4cf0ddf77a0ba90ace989e5637a681ec743ebd Mon Sep 17 00:00:00 2001 From: Jason Dekarske Date: Fri, 6 May 2022 12:58:28 -0700 Subject: [PATCH 192/509] fix some non-conformers --- apps/pie/app.js | 2 +- apps/scribble/app.js | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/apps/pie/app.js b/apps/pie/app.js index 69b67d3bd..74f4b4575 100644 --- a/apps/pie/app.js +++ b/apps/pie/app.js @@ -11,7 +11,7 @@ function scrollX(){ gfx.clearRect(0,gfx.getHeight()*(1/4),gfx.getWidth(),0); gfx.scroll(0,gfx.getHeight()/4); score++; - if(typeof(m) != undefined && score>0){ + if(typeof m !== 'undefined' && score>0){ clearInterval(m); m = setInterval(scrollY,Math.abs(100/score+15-0.1*score));} gfx.setColor(1,1,1); diff --git a/apps/scribble/app.js b/apps/scribble/app.js index 99ee3f717..319a02d2c 100644 --- a/apps/scribble/app.js +++ b/apps/scribble/app.js @@ -368,8 +368,8 @@ class TextBox { // x and y are the center points this.x = x; this.y = y; - this.text = (typeof text !== undefined) ? text : "Default"; - this.col = (typeof col !== undefined) ? col : red; + this.text = text || "Default"; + this.col = col || red; // console.log(`Constr TextBox ${this.text} -> Center: (${this.x}, ${this.y}) | Col ${this.col}`); } From 9737014a5fb4581d57965088db83623f80700cf6 Mon Sep 17 00:00:00 2001 From: Jason Dekarske Date: Fri, 6 May 2022 12:58:56 -0700 Subject: [PATCH 193/509] actually add eslint --- package.json | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/package.json b/package.json index 8aa50c9a3..e11e79ae5 100644 --- a/package.json +++ b/package.json @@ -6,7 +6,10 @@ "license": "MIT", "repository": "https://github.com/espruino/BangleApps", "devDependencies": { - "eslint": "7.1.0" + "eslint": "^8.14.0", + "eslint-config-airbnb-base": "^15.0.0", + "eslint-plugin-import": "^2.26.0", + "npm-watch": "^0.11.0" }, "scripts": { "lint-apps": "eslint ./apps --ext .js", @@ -20,8 +23,5 @@ }, "dependencies": { "acorn": "^7.2.0" - }, - "devDpendencies": { - "npm-watch": "^0.11.0" } } From d20b52ee79ce33727ebeef4583ca79a14cfb043d Mon Sep 17 00:00:00 2001 From: Erik Andresen Date: Sat, 7 May 2022 10:39:28 +0200 Subject: [PATCH 194/509] widgps: add intervall to update the widget Periodically update so the always on display does show current GPS fix --- apps/widgps/ChangeLog | 1 + apps/widgps/metadata.json | 2 +- apps/widgps/widget.js | 10 ++++++++++ 3 files changed, 12 insertions(+), 1 deletion(-) diff --git a/apps/widgps/ChangeLog b/apps/widgps/ChangeLog index f68fc701c..0eb9e5692 100644 --- a/apps/widgps/ChangeLog +++ b/apps/widgps/ChangeLog @@ -3,3 +3,4 @@ 0.03: Fix positioning 0.04: Show GPS fix status 0.05: Don't poll for GPS status, override setGPSPower handler (fix #1456) +0.06: Periodically update so the always on display does show current GPS fix diff --git a/apps/widgps/metadata.json b/apps/widgps/metadata.json index 39bff2fad..b135c77bd 100644 --- a/apps/widgps/metadata.json +++ b/apps/widgps/metadata.json @@ -1,7 +1,7 @@ { "id": "widgps", "name": "GPS Widget", - "version": "0.05", + "version": "0.06", "description": "Tiny widget to show the power and fix status of the GPS", "icon": "widget.png", "type": "widget", diff --git a/apps/widgps/widget.js b/apps/widgps/widget.js index bfdb89d33..269af4953 100644 --- a/apps/widgps/widget.js +++ b/apps/widgps/widget.js @@ -1,9 +1,19 @@ (function(){ + var interval; + // override setGPSPower so we know if GPS is on or off var oldSetGPSPower = Bangle.setGPSPower; Bangle.setGPSPower = function(on,id) { var isGPSon = oldSetGPSPower(on,id); WIDGETS.gps.draw(); + if (isGPSon && interval === undefined) { + interval = setInterval(function() { + WIDGETS.gps.draw(WIDGETS.gps); + }, 10*1000); // update every 10 seconds to show gps fix/no fix + } else if (!isGPSon && interval !== undefined) { + clearInterval(interval); + interval = undefined; + } return isGPSon; } From 9fa406450bda3e77c9401f4e7da510dd94dfd6fe Mon Sep 17 00:00:00 2001 From: Erik Andresen Date: Sat, 7 May 2022 13:26:35 +0200 Subject: [PATCH 195/509] widgps: move interval check to draw method --- apps/widgps/widget.js | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/apps/widgps/widget.js b/apps/widgps/widget.js index 269af4953..206096013 100644 --- a/apps/widgps/widget.js +++ b/apps/widgps/widget.js @@ -6,14 +6,6 @@ Bangle.setGPSPower = function(on,id) { var isGPSon = oldSetGPSPower(on,id); WIDGETS.gps.draw(); - if (isGPSon && interval === undefined) { - interval = setInterval(function() { - WIDGETS.gps.draw(WIDGETS.gps); - }, 10*1000); // update every 10 seconds to show gps fix/no fix - } else if (!isGPSon && interval !== undefined) { - clearInterval(interval); - interval = undefined; - } return isGPSon; } @@ -29,6 +21,16 @@ } else { g.setColor("#888"); // off = grey } + + // check if we need to update the widget periodically + if (Bangle.isGPSOn() && interval === undefined) { + interval = setInterval(function() { + WIDGETS.gps.draw(WIDGETS.gps); + }, 10*1000); // update every 10 seconds to show gps fix/no fix + } else if (!Bangle.isGPSOn() && interval !== undefined) { + clearInterval(interval); + interval = undefined; + } g.drawImage(atob("GBiBAAAAAAAAAAAAAA//8B//+BgYGBgYGBgYGBgYGBgYGBgYGB//+B//+BgYGBgYGBgYGBgYGBgYGBgYGB//+A//8AAAAAAAAAAAAA=="), this.x, 2+this.y); }}; })(); From d063eaae217c4cc8f183502cf7e9a0d00dfdfa07 Mon Sep 17 00:00:00 2001 From: David Peer Date: Sat, 7 May 2022 14:30:33 +0200 Subject: [PATCH 196/509] Better lock animation. --- apps/neonx/ChangeLog | 3 +- apps/neonx/README.md | 2 +- apps/neonx/metadata.json | 2 +- apps/neonx/neonx.app.js | 70 ++++++++++++++++++++++++++++------------ 4 files changed, 54 insertions(+), 23 deletions(-) diff --git a/apps/neonx/ChangeLog b/apps/neonx/ChangeLog index 2e815a449..c1a50ecd7 100644 --- a/apps/neonx/ChangeLog +++ b/apps/neonx/ChangeLog @@ -1,4 +1,5 @@ 0.01: Initial release 0.02: Optional fullscreen mode 0.03: Optional show lock status via color -0.04: Ensure that widgets are always hidden in fullscreen mode \ No newline at end of file +0.04: Ensure that widgets are always hidden in fullscreen mode +0.05: Better lock/unlock animation \ No newline at end of file diff --git a/apps/neonx/README.md b/apps/neonx/README.md index ffb3c3f2c..4caa5e00f 100644 --- a/apps/neonx/README.md +++ b/apps/neonx/README.md @@ -24,4 +24,4 @@ Shows the watchface in fullscreen mode. Note: In fullscreen mode, widgets are hidden, but still loaded. ### Show lock status -If enabled, color changes when unlocked to detect the lock state easily. \ No newline at end of file +If enabled, the lock/unlock event is animated by changing the colors. \ No newline at end of file diff --git a/apps/neonx/metadata.json b/apps/neonx/metadata.json index 840e5b82e..ee99f98b8 100644 --- a/apps/neonx/metadata.json +++ b/apps/neonx/metadata.json @@ -2,7 +2,7 @@ "id": "neonx", "name": "Neon X & IO X Clock", "shortName": "Neon X Clock", - "version": "0.04", + "version": "0.05", "description": "Pebble Neon X & Neon IO X for Bangle.js", "icon": "neonx.png", "type": "clock", diff --git a/apps/neonx/neonx.app.js b/apps/neonx/neonx.app.js index 4b9231b0e..bcf4c874e 100644 --- a/apps/neonx/neonx.app.js +++ b/apps/neonx/neonx.app.js @@ -36,14 +36,8 @@ const digits = { const colors = { - x: [ - ["#FF00FF", "#00FFFF"], - ["#00FF00", "#FFFF00"] - ], - io: [ - ["#FF00FF", "#FFFF00"], - ["#00FF00", "#00FFFF"] - ] + x: ["#FF00FF", "#00FF00", "#00FFFF", "#FFFF00"], + io:["#FF00FF", "#00FF00", "#FFFF00", "#00FFFF"], }; const is12hour = (require("Storage").readJSON("setting.json",1)||{})["12hour"]||false; const screenWidth = g.getWidth(); @@ -71,7 +65,7 @@ function drawLine(poly, thickness){ } -function drawClock(num){ +function drawClock(num, xc){ let tx, ty; if(settings.fullscreen){ @@ -84,9 +78,8 @@ function drawClock(num){ for (let y = 0; y <= 1; y++) { const current = ((y + 1) * 2 + x - 1); let newScale = scale; - - let xc = settings.showLock && !Bangle.isLocked() ? Math.abs(x-1) : x; - let c = colors[settings.io ? 'io' : 'x'][y][xc]; + let colorArr = colors[settings.io ? 'io' : 'x']; + let c = colorArr[xc]; g.setColor(c); if (!settings.io) { @@ -104,14 +97,20 @@ function drawClock(num){ for (let i = 0; i < digits[num[y][x]].length; i++) { drawLine(g.transformVertices(digits[num[y][x]][i], { x: tx, y: ty, scale: newScale}), settings.thickness); } + + xc = (xc+1) % colorArr.length; } } } -function draw(date){ +function drawAndQueue(date){ queueDraw(); + draw(date, 0); +} + +function draw(date, xc){ // Depending on the settings, we clear all widgets or draw those. if(settings.fullscreen){ for (let wd of WIDGETS) {wd.draw=()=>{};wd.area="";} @@ -133,14 +132,14 @@ function draw(date){ drawTimeout = undefined; setTimeout(_ => { - draw(); + drawAndQueue(); }, 5000); } else { l1 = ('0' + (d.getHours() % (is12hour ? 12 : 24))).substr(-2); l2 = ('0' + d.getMinutes()).substr(-2); } - drawClock([l1, l2]); + drawClock([l1, l2], xc); } @@ -152,7 +151,7 @@ function queueDraw() { if (drawTimeout) clearTimeout(drawTimeout); drawTimeout = setTimeout(function() { drawTimeout = undefined; - draw(); + drawAndQueue(); }, 60000 - (Date.now() % 60000)); } @@ -161,7 +160,7 @@ function queueDraw() { * Event handlers */ if (settings.showDate) { - Bangle.on('touch', () => draw(!showingDate)); + Bangle.on('touch', () => drawAndQueue(!showingDate)); } Bangle.on('lcdPower', function(on){ @@ -169,12 +168,43 @@ Bangle.on('lcdPower', function(on){ drawTimeout = undefined; if (on) { - draw(); + drawAndQueue(); } }); + +function animateColor(speed, fun){ + // Animate lock + setTimeout(function() { + draw(false, 1); + setTimeout(function() { + draw(false, 2); + setTimeout(function() { + draw(false, 3); + setTimeout( + function(){ + draw(false, 0); + fun(); + } + ), speed+5; + }, speed+5); + }, speed+5); + }, speed); +} + + Bangle.on('lock', function(isLocked) { - draw(); + queueDraw(); + + if(!settings.showLock){ + draw(false, 0); + return; + } + + // Animate in case the use selected this setting. + animateColor(25, function(){ + animateColor(25, function(){}); + }); }); @@ -185,4 +215,4 @@ g.clear(1); Bangle.setUI("clock"); Bangle.loadWidgets(); -draw(); \ No newline at end of file +drawAndQueue(); \ No newline at end of file From d07124b74933431ed55bb27415de206dc091afd1 Mon Sep 17 00:00:00 2001 From: David Peer Date: Sat, 7 May 2022 16:35:16 +0200 Subject: [PATCH 197/509] Minor changes --- apps/neonx/neonx.app.js | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/apps/neonx/neonx.app.js b/apps/neonx/neonx.app.js index bcf4c874e..b3fd4e86d 100644 --- a/apps/neonx/neonx.app.js +++ b/apps/neonx/neonx.app.js @@ -186,9 +186,9 @@ function animateColor(speed, fun){ draw(false, 0); fun(); } - ), speed+5; - }, speed+5); - }, speed+5); + ), speed; + }, speed); + }, speed); }, speed); } @@ -202,8 +202,8 @@ Bangle.on('lock', function(isLocked) { } // Animate in case the use selected this setting. - animateColor(25, function(){ - animateColor(25, function(){}); + animateColor(5, function(){ + animateColor(5, function(){}); }); }); From 6a9ca6f32a2ae773629205d0f058e95a409b2ab3 Mon Sep 17 00:00:00 2001 From: David Peer Date: Sat, 7 May 2022 17:12:53 +0200 Subject: [PATCH 198/509] Animate only once. --- apps/neonx/neonx.app.js | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/apps/neonx/neonx.app.js b/apps/neonx/neonx.app.js index b3fd4e86d..bd78b525f 100644 --- a/apps/neonx/neonx.app.js +++ b/apps/neonx/neonx.app.js @@ -173,7 +173,10 @@ Bangle.on('lcdPower', function(on){ }); -function animateColor(speed, fun){ +function drawAnimated(){ + queueDraw(); + speed = 25; + // Animate lock setTimeout(function() { draw(false, 1); @@ -184,7 +187,6 @@ function animateColor(speed, fun){ setTimeout( function(){ draw(false, 0); - fun(); } ), speed; }, speed); @@ -194,7 +196,6 @@ function animateColor(speed, fun){ Bangle.on('lock', function(isLocked) { - queueDraw(); if(!settings.showLock){ draw(false, 0); @@ -202,9 +203,7 @@ Bangle.on('lock', function(isLocked) { } // Animate in case the use selected this setting. - animateColor(5, function(){ - animateColor(5, function(){}); - }); + drawAnimated(); }); From c1457857165450c5af2023008afb617d4852834a Mon Sep 17 00:00:00 2001 From: David Peer Date: Sat, 7 May 2022 17:13:51 +0200 Subject: [PATCH 199/509] Minor fix -- queue draw alo on lock --- apps/neonx/neonx.app.js | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/apps/neonx/neonx.app.js b/apps/neonx/neonx.app.js index bd78b525f..76cf0c360 100644 --- a/apps/neonx/neonx.app.js +++ b/apps/neonx/neonx.app.js @@ -196,9 +196,8 @@ function drawAnimated(){ Bangle.on('lock', function(isLocked) { - if(!settings.showLock){ - draw(false, 0); + queueDraw(); return; } From f5900b5a17b4ca645ff6aa27758efc89af0e0d31 Mon Sep 17 00:00:00 2001 From: David Peer Date: Sat, 7 May 2022 17:14:39 +0200 Subject: [PATCH 200/509] Draw on lock only if lock settings are enabled. --- apps/neonx/neonx.app.js | 1 - 1 file changed, 1 deletion(-) diff --git a/apps/neonx/neonx.app.js b/apps/neonx/neonx.app.js index 76cf0c360..7b7d904ea 100644 --- a/apps/neonx/neonx.app.js +++ b/apps/neonx/neonx.app.js @@ -197,7 +197,6 @@ function drawAnimated(){ Bangle.on('lock', function(isLocked) { if(!settings.showLock){ - queueDraw(); return; } From 521fd4cb8ff0da28b3d57fc7ae57197f3e5a694b Mon Sep 17 00:00:00 2001 From: David Peer Date: Sat, 7 May 2022 17:15:52 +0200 Subject: [PATCH 201/509] Minor refactoring. --- apps/neonx/neonx.app.js | 60 ++++++++++++++++++++--------------------- 1 file changed, 30 insertions(+), 30 deletions(-) diff --git a/apps/neonx/neonx.app.js b/apps/neonx/neonx.app.js index 7b7d904ea..7af767fa2 100644 --- a/apps/neonx/neonx.app.js +++ b/apps/neonx/neonx.app.js @@ -104,13 +104,35 @@ function drawClock(num, xc){ } -function drawAndQueue(date){ +function draw(date){ queueDraw(); - draw(date, 0); + _draw(date, 0); } -function draw(date, xc){ +function drawAnimated(){ + queueDraw(); + + // Animate draw through different colors + speed = 25; + setTimeout(function() { + _draw(false, 1); + setTimeout(function() { + _draw(false, 2); + setTimeout(function() { + _draw(false, 3); + setTimeout( + function(){ + _draw(false, 0); + } + ), speed; + }, speed); + }, speed); + }, speed); +} + + +function _draw(date, xc){ // Depending on the settings, we clear all widgets or draw those. if(settings.fullscreen){ for (let wd of WIDGETS) {wd.draw=()=>{};wd.area="";} @@ -132,7 +154,7 @@ function draw(date, xc){ drawTimeout = undefined; setTimeout(_ => { - drawAndQueue(); + draw(); }, 5000); } else { l1 = ('0' + (d.getHours() % (is12hour ? 12 : 24))).substr(-2); @@ -151,7 +173,7 @@ function queueDraw() { if (drawTimeout) clearTimeout(drawTimeout); drawTimeout = setTimeout(function() { drawTimeout = undefined; - drawAndQueue(); + draw(); }, 60000 - (Date.now() % 60000)); } @@ -160,7 +182,7 @@ function queueDraw() { * Event handlers */ if (settings.showDate) { - Bangle.on('touch', () => drawAndQueue(!showingDate)); + Bangle.on('touch', () => draw(!showingDate)); } Bangle.on('lcdPower', function(on){ @@ -168,33 +190,11 @@ Bangle.on('lcdPower', function(on){ drawTimeout = undefined; if (on) { - drawAndQueue(); + draw(); } }); -function drawAnimated(){ - queueDraw(); - speed = 25; - - // Animate lock - setTimeout(function() { - draw(false, 1); - setTimeout(function() { - draw(false, 2); - setTimeout(function() { - draw(false, 3); - setTimeout( - function(){ - draw(false, 0); - } - ), speed; - }, speed); - }, speed); - }, speed); -} - - Bangle.on('lock', function(isLocked) { if(!settings.showLock){ return; @@ -212,4 +212,4 @@ g.clear(1); Bangle.setUI("clock"); Bangle.loadWidgets(); -drawAndQueue(); \ No newline at end of file +draw(); \ No newline at end of file From a97215860a22fcd225e0a4a24ed3307c7d084a1a Mon Sep 17 00:00:00 2001 From: David Peer Date: Sat, 7 May 2022 17:24:38 +0200 Subject: [PATCH 202/509] Improved color order for animation --- apps/neonx/neonx.app.js | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/apps/neonx/neonx.app.js b/apps/neonx/neonx.app.js index 7af767fa2..17d3b9283 100644 --- a/apps/neonx/neonx.app.js +++ b/apps/neonx/neonx.app.js @@ -116,16 +116,14 @@ function drawAnimated(){ // Animate draw through different colors speed = 25; setTimeout(function() { - _draw(false, 1); + _draw(false, 2); setTimeout(function() { - _draw(false, 2); + _draw(false, 3); setTimeout(function() { - _draw(false, 3); - setTimeout( - function(){ + _draw(false, 1); + setTimeout(function(){ _draw(false, 0); - } - ), speed; + }, speed); }, speed); }, speed); }, speed); From acacc3497d5fb775d5da84d1ccc3c989f007c75a Mon Sep 17 00:00:00 2001 From: David Peer Date: Sat, 7 May 2022 17:25:35 +0200 Subject: [PATCH 203/509] Animate from outside to inside for IO --- apps/neonx/neonx.app.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/neonx/neonx.app.js b/apps/neonx/neonx.app.js index 17d3b9283..fd30fa30f 100644 --- a/apps/neonx/neonx.app.js +++ b/apps/neonx/neonx.app.js @@ -116,11 +116,11 @@ function drawAnimated(){ // Animate draw through different colors speed = 25; setTimeout(function() { - _draw(false, 2); + _draw(false, 1); setTimeout(function() { _draw(false, 3); setTimeout(function() { - _draw(false, 1); + _draw(false, 2); setTimeout(function(){ _draw(false, 0); }, speed); From 6dd5eeffed376566cacba4bc4e34f25256a495dc Mon Sep 17 00:00:00 2001 From: David Peer Date: Sun, 8 May 2022 21:29:25 +0200 Subject: [PATCH 204/509] Minor change --- apps/neonx/neonx.settings.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/neonx/neonx.settings.js b/apps/neonx/neonx.settings.js index e01ceb4d3..68e156dae 100644 --- a/apps/neonx/neonx.settings.js +++ b/apps/neonx/neonx.settings.js @@ -19,7 +19,7 @@ if (!neonXSettings) resetSettings(); - let thicknesses = [1, 2, 3, 4, 5, 6]; + let thicknesses = [1, 2, 3, 4, 5, 6, 7]; const menu = { "" : { "title":"Neon X & IO"}, From 522a9759b5508a1bc5a1a0f780bd9150d75bfa37 Mon Sep 17 00:00:00 2001 From: Iakov Davydov Date: Sun, 8 May 2022 21:33:38 +0200 Subject: [PATCH 205/509] widslimbat --- apps/widslimbat/metadata.json | 13 ++++++++ apps/widslimbat/widget.js | 55 ++++++++++++++++++++++++++++++++++ apps/widslimbat/widget.png | Bin 0 -> 5710 bytes 3 files changed, 68 insertions(+) create mode 100644 apps/widslimbat/metadata.json create mode 100644 apps/widslimbat/widget.js create mode 100644 apps/widslimbat/widget.png diff --git a/apps/widslimbat/metadata.json b/apps/widslimbat/metadata.json new file mode 100644 index 000000000..a83046e90 --- /dev/null +++ b/apps/widslimbat/metadata.json @@ -0,0 +1,13 @@ +{ "id": "widslimbat", + "name": "Slim battery widget with cells", + "shortName":"Slim battery with cells", + "version":"0.01", + "description": "A small (13px wide) battery widget with cells", + "icon": "widget.png", + "type": "widget", + "tags": "widget", + "supports" : ["BANGLEJS2"], + "storage": [ + {"name":"widslimbat.wid.js","url":"widget.js"} + ] +} diff --git a/apps/widslimbat/widget.js b/apps/widslimbat/widget.js new file mode 100644 index 000000000..4a8bb3b5d --- /dev/null +++ b/apps/widslimbat/widget.js @@ -0,0 +1,55 @@ +(() => { + const intervalLow = 60000; // update time when not charging + const intervalHigh = 2000; // update time when charging + const outline = atob("CRSBAD4AP/AYDAYDAYDAYDAYDAYDAYDAYD/w"); + + let COLORS = { + 'black': g.theme.dark ? "#fff" : "#000", + 'charging': "#0f0", + 'low': "#f00", + }; + + function draw() { + var i; + var oCol = COLORS.low; + var cCol = COLORS.low; + var nCells = 0; + + const bat = E.getBattery(); + if (bat>5) { + oCol = COLORS.black; + nCells = 1 + Math.floor((bat-6)/19); + } + if (nCells>1) + cCol = COLORS.black; + if (Bangle.isCharging()) + oCol = COLORS.charging; + g.reset(); + g.setColor(oCol).drawImage(outline,this.x+2,this.y+2); + for (i=0;iWIDGETS["widslimbat"].draw(),intervalLow); + + WIDGETS["widslimbat"]={ + area:"tr", + width:13, + draw:draw + }; +})(); diff --git a/apps/widslimbat/widget.png b/apps/widslimbat/widget.png new file mode 100644 index 0000000000000000000000000000000000000000..a9c7d416d70411fae178b7a6c142ec9733701097 GIT binary patch literal 5710 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 Date: Sun, 8 May 2022 22:55:00 -0300 Subject: [PATCH 206/509] Update pt_BR Translation --- apps/locale/locales.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/locale/locales.js b/apps/locale/locales.js index 2bc71fd75..d1ac7687f 100644 --- a/apps/locale/locales.js +++ b/apps/locale/locales.js @@ -564,7 +564,7 @@ var locales = { month: "Janeiro,Fevereiro,Março,Abril,Maio,Junho,Julho,Agosto,Setembro,Outubro,Novembro,Dezembro", abday: "Dom,Seg,Ter,Qua,Qui,Sex,Sab", day: "Domingo,Segunda-feira,Terça-feira,Quarta-feira,Quinta-feira,Sexta-feira,Sábado", - trans: { yes: "sim", Yes: "Sim", no: "não", No: "Não", ok: "certo", on: "ligado", off: "desligado" } + trans: { yes: "sim", Yes: "Sim", no: "não", No: "Não", ok: "confirmar", on: "ativado", off: "desativado" } }, "cs_CZ": { // THIS NEVER WORKED PROPERLY - many chars are not in the ISO8859-1 codepage and we use CODEPAGE_CONVERSIONS lang: "cs_CZ", From 6fc5edf4280d3e307e2ff11024c2f50eea2f2aff Mon Sep 17 00:00:00 2001 From: Erik Andresen Date: Mon, 9 May 2022 10:32:13 +0200 Subject: [PATCH 207/509] noteify: Add interface Add web interface to add, edit and delete notes --- apps/noteify/README.md | 3 ++ apps/noteify/interface.html | 93 +++++++++++++++++++++++++++++++++++++ apps/noteify/metadata.json | 1 + 3 files changed, 97 insertions(+) create mode 100644 apps/noteify/interface.html diff --git a/apps/noteify/README.md b/apps/noteify/README.md index d3868efcf..c846709de 100644 --- a/apps/noteify/README.md +++ b/apps/noteify/README.md @@ -18,3 +18,6 @@ This app uses the [Scheduler library](https://banglejs.com/apps/?id=sched) and r ![](note.png) ![](timer-alert.png) + +## Web interface +You can also add, edit or delete notes in the web interface, accessible with the download button. diff --git a/apps/noteify/interface.html b/apps/noteify/interface.html new file mode 100644 index 000000000..027c98860 --- /dev/null +++ b/apps/noteify/interface.html @@ -0,0 +1,93 @@ + + + + + +