From 2c64fb51aee50722a9a3189f0f9ddd97cf1d24de Mon Sep 17 00:00:00 2001 From: Pavel Machek Date: Fri, 3 Nov 2023 15:03:43 +0100 Subject: [PATCH 1/8] contacts: Inital version of contacts app. --- apps/contacts/ChangeLog | 1 + apps/contacts/README.md | 29 ++++ apps/contacts/app-icon.js | 1 + apps/contacts/app.png | Bin 0 -> 11828 bytes apps/contacts/contacts.app.js | 189 ++++++++++++++++++++++++++ apps/contacts/contacts.json | 6 + apps/contacts/interface.html | 249 ++++++++++++++++++++++++++++++++++ apps/contacts/metadata.json | 18 +++ 8 files changed, 493 insertions(+) create mode 100644 apps/contacts/ChangeLog create mode 100644 apps/contacts/README.md create mode 100644 apps/contacts/app-icon.js create mode 100644 apps/contacts/app.png create mode 100644 apps/contacts/contacts.app.js create mode 100644 apps/contacts/contacts.json create mode 100644 apps/contacts/interface.html create mode 100644 apps/contacts/metadata.json diff --git a/apps/contacts/ChangeLog b/apps/contacts/ChangeLog new file mode 100644 index 000000000..5560f00bc --- /dev/null +++ b/apps/contacts/ChangeLog @@ -0,0 +1 @@ +0.01: New App! diff --git a/apps/contacts/README.md b/apps/contacts/README.md new file mode 100644 index 000000000..1bfc99c8e --- /dev/null +++ b/apps/contacts/README.md @@ -0,0 +1,29 @@ +# Contacts + +This app provides a common way to set up the `contacts.json` file. + +## Contacts JSON file + +When the app is loaded from the app loader, a file named +`contacts.json` is loaded along with the javascript etc. The file +has the following contents: + +``` +[ + { + "name":"NONE" + }, + { + "name":"First Last", + "number":"123456789", + } +] +``` + +## Contacts Editor + +Clicking on the download icon of `Contents` in the app loader invokes +the contact editor. The editor downloads and displays the current +`contacts.json` file. Clicking the `Edit` button beside an entry +causes the entry to be deleted from the list and displayed in the edit +boxes. It can be restored - by clicking the `Add` button. \ No newline at end of file diff --git a/apps/contacts/app-icon.js b/apps/contacts/app-icon.js new file mode 100644 index 000000000..3012be8d8 --- /dev/null +++ b/apps/contacts/app-icon.js @@ -0,0 +1 @@ +require("heatshrink").decompress(atob("mEwwcBkmSpIC/AVsJCJ+AQaCZBCOeACKGQLKGQBA0ggARPJ4IRsYo0ggR9IoAIGiRiIpEECJsAiACBBYoRGpEAI4JBFI47CBLIRlDHYJrGYQIRCwQICL4MQOgx9GboUSeQ4RFwAFBiSGHCIo4CiVIWZyPICP4RaRIQROgARHdIwICoIIFkDpGBAKqHgGACI0AyVIggIDoEEMQ1ICINJCIj4CfwIREBwUgQYYOCfYoFDJQKDFCIopEO4RoDKAqJHRhAC/ATA=")) diff --git a/apps/contacts/app.png b/apps/contacts/app.png new file mode 100644 index 0000000000000000000000000000000000000000..147dcc61a2487588c2bd0eaef16e22ec88c1a80b GIT binary patch literal 11828 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 literal 0 HcmV?d00001 diff --git a/apps/contacts/contacts.app.js b/apps/contacts/contacts.app.js new file mode 100644 index 000000000..85eef625b --- /dev/null +++ b/apps/contacts/contacts.app.js @@ -0,0 +1,189 @@ +/* contacts.js */ + +var Layout = require("Layout"); + +const W = g.getWidth(); +const H = g.getHeight(); + +var wp = require('Storage').readJSON("contacts.json", true) || []; +// Use this with corrupted contacts +//var wp = []; + +var key; /* Shared between functions, typically wp name */ + +function writeContact() { + require('Storage').writeJSON("contacts.json", wp); +} + +function mainMenu() { + var menu = { + "< Back" : Bangle.load + }; + if (Object.keys(wp).length==0) Object.assign(menu, {"NO Contacts":""}); + else for (let id in wp) { + let i = id; + menu[wp[id]["name"]]=()=>{ decode(i); }; + } + menu["Add"]=addCard; + menu["Remove"]=removeCard; + g.clear(); + E.showMenu(menu); +} + +function decode(pin) { + var i = wp[pin]; + var l = i["name"] + "\n" + i["number"]; + var la = new Layout ({ + type:"v", c: [ + {type:"txt", font:"10%", pad:1, fillx:1, filly:1, label: l}, + {type:"btn", font:"10%", pad:1, fillx:1, filly:1, label:"OK", cb:l=>{mainMenu();}} + ], lazy:true}); + g.clear(); + la.render(); +} + +function showNumpad(text, key_, callback) { + key = key_; + E.showMenu(); + function addDigit(digit) { + key+=digit; + if (1) { + l = text[key.length]; + switch (l) { + case '.': case ' ': case "'": + key+=l; + break; + case 'd': case 'D': default: + break; + } + } + Bangle.buzz(20); + update(); + } + function update() { + g.reset(); + g.clearRect(0,0,g.getWidth(),23); + s = key + text.substr(key.length, 999); + g.setFont("Vector:24").setFontAlign(1,0).drawString(s,g.getWidth(),12); + } + ds="12%"; + var numPad = new Layout ({ + type:"v", c: [{ + type:"v", c: [ + {type:"", height:24}, + {type:"h",filly:1, c: [ + {type:"btn", font:ds, width:58, label:"7", cb:l=>{addDigit("7");}}, + {type:"btn", font:ds, width:58, label:"8", cb:l=>{addDigit("8");}}, + {type:"btn", font:ds, width:58, label:"9", cb:l=>{addDigit("9");}} + ]}, + {type:"h",filly:1, c: [ + {type:"btn", font:ds, width:58, label:"4", cb:l=>{addDigit("4");}}, + {type:"btn", font:ds, width:58, label:"5", cb:l=>{addDigit("5");}}, + {type:"btn", font:ds, width:58, label:"6", cb:l=>{addDigit("6");}} + ]}, + {type:"h",filly:1, c: [ + {type:"btn", font:ds, width:58, label:"1", cb:l=>{addDigit("1");}}, + {type:"btn", font:ds, width:58, label:"2", cb:l=>{addDigit("2");}}, + {type:"btn", font:ds, width:58, label:"3", cb:l=>{addDigit("3");}} + ]}, + {type:"h",filly:1, c: [ + {type:"btn", font:ds, width:58, label:"0", cb:l=>{addDigit("0");}}, + {type:"btn", font:ds, width:58, label:"C", cb:l=>{key=key.slice(0,-1); update();}}, + {type:"btn", font:ds, width:58, id:"OK", label:"OK", cb:callback} + ]} + ]} + ], lazy:true}); + g.clear(); + numPad.render(); + update(); +} + +function removeCard() { + var menu = { + "" : {title : "Select Contact"}, + "< Back" : mainMenu + }; + if (Object.keys(wp).length==0) Object.assign(menu, {"No Contacts":""}); + else { + wp.forEach((val, card) => { + const name = wp[card].name; + menu[name]=()=>{ + E.showMenu(); + var confirmRemove = new Layout ( + {type:"v", c: [ + {type:"txt", font:"15%", pad:1, fillx:1, filly:1, label:"Delete"}, + {type:"txt", font:"15%", pad:1, fillx:1, filly:1, label:name}, + {type:"h", c: [ + {type:"btn", font:"15%", pad:1, fillx:1, filly:1, label: "YES", cb:l=>{ + wp.splice(card, 1); + writeContact(); + mainMenu(); + }}, + {type:"btn", font:"15%", pad:1, fillx:1, filly:1, label: " NO", cb:l=>{mainMenu();}} + ]} + ], lazy:true}); + g.clear(); + confirmRemove.render(); + }; + }); + } + E.showMenu(menu); +} + +function askPosition(callback) { + let full = ""; + showNumpad("dddDDDddd", "", function() { + callback(key, ""); + }); +} + +function createContact(lat, name) { + let n = {}; + n["name"] = name; + n["number"] = lat; + wp.push(n); + print("add -- contacts", wp); + writeContact(); +} + +function addCardName2(key) { + g.clear(); + askPosition(function(lat, lon) { + print("position -- ", lat, lon); + createContact(lat, result); + mainMenu(); + }); +} + +function addCardName(key) { + result = key; + if (wp[result]!=undefined) { + E.showMenu(); + var alreadyExists = new Layout ( + {type:"v", c: [ + {type:"txt", font:Math.min(15,100/result.length)+"%", pad:1, fillx:1, filly:1, label:result}, + {type:"txt", font:"12%", pad:1, fillx:1, filly:1, label:"already exists."}, + {type:"h", c: [ + {type:"btn", font:"10%", pad:1, fillx:1, filly:1, label: "REPLACE", cb:l=>{ addCardName2(key); }}, + {type:"btn", font:"10%", pad:1, fillx:1, filly:1, label: "CANCEL", cb:l=>{mainMenu();}} + ]} + ], lazy:true}); + g.clear(); + alreadyExists.render(); + return; + } + addCardName2(key); +} + +function addCard() { + require("textinput").input({text:""}).then(result => { + if (result != "") { + addCardName(result); + } else + mainMenu(); + }); +} + +g.reset(); +Bangle.setUI(); +mainMenu(); diff --git a/apps/contacts/contacts.json b/apps/contacts/contacts.json new file mode 100644 index 000000000..40afa27dd --- /dev/null +++ b/apps/contacts/contacts.json @@ -0,0 +1,6 @@ +[ + { + "name":"EU emergency", + "number":"112" + } +] diff --git a/apps/contacts/interface.html b/apps/contacts/interface.html new file mode 100644 index 000000000..013478960 --- /dev/null +++ b/apps/contacts/interface.html @@ -0,0 +1,249 @@ + + + + + + + + + + + + + +

