From 152e9be521e00fae86e49b2911e681deedf6ae55 Mon Sep 17 00:00:00 2001 From: Ben Whittaker Date: Mon, 13 Sep 2021 15:08:28 -0400 Subject: [PATCH] Add shortcuts app --- apps.json | 17 ++++++++++ apps/shortcuts/ChangeLog | 1 + apps/shortcuts/README.md | 7 ++++ apps/shortcuts/app.png | Bin 0 -> 767 bytes apps/shortcuts/boot.js | 16 +++++++++ apps/shortcuts/settings.js | 66 +++++++++++++++++++++++++++++++++++++ 6 files changed, 107 insertions(+) create mode 100644 apps/shortcuts/ChangeLog create mode 100644 apps/shortcuts/README.md create mode 100644 apps/shortcuts/app.png create mode 100644 apps/shortcuts/boot.js create mode 100644 apps/shortcuts/settings.js diff --git a/apps.json b/apps.json index 560d6505b..1d7852250 100644 --- a/apps.json +++ b/apps.json @@ -3442,5 +3442,22 @@ "data": [ {"name":"app.json"} ] +}, +{ "id": "shortcuts", + "name": "Shortcuts", + "shortName":"Shortcuts", + "icon": "app.png", + "version":"0.01", + "description": "Quickly load your favourite apps from (almost) any watch face.", + "tags": "tool", + "type": "bootloader", + "readme": "README.md", + "storage": [ + {"name":"shortcuts.boot.js","url":"boot.js"}, + {"name":"shortcuts.settings.js","url":"settings.js"} + ], + "data": [ + {"name":"shortcuts.json"} + ] } ] diff --git a/apps/shortcuts/ChangeLog b/apps/shortcuts/ChangeLog new file mode 100644 index 000000000..2286a7f70 --- /dev/null +++ b/apps/shortcuts/ChangeLog @@ -0,0 +1 @@ +0.01: New App! \ No newline at end of file diff --git a/apps/shortcuts/README.md b/apps/shortcuts/README.md new file mode 100644 index 000000000..d8965cf15 --- /dev/null +++ b/apps/shortcuts/README.md @@ -0,0 +1,7 @@ +# Shortcuts + +Any installed app can be assigned to BTN1 and BTN3 and launched directly from compatible watch faces. This works with any watch face that uses `Bangle.setUI("clock")`. + +## Credits + +Shortcut icon by Icons8 \ No newline at end of file diff --git a/apps/shortcuts/app.png b/apps/shortcuts/app.png new file mode 100644 index 0000000000000000000000000000000000000000..9bc8b9d3a558fe90b893b151eb86925952a15883 GIT binary patch literal 767 zcmVLVrYm zll%x16Ey~7A~$FPCXx^n5YR>_ZNa1!NNJ$$dVy(D-7Q_uX^~`~yFF+2J@aOEW@l#s z0|Ntt(?n<`o}`p1MZvTJxSQD_6*eIdf9@2o)sm9dU1bGN|AWp0fCmbuwUU|!0C*bE znSaHrm8fOlOmOB6v~UT1eD)HV^+et6Ep2uTOx{7~)gDq^wh`#?ICZrz?CoP|<{h~% zn*m>V1i@HD*FA;3eR5saInWy()@_0c`y_6*iH58~rDCxWvZ}Bf_`0x&)wy|YSxs0C zq?T8)JUhoJc_M5EvRi2^zIqEqQMe@Qg2ljLp@2^>-k@A6ameX{#lX_cEDnC|)@*Yn z;DbMMlcQV}Xm(NSvI3ZxOpr83BEWi<0vM>|FyKY%35RdIiG6rx2&HkqcB2S7Bi^Xw;w9D1V?DH(4zRjE_;I>xN`NQOc@u z?_fX9ShVB`#xAM627c2$bPWz?7qZDTF6caR)JrV`n;`rnaCEW0 xjWwS~?KvP2$FYgiW { + let settings = require("Storage").readJSON("shortcuts.json", 1)||{}; + console.log(settings); + if (dir == -1) { + if (settings.BTN1) load(settings.BTN1); + } else if (dir == 1) { + if (settings.BTN3) load(settings.BTN3); + } + }); + }; +})(); + \ No newline at end of file diff --git a/apps/shortcuts/settings.js b/apps/shortcuts/settings.js new file mode 100644 index 000000000..419b186d6 --- /dev/null +++ b/apps/shortcuts/settings.js @@ -0,0 +1,66 @@ +(function(back) { + const s = require("Storage"); + const apps = s + .list(/\.info$/) + .map(app => { + var a = s.readJSON(app, 1); + return a && (a.type=="app" || a.type=="clock" || !a.type) && {n: a.name, src: a.src}; + }) + .filter(Boolean); + apps.sort((a, b) => { + if (a.n < b.n) return -1; + if (a.n > b.n) return 1; + return 0; + }); + apps.push({n: "NONE", src: null}); + + const settings = s.readJSON("shortcuts.json", 1) || { + BTN1: null, + BTN3: null + }; + + function showApps(btn) { + function format(v) { + return v === settings[btn] ? "*" : ""; + } + + function onchange(v) { + settings[btn] = v; + s.writeJSON("shortcuts.json", settings); + } + + const btnMenu = { + "": { + title: `Apps for ${btn}` + }, + "< Back": () => E.showMenu(mainMenu) + }; + + if (apps.length > 0) { + for (let a of apps) { + btnMenu[a.n] = { + value: a.src, + format: format, + onchange: onchange + }; + } + } else { + btnMenu["...No Apps..."] = { + value: undefined, + format: () => "", + onchange: () => {} + }; + } + + E.showMenu(btnMenu); + } + + const mainMenu = { + "": { title: "Shortcuts Settings" }, + "< Back": back, + "BTN1 app": () => showApps("BTN1"), + "BTN3 app": () => showApps("BTN3") + }; + E.showMenu(mainMenu); +}); + \ No newline at end of file