Contacts v.2

+
+
+ + + +
+
+ +
+
+
+ + + + + + + + + +
NameNumber
+
+

Add a new contact

+
+
+
+ +
+
+ +
+
+
+
+ +
+
+
+
+
+
+ + + + + + + + diff --git a/apps/contacts/metadata.json b/apps/contacts/metadata.json new file mode 100644 index 000000000..5e08c6fdc --- /dev/null +++ b/apps/contacts/metadata.json @@ -0,0 +1,18 @@ +{ "id": "contacts", + "name": "contacts", + "version":"0.01", + "description": "Provides means of storing user contacts, viewing/editing them on device and from the App loader", + "icon": "app.png", + "tags": "tool", + "supports" : ["BANGLEJS2"], + "allow_emulator": true, + "readme": "README.md", + "interface": "interface.html", + "storage": [ + {"name":"contacts.app.js","url":"contacts.app.js"}, + {"name":"contacts.img","url":"app-icon.js","evaluate":true} + ], + "data": [ + {"name":"contacts.json","url":"contacts.json"} + ] +} From 7bfcdee6e26cbe43564ed057123f7e7226a26496 Mon Sep 17 00:00:00 2001 From: Pavel Machek Date: Sat, 4 Nov 2023 09:07:41 +0100 Subject: [PATCH 2/8] contacts: we use textinput, include it in dependencies --- apps/contacts/metadata.json | 1 + 1 file changed, 1 insertion(+) diff --git a/apps/contacts/metadata.json b/apps/contacts/metadata.json index 5e08c6fdc..c466906b5 100644 --- a/apps/contacts/metadata.json +++ b/apps/contacts/metadata.json @@ -8,6 +8,7 @@ "allow_emulator": true, "readme": "README.md", "interface": "interface.html", + "dependencies": {"textinput":"type"}, "storage": [ {"name":"contacts.app.js","url":"contacts.app.js"}, {"name":"contacts.img","url":"app-icon.js","evaluate":true} From 2c49a2527d1d1b9ea6d3c7a7866014a14d2d6e61 Mon Sep 17 00:00:00 2001 From: James Steinberg Date: Sun, 5 Nov 2023 13:26:02 -0500 Subject: [PATCH 3/8] no dithering --- apps/twentyeightbysix/app.js | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/apps/twentyeightbysix/app.js b/apps/twentyeightbysix/app.js index 5ad755800..224c4d050 100644 --- a/apps/twentyeightbysix/app.js +++ b/apps/twentyeightbysix/app.js @@ -22,18 +22,18 @@ const normalSleepHours = 9; const timeSetHeight = HARDWARE_VERSION == 1 ? 30: 34; const timeSetDistance = HARDWARE_VERSION == 1 ? 50: 29; -const backgroundColor = "#2c2e3a"; +const backgroundColor = HARDWARE_VERSION == 1 ? "#2c2e3a": "#000000"; const mainTextColor = "#FFFFFF"; -const watchColor = "#aaaaaa"; +const watchColor = HARDWARE_VERSION == 1 ? "#aaaaaa": "#FFFFFF"; -const sleepTextColor = "#000000"; -const sleepBlockColor = "#D8D8D8"; +const sleepTextColor = "#FFFFFF"; +const sleepBlockColor = HARDWARE_VERSION == 1 ? "#D8D8D8": "#000000"; const awakeTextColor = "#000000"; const awakeBlockColor = "#FFFFFF"; const dayTextColor = "#FFFFFF"; -const dayBlockColor = "#2c2e3a"; +const dayBlockColor = HARDWARE_VERSION == 1 ? "#2c2e3a": "#000000"; const quotes = [ ["", "Drop the", "ancient", "way of", "sleeping", ""], From 165a400cdd49977ee1b70215c6358443b913467e Mon Sep 17 00:00:00 2001 From: James Steinberg Date: Sun, 5 Nov 2023 13:29:37 -0500 Subject: [PATCH 4/8] update screenshot --- apps/twentyeightbysix/screenshot3.png | Bin 3912 -> 3419 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/apps/twentyeightbysix/screenshot3.png b/apps/twentyeightbysix/screenshot3.png index 3771001e61f52446ad285435d2d3970958aebfee..d1ae7f15a43b2b07ef43c3c89cbadd7c683dcd0e 100644 GIT binary patch delta 3404 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 H2(kYK0Asa= delta 3901 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 LNkvXXu0mjf41&mo From dd96e33774bee9c0ce0aea9ffe336ce18a0d631c Mon Sep 17 00:00:00 2001 From: Gordon Williams Date: Mon, 6 Nov 2023 14:55:16 +0000 Subject: [PATCH 5/8] 0.33: Ensure that a new file is always created if the stuff that's being recorded has changed (fix #3081) --- apps/recorder/ChangeLog | 3 ++- apps/recorder/metadata.json | 2 +- apps/recorder/widget.js | 34 ++++++++++++++++++++-------------- 3 files changed, 23 insertions(+), 16 deletions(-) diff --git a/apps/recorder/ChangeLog b/apps/recorder/ChangeLog index c3ea6041a..665d11afa 100644 --- a/apps/recorder/ChangeLog +++ b/apps/recorder/ChangeLog @@ -38,4 +38,5 @@ 0.30: Add clock info for showing and toggling recording state 0.31: Ensure that background-drawn tracks can get cancelled, and draw less at a time to make updates smoother plotTrack now draws the current track even if you're not actively recording -0.32: Add cadence data to output files \ No newline at end of file +0.32: Add cadence data to output files +0.33: Ensure that a new file is always created if the stuff that's being recorded has changed (fix #3081) \ No newline at end of file diff --git a/apps/recorder/metadata.json b/apps/recorder/metadata.json index a95ddf470..33034ae34 100644 --- a/apps/recorder/metadata.json +++ b/apps/recorder/metadata.json @@ -2,7 +2,7 @@ "id": "recorder", "name": "Recorder", "shortName": "Recorder", - "version": "0.32", + "version": "0.33", "description": "Record GPS position, heart rate and more in the background, then download to your PC.", "icon": "app.png", "tags": "tool,outdoors,gps,widget,clkinfo", diff --git a/apps/recorder/widget.js b/apps/recorder/widget.js index 2525a96e4..585b97d52 100644 --- a/apps/recorder/widget.js +++ b/apps/recorder/widget.js @@ -159,6 +159,21 @@ return recorders; } + let getActiveRecorders = function() { + let activeRecorders = []; + let recorders = getRecorders(); + settings.record.forEach(r => { + var recorder = recorders[r]; + if (!recorder) { + console.log(/*LANG*/"Recorder for "+E.toJS(r)+/*LANG*/"+not found"); + return; + } + activeRecorders.push(recorder()); + }); + return activeRecorders; + }; + let getCSVHeaders = activeRecorders => ["Time"].concat(activeRecorders.map(r=>r.fields)); + let writeLog = function() { entriesWritten++; WIDGETS["recorder"].draw(); @@ -189,17 +204,9 @@ if (settings.recording) { // set up recorders - var recorders = getRecorders(); // TODO: order?? - settings.record.forEach(r => { - var recorder = recorders[r]; - if (!recorder) { - console.log(/*LANG*/"Recorder for "+E.toJS(r)+/*LANG*/"+not found"); - return; - } - var activeRecorder = recorder(); + activeRecorders = getActiveRecorders(); + activeRecorders.forEach(activeRecorder => { activeRecorder.start(); - activeRecorders.push(activeRecorder); - // TODO: write field names? }); WIDGETS["recorder"].width = 15 + ((activeRecorders.length+1)>>1)*12; // 12px per recorder // open/create file @@ -209,9 +216,7 @@ } else { storageFile = require("Storage").open(settings.file,"w"); // New file - write headers - var fields = ["Time"]; - activeRecorders.forEach(recorder => fields.push.apply(fields,recorder.fields)); - storageFile.write(fields.join(",")+"\n"); + storageFile.write(getCSVHeaders(activeRecorders).join(",")+"\n"); } // start recording... WIDGETS["recorder"].draw(); @@ -246,7 +251,8 @@ // if no filename set or date different, set up a new filename settings.file = getTrackFilename(); } - if (require("Storage").list(settings.file).length){ // if file exists + var headers = require("Storage").open(settings.file,"r").readLine(); + if (headers && headers.trim()==getCSVHeaders(getActiveRecorders()).join(",")){ // if file exists AND the headers match (#3081) if (!options.force) { // if not forced, ask the question g.reset(); // work around bug in 2v17 and earlier where bg color wasn't reset return E.showPrompt( From 233f166de63750372789c8dcb52941e805109921 Mon Sep 17 00:00:00 2001 From: James Steinberg Date: Mon, 6 Nov 2023 11:36:41 -0500 Subject: [PATCH 6/8] clean up design --- apps/twentyeightbysix/app.js | 47 ++++++++++++++++++------------------ 1 file changed, 24 insertions(+), 23 deletions(-) diff --git a/apps/twentyeightbysix/app.js b/apps/twentyeightbysix/app.js index 224c4d050..fb9067c73 100644 --- a/apps/twentyeightbysix/app.js +++ b/apps/twentyeightbysix/app.js @@ -13,9 +13,9 @@ const weirdAwakeHours = 19; const weirdSleepHours = 9; const normalDayWidth = HARDWARE_VERSION == 1 ? 24: 28; -const normalWeekDayHeight = HARDWARE_VERSION == 1 ? 10: 11; -const normalDayBoxHeight = HARDWARE_VERSION == 1 ? 9: 5; -const normalSleepDayHeight = 28; +const normalWeekDayHeight = HARDWARE_VERSION == 1 ? 10: 9; +const normalDayBoxHeight = HARDWARE_VERSION == 1 ? 9: 4; +const normalSleepDayHeight = HARDWARE_VERSION == 1 ? 28: 27; const normalAwakeHours = 15; const normalSleepHours = 9; @@ -403,24 +403,26 @@ function drawClockPointer() { middle, circleBottom + 15 ]); - g.fillPoly([ - middle, circleTop, - middle - 25, circleTop + 5, - middle - 40, circleTop + 16, - middle - 10, circleTop - 5, - middle - 3, circleTop - 10, - middle, circleTop - 15 - ]); - - var circleTopRightY = normalSleepDayHeight + 29; - g.fillPoly([ - middle, circleTop, - middle + 25, circleTop + 5, - middle + 40, circleTop + 16, - middle + 10, circleTop - 5, - middle + 3, circleTop - 10, - middle, circleTop - 15 - ]); + if (HARDWARE_VERSION == 1) { + g.fillPoly([ + middle, circleTop, + middle - 25, circleTop + 5, + middle - 40, circleTop + 16, + middle - 10, circleTop - 5, + middle - 3, circleTop - 10, + middle, circleTop - 15 + ]); + + g.fillPoly([ + middle, circleTop, + middle + 25, circleTop + 5, + middle + 40, circleTop + 16, + middle + 10, circleTop - 5, + middle + 3, circleTop - 10, + middle, circleTop - 15 + ]); + + } } @@ -633,12 +635,11 @@ function printBackground() { g.setColor(watchColor); if (HARDWARE_VERSION == 1) { - g.drawCircle(screenWidth / 2, screenHeight / 2, 55); g.drawCircle(screenWidth / 2, screenHeight / 2, 54); g.drawCircle(screenWidth / 2, screenHeight / 2, 53); - drawClockPointer(); } + drawClockPointer(); } From af06a96bacbfbd210368fc01c2b3e8d0ddd3159f Mon Sep 17 00:00:00 2001 From: Graham Fenner Date: Tue, 7 Nov 2023 03:36:30 +0000 Subject: [PATCH 7/8] typo fix: && || ternary --- apps/setting/settings.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/setting/settings.js b/apps/setting/settings.js index 2a928a7a0..6ecd8c808 100644 --- a/apps/setting/settings.js +++ b/apps/setting/settings.js @@ -922,7 +922,7 @@ function showTouchscreenCalibration() { } showTapSpot(); } - Bangle.prependListener&&Bangle.prependListener('touch',touchHandler)||Bangle.on('touch',touchHandler); + Bangle.prependListener?Bangle.prependListener('touch',touchHandler):Bangle.on('touch',touchHandler); showTapSpot(); } From 670aaf21269913057c5ed680f0cae5d72fb594f0 Mon Sep 17 00:00:00 2001 From: thyttan <6uuxstm66@mozmail.com⁩> Date: Tue, 7 Nov 2023 21:33:15 +0100 Subject: [PATCH 8/8] setting: bump version and ChangeLog After LCD calibration fix. --- 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 1fdeada0d..50ffea933 100644 --- a/apps/setting/ChangeLog +++ b/apps/setting/ChangeLog @@ -73,4 +73,6 @@ of 'Select Clock' Remove 'beta' label from passkey - it's been around for a while and works ok 0.64: Default to wakeOnTwist being off 0.65: Prepend 'LCD->Calibration' touch listener and stop event propagation. +0.66: Fix LCD calibration bug where it would come on again after the + calibration was done. diff --git a/apps/setting/metadata.json b/apps/setting/metadata.json index 4b5a02135..412bad6f6 100644 --- a/apps/setting/metadata.json +++ b/apps/setting/metadata.json @@ -1,7 +1,7 @@ { "id": "setting", "name": "Settings", - "version": "0.65", + "version": "0.66", "description": "A menu for setting up Bangle.js", "icon": "settings.png", "tags": "tool,system",