From 2b7fcd7704704c7eb1abe4a3cf69bf1a21d34306 Mon Sep 17 00:00:00 2001 From: thyttan <6uuxstm66@mozmail.com⁩> Date: Fri, 10 Mar 2023 22:43:18 +0100 Subject: [PATCH 01/28] add global variable qlTrace --- apps/quicklaunch/boot.js | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/apps/quicklaunch/boot.js b/apps/quicklaunch/boot.js index 946a14308..3de270077 100644 --- a/apps/quicklaunch/boot.js +++ b/apps/quicklaunch/boot.js @@ -13,16 +13,15 @@ if (Bangle.CLKINFO_FOCUS) return; let R = Bangle.appRect; if (e.x < R.x || e.x > R.x2 || e.y < R.y || e.y > R.y2 ) return; - if (settings.tapapp.src){ if (settings.tapapp.name == "Show Launcher") Bangle.showLauncher(); else if (!storage.read(settings.tapapp.src)) reset("tapapp"); else load(settings.tapapp.src); } + if (settings.tapapp.src){ qlTrace = [4]; if (settings.tapapp.name == "Show Launcher") Bangle.showLauncher(); else if (!storage.read(settings.tapapp.src)) reset("tapapp"); else load(settings.tapapp.src); } }); Bangle.on("swipe", (lr,ud) => { if (!Bangle.CLOCK) return; if (Bangle.CLKINFO_FOCUS) return; - - if (lr == -1 && settings.leftapp && settings.leftapp.src){ if (settings.leftapp.name == "Show Launcher") Bangle.showLauncher(); else if (!storage.read(settings.leftapp.src)) reset("leftapp"); else load(settings.leftapp.src); } - if (lr == 1 && settings.rightapp && settings.rightapp.src){ if (settings.rightapp.name == "Show Launcher") Bangle.showLauncher(); else if (!storage.read(settings.rightapp.src)) reset("rightapp"); else load(settings.rightapp.src); } - if (ud == -1 && settings.upapp && settings.upapp.src){ if (settings.upapp.name == "Show Launcher") Bangle.showLauncher(); else if (!storage.read(settings.upapp.src)) reset("upapp"); else load(settings.upapp.src); } - if (ud == 1 && settings.downapp && settings.downapp.src){ if (settings.downapp.name == "Show Launcher") Bangle.showLauncher(); else if (!storage.read(settings.downapp.src)) reset("downapp"); else load(settings.downapp.src); } + if (lr == -1 && settings.leftapp && settings.leftapp.src){ qlTrace = [0]; if (settings.leftapp.name == "Show Launcher") Bangle.showLauncher(); else if (!storage.read(settings.leftapp.src)) reset("leftapp"); else load(settings.leftapp.src); } + if (lr == 1 && settings.rightapp && settings.rightapp.src){ qlTrace = [1]; if (settings.rightapp.name == "Show Launcher") Bangle.showLauncher(); else if (!storage.read(settings.rightapp.src)) reset("rightapp"); else load(settings.rightapp.src); } + if (ud == -1 && settings.upapp && settings.upapp.src){ qlTrace = [2]; if (settings.upapp.name == "Show Launcher") Bangle.showLauncher(); else if (!storage.read(settings.upapp.src)) reset("upapp"); else load(settings.upapp.src); } + if (ud == 1 && settings.downapp && settings.downapp.src){ qlTrace = [3]; if (settings.downapp.name == "Show Launcher") Bangle.showLauncher(); else if (!storage.read(settings.downapp.src)) reset("downapp"); else load(settings.downapp.src); } }); } From cc15ff9cfa4cd714d65eb3b759860c48c20ef7e0 Mon Sep 17 00:00:00 2001 From: thyttan <6uuxstm66@mozmail.com⁩> Date: Sat, 11 Mar 2023 01:10:31 +0100 Subject: [PATCH 02/28] start making quicklaunch infinitely extensible --- apps/quicklaunch/app.js | 31 ++++++++++++++++++------------- apps/quicklaunch/boot.js | 16 +++++++++++----- 2 files changed, 29 insertions(+), 18 deletions(-) diff --git a/apps/quicklaunch/app.js b/apps/quicklaunch/app.js index fa7672847..13105f2c4 100644 --- a/apps/quicklaunch/app.js +++ b/apps/quicklaunch/app.js @@ -11,27 +11,30 @@ let touchHandler = (_,e) => { let R = Bangle.appRect; if (e.x < R.x || e.x > R.x2 || e.y < R.y || e.y > R.y2 ) return; - if (settings.exttapapp.src){ if (settings.exttapapp.name == "Show Launcher") Bangle.showLauncher(); else if (!storage.read(settings.exttapapp.src)) reset("exttapapp"); else load(settings.exttapapp.src); } + qlTrace += "tap"; + if (settings[qlTrace+"app"].src){ if (settings[qlTrace+"app"].name == "Show Launcher") Bangle.showLauncher(); else if (!storage.read(settings[qlTrace+"app"].src)) reset(qlTrace+"app"); else load(settings[qlTrace+"app"].src); } }; let swipeHandler = (lr,ud) => { - if (lr == -1 && settings.extleftapp && settings.extleftapp.src){ if (settings.extleftapp.name == "Show Launcher") Bangle.showLauncher(); else if (!storage.read(settings.extleftapp.src)) reset("extleftapp"); else load(settings.extleftapp.src); } - if (lr == 1 && settings.extrightapp && settings.extrightapp.src){ if (settings.extrightapp.name == "Show Launcher") Bangle.showLauncher(); else if (!storage.read(settings.extrightapp.src)) reset("extrightapp"); else load(settings.extrightapp.src); } - if (ud == -1 && settings.extupapp && settings.extupapp.src){ if (settings.extupapp.name == "Show Launcher") Bangle.showLauncher(); else if (!storage.read(settings.extupapp.src)) reset("extupapp"); else load(settings.extupapp.src); } - if (ud == 1 && settings.extdownapp && settings.extdownapp.src){ if (settings.extdownapp.name == "Show Launcher") Bangle.showLauncher(); else if (!storage.read(settings.extdownapp.src)) reset("extdownapp"); else load(settings.extdownapp.src); } + if (lr == -1) qlTrace += "left"; + if (lr == 1) qlTrace += "right"; + if (ud == -1) qlTrace += "up"; + if (ud == 1) qlTrace += "down"; + if (lr == -1 && settings[qlTrace+"app"] && settings[qlTrace+"app"].src){ if (settings[qlTrace+"app"].name == "Show Launcher") Bangle.showLauncher(); else if (!storage.read(settings[qlTrace+"app"].src)) reset(qlTrace+"app"); else load(settings[qlTrace+"app"].src); } + if (lr == 1 && settings[qlTrace+"app"] && settings[qlTrace+"app"].src){ if (settings[qlTrace+"app"].name == "Show Launcher") Bangle.showLauncher(); else if (!storage.read(settings[qlTrace+"app"].src)) reset(qlTrace+"app"); else load(settings[qlTrace+"app"].src); } + if (ud == -1 && settings[qlTrace+"app"] && settings[qlTrace+"app"].src){ if (settings[qlTrace+"app"].name == "Show Launcher") Bangle.showLauncher(); else if (!storage.read(settings[qlTrace+"app"].src)) reset(qlTrace+"app"); else load(settings[qlTrace+"app"].src); } + if (ud == 1 && settings[qlTrace+"app"] && settings[qlTrace+"app"].src){ if (settings[qlTrace+"app"].name == "Show Launcher") Bangle.showLauncher(); else if (!storage.read(settings[qlTrace+"app"].src)) reset(qlTrace+"app"); else load(settings[qlTrace+"app"].src); } }; - let removeUI = ()=>{if (timeoutToClock) clearTimeout(timeoutToClock);} - Bangle.setUI({ mode: "custom", touch: touchHandler, swipe : swipeHandler, - remove: removeUI // Compatability with Fastload Utils. + remove: ()=>{if (timeoutToClock) clearTimeout(timeoutToClock);} // Compatibility with Fastload Utils. }); g.clearRect(Bangle.appRect); - Bangle.loadWidgets(); // Compatability with Fastload Utils. + Bangle.loadWidgets(); // Compatibility with Fastload Utils. // taken from Icon Launcher with some alterations let timeoutToClock; @@ -43,9 +46,11 @@ updateTimeoutToClock(); let R = Bangle.appRect; + + // Draw app hints g.setFont("Vector", 11) - .setFontAlign(0,1,0).drawString(settings.extupapp.name, R.x+R.w/2, R.y2) - .setFontAlign(0,1,1).drawString(settings.extrightapp.name, R.x, R.y+R.h/2) - .setFontAlign(0,-1,0).drawString(settings.extdownapp.name, R.x+R.w/2, R.y) - .setFontAlign(0,1,3).drawString(settings.extleftapp.name, R.x2, R.y+R.h/2); + .setFontAlign(0,1,0).drawString(settings[qlTrace+"app"].name, R.x+R.w/2, R.y2) + .setFontAlign(0,1,1).drawString(settings[qlTrace+"app"].name, R.x, R.y+R.h/2) + .setFontAlign(0,-1,0).drawString(settings[qlTrace+"app"].name, R.x+R.w/2, R.y) + .setFontAlign(0,1,3).drawString(settings[qlTrace+"app"].name, R.x2, R.y+R.h/2); } diff --git a/apps/quicklaunch/boot.js b/apps/quicklaunch/boot.js index 3de270077..10848a457 100644 --- a/apps/quicklaunch/boot.js +++ b/apps/quicklaunch/boot.js @@ -1,4 +1,5 @@ { + // TODO: Change the settings object and settings.js to match qlTrace. const storage = require("Storage"); let settings = storage.readJSON("quicklaunch.json", true) || {}; @@ -13,15 +14,20 @@ if (Bangle.CLKINFO_FOCUS) return; let R = Bangle.appRect; if (e.x < R.x || e.x > R.x2 || e.y < R.y || e.y > R.y2 ) return; - if (settings.tapapp.src){ qlTrace = [4]; if (settings.tapapp.name == "Show Launcher") Bangle.showLauncher(); else if (!storage.read(settings.tapapp.src)) reset("tapapp"); else load(settings.tapapp.src); } + qlTrace = "tap"; + if (settings.tapapp.src){ if (settings[qlTrace+"app"].name == "Show Launcher") Bangle.showLauncher(); else if (!storage.read(settings[qlTrace+"app"].src)) reset(qlTrace+"app"); else load(settings[qlTrace+"app"].src); } }); Bangle.on("swipe", (lr,ud) => { if (!Bangle.CLOCK) return; if (Bangle.CLKINFO_FOCUS) return; - if (lr == -1 && settings.leftapp && settings.leftapp.src){ qlTrace = [0]; if (settings.leftapp.name == "Show Launcher") Bangle.showLauncher(); else if (!storage.read(settings.leftapp.src)) reset("leftapp"); else load(settings.leftapp.src); } - if (lr == 1 && settings.rightapp && settings.rightapp.src){ qlTrace = [1]; if (settings.rightapp.name == "Show Launcher") Bangle.showLauncher(); else if (!storage.read(settings.rightapp.src)) reset("rightapp"); else load(settings.rightapp.src); } - if (ud == -1 && settings.upapp && settings.upapp.src){ qlTrace = [2]; if (settings.upapp.name == "Show Launcher") Bangle.showLauncher(); else if (!storage.read(settings.upapp.src)) reset("upapp"); else load(settings.upapp.src); } - if (ud == 1 && settings.downapp && settings.downapp.src){ qlTrace = [3]; if (settings.downapp.name == "Show Launcher") Bangle.showLauncher(); else if (!storage.read(settings.downapp.src)) reset("downapp"); else load(settings.downapp.src); } + if (lr == -1) qlTrace = "left"; + if (lr == 1) qlTrace = "right"; + if (ud == -1) qlTrace = "up"; + if (ud == 1) qlTrace = "down"; + if (lr == -1 && settings[qlTrace+"app"] && settings[qlTrace+"app"].src){ if (settings[qlTrace+"app"].name == "Show Launcher") Bangle.showLauncher(); else if (!storage.read(settings[qlTrace+"app"].src)) reset(qlTrace+"app"); else load(settings[qlTrace+"app"].src); } + if (lr == 1 && settings[qlTrace+"app"] && settings[qlTrace+"app"].src){ if (settings[qlTrace+"app"].name == "Show Launcher") Bangle.showLauncher(); else if (!storage.read(settings[qlTrace+"app"].src)) reset(qlTrace+"app"); else load(settings[qlTrace+"app"].src); } + if (ud == -1 && settings[qlTrace+"app"] && settings[qlTrace+"app"].src){ if (settings[qlTrace+"app"].name == "Show Launcher") Bangle.showLauncher(); else if (!storage.read(settings[qlTrace+"app"].src)) reset(qlTrace+"app"); else load(settings[qlTrace+"app"].src); } + if (ud == 1 && settings[qlTrace+"app"] && settings[qlTrace+"app"].src){ if (settings[qlTrace+"app"].name == "Show Launcher") Bangle.showLauncher(); else if (!storage.read(settings[qlTrace+"app"].src)) reset(qlTrace+"app"); else load(settings[qlTrace+"app"].src); } }); } From 068e68780cb0c9093cf59c47697a318b64697346 Mon Sep 17 00:00:00 2001 From: thyttan <6uuxstm66@mozmail.com⁩> Date: Sat, 11 Mar 2023 01:18:28 +0100 Subject: [PATCH 03/28] bump version --- apps/quicklaunch/ChangeLog | 1 + apps/quicklaunch/metadata.json | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/apps/quicklaunch/ChangeLog b/apps/quicklaunch/ChangeLog index b5a85b770..4de189ab1 100644 --- a/apps/quicklaunch/ChangeLog +++ b/apps/quicklaunch/ChangeLog @@ -10,3 +10,4 @@ 0.10: Extend the functionality via a quicklaunch.app.js file that can be launched with quicklaunch itself. 0.11: Add hints to the extension app. Tweak remove function. +0.12: Stackable extension screens. diff --git a/apps/quicklaunch/metadata.json b/apps/quicklaunch/metadata.json index 8948c7f03..a74d7c65f 100644 --- a/apps/quicklaunch/metadata.json +++ b/apps/quicklaunch/metadata.json @@ -2,7 +2,7 @@ "id": "quicklaunch", "name": "Quick Launch", "icon": "app.png", - "version": "0.11", + "version": "0.12", "description": "Tap or swipe left/right/up/down on your clock face to launch up to five apps of your choice. Configurations can be accessed through Settings->Apps.", "type": "bootloader", "tags": "tools, system", From bb2a7f2e8a7000b107bb784f087170bcf8a0a279 Mon Sep 17 00:00:00 2001 From: thyttan <6uuxstm66@mozmail.com⁩> Date: Sat, 11 Mar 2023 18:57:00 +0100 Subject: [PATCH 04/28] convert settings for stackable extension screens --- apps/quicklaunch/settings.js | 237 +++++++---------------------------- 1 file changed, 45 insertions(+), 192 deletions(-) diff --git a/apps/quicklaunch/settings.js b/apps/quicklaunch/settings.js index 39c2a13d6..589dce6f3 100644 --- a/apps/quicklaunch/settings.js +++ b/apps/quicklaunch/settings.js @@ -2,7 +2,7 @@ var storage = require("Storage"); var settings = Object.assign(storage.readJSON("quicklaunch.json", true) || {}); -for (let c of ["leftapp","rightapp","upapp","downapp","tapapp","extleftapp","extrightapp","extupapp","extdownapp","exttapapp"]){ +for (let c of ["lapp","rapp","uapp","dapp","tapp"]){ // l=left, r=right, u=up, d=down, t=tap. if (!settings[c]) settings[c] = {"name":"(none)"}; } @@ -17,12 +17,13 @@ apps.push({ }); // Add the Quick Launch extension app -apps.push({ +let extension = { "name": "Quick Launch Extension", "type": "app", "sortorder": -11, "src": "quicklaunch.app.js" - }); + } +apps.push(extension); apps.sort((a,b)=>{ var n=(0|a.sortorder)-(0|b.sortorder); @@ -32,7 +33,28 @@ apps.sort((a,b)=>{ return 0; }); +function findPath(key) { + let path = key.substring(0, key.lenght-3); + return path; +} + function save(key, value) { + let path = findPath(key); + // If changing from extension app (to something else) remove downstream settings entries. + if (settings[key].name == extension.name && value.name != extension.name) { + for (let c of [path+"lapp", path+"rapp", path+"uapp", path+"dapp", path+"tapapp"]) { + delete settings[c]; + } + } + + // If changing to extension app (from something else) add downstream settings entries. + if (value.name == "Quick Launch Extension" && settings[key].name != extension.name) { + for (let c of [path+"lapp", path+"rapp", path+"uapp", path+"dapp", path+"tapp"]) { + settings[c] = {"name":"(none)"}; + } + } + + // Now change the setting on the current level in the path. settings[key] = value; storage.write("quicklaunch.json",settings); } @@ -45,202 +67,33 @@ function showMainMenu() { }; //List all selected apps - mainmenu["Left: "+settings.leftapp.name] = function() { E.showMenu(leftmenu); }; - mainmenu["Right: "+settings.rightapp.name] = function() { E.showMenu(rightmenu); }; - mainmenu["Up: "+settings.upapp.name] = function() { E.showMenu(upmenu); }; - mainmenu["Down: "+settings.downapp.name] = function() { E.showMenu(downmenu); }; - mainmenu["Tap: "+settings.tapapp.name] = function() { E.showMenu(tapmenu); }; - mainmenu["Extend Quick Launch"] = showExtMenu; + for (let key of settings.keys()) { + mainmenu[key+ ": "+settings[key].name] = function() {showSubMenu(key);}; + } return E.showMenu(mainmenu); } -//Left swipe menu -var leftmenu = { - "" : { "title" : "Left Swipe" }, - "< Back" : showMainMenu -}; - -leftmenu["(none)"] = function() { - save("leftapp", {"name":"(none)"}); - showMainMenu(); -}; -apps.forEach((a)=>{ - leftmenu[a.name] = function() { - save("leftapp", a); - showMainMenu(); - }; -}); - -//Right swipe menu -var rightmenu = { - "" : { "title" : "Right Swipe" }, - "< Back" : showMainMenu -}; - -rightmenu["(none)"] = function() { - save("rightapp", {"name":"(none)"}); - showMainMenu(); -}; -apps.forEach((a)=>{ - rightmenu[a.name] = function() { - save("rightapp", a); - showMainMenu(); - }; -}); - -//Up swipe menu -var upmenu = { - "" : { "title" : "Up Swipe" }, - "< Back" : showMainMenu -}; - -upmenu["(none)"] = function() { - save("upapp", {"name":"(none)"}); - showMainMenu(); -}; -apps.forEach((a)=>{ - upmenu[a.name] = function() { - save("upapp", a); - showMainMenu(); - }; -}); - -//Down swipe menu -var downmenu = { - "" : { "title" : "Down Swipe" }, - "< Back" : showMainMenu -}; - -downmenu["(none)"] = function() { - save("downapp", {"name":"(none)"}); - showMainMenu(); -}; -apps.forEach((a)=>{ - downmenu[a.name] = function() { - save("downapp", a); - showMainMenu(); - }; -}); - -//Tap menu -var tapmenu = { - "" : { "title" : "Tap" }, - "< Back" : showMainMenu -}; - -tapmenu["(none)"] = function() { - save("tapapp", {"name":"(none)"}); - showMainMenu(); -}; -apps.forEach((a)=>{ - tapmenu[a.name] = function() { - save("tapapp", a); - showMainMenu(); - }; -}); - -function showExtMenu() { - // Extend Quick Launch menu - var extmenu = { - "" : { "title" : "Extend Quick Launch" }, - "< Back" : ()=>{showMainMenu();} +function showSubMenu(key) { + //Left swipe menu + var submenu = { + "" : { "title" : "path: "+findPath(key)}, + "< Back" : showMainMenu }; + + submenu["(none)"] = function() { + save(key, {"name":"(none)"}); + showMainMenu(); + }; + apps.forEach((a)=>{ + submenu[a.name] = function() { + save(key, a); + showMainMenu(); + }; + }); - //List all selected apps - extmenu["Left: "+settings.extleftapp.name] = function() { E.showMenu(extleftmenu); }; - extmenu["Right: "+settings.extrightapp.name] = function() { E.showMenu(extrightmenu); }; - extmenu["Up: "+settings.extupapp.name] = function() { E.showMenu(extupmenu); }; - extmenu["Down: "+settings.extdownapp.name] = function() { E.showMenu(extdownmenu); }; - extmenu["Tap: "+settings.exttapapp.name] = function() { E.showMenu(exttapmenu); }; - - return E.showMenu(extmenu); + return E.showMenu(submenu); } -//Extension Left swipe menu -var extleftmenu = { - "" : { "title" : "Extension Left Swipe" }, - "< Back" : showExtMenu -}; - -extleftmenu["(none)"] = function() { - save("extleftapp", {"name":"(none)"}); - showExtMenu(); -}; -apps.forEach((a)=>{ - extleftmenu[a.name] = function() { - save("extleftapp", a); - showExtMenu(); - }; -}); - -//Extension Right swipe menu -var extrightmenu = { - "" : { "title" : "Extension Right Swipe" }, - "< Back" : showExtMenu -}; - -extrightmenu["(none)"] = function() { - save("extrightapp", {"name":"(none)"}); - showExtMenu(); -}; -apps.forEach((a)=>{ - extrightmenu[a.name] = function() { - save("extrightapp", a); - showExtMenu(); - }; -}); - -//Extension Up swipe menu -var extupmenu = { - "" : { "title" : "Extension Up Swipe" }, - "< Back" : showExtMenu -}; - -extupmenu["(none)"] = function() { - save("extupapp", {"name":"(none)"}); - showExtMenu(); -}; -apps.forEach((a)=>{ - extupmenu[a.name] = function() { - save("extupapp", a); - showExtMenu(); - }; -}); - -//Extension Down swipe menu -var extdownmenu = { - "" : { "title" : "Extension Down Swipe" }, - "< Back" : showExtMenu -}; - -downmenu["(none)"] = function() { - save("extdownapp", {"name":"(none)"}); - showExtMenu(); -}; -apps.forEach((a)=>{ - extdownmenu[a.name] = function() { - save("extdownapp", a); - showExtMenu(); - }; -}); - -//Extension Tap menu -var exttapmenu = { - "" : { "title" : "Extension Tap" }, - "< Back" : showExtMenu -}; - -exttapmenu["(none)"] = function() { - save("exttapapp", {"name":"(none)"}); - showExtMenu(); -}; -apps.forEach((a)=>{ - exttapmenu[a.name] = function() { - save("exttapapp", a); - showExtMenu(); - }; -}); - showMainMenu(); }) From 4b2b9c722b924479faad8d5b95464646f684db39 Mon Sep 17 00:00:00 2001 From: thyttan <6uuxstm66@mozmail.com⁩> Date: Sat, 11 Mar 2023 19:36:33 +0100 Subject: [PATCH 05/28] tweak app.js and boot.js to match settings.js --- apps/quicklaunch/app.js | 12 +++++++----- apps/quicklaunch/boot.js | 15 ++++++++------- 2 files changed, 15 insertions(+), 12 deletions(-) diff --git a/apps/quicklaunch/app.js b/apps/quicklaunch/app.js index 13105f2c4..e63e5d049 100644 --- a/apps/quicklaunch/app.js +++ b/apps/quicklaunch/app.js @@ -8,18 +8,20 @@ storage.write("quicklaunch.json", settings); }; + // l=left, r=right, u=up, d=down, t=tap. + let touchHandler = (_,e) => { let R = Bangle.appRect; if (e.x < R.x || e.x > R.x2 || e.y < R.y || e.y > R.y2 ) return; - qlTrace += "tap"; + qlTrace += "t"; if (settings[qlTrace+"app"].src){ if (settings[qlTrace+"app"].name == "Show Launcher") Bangle.showLauncher(); else if (!storage.read(settings[qlTrace+"app"].src)) reset(qlTrace+"app"); else load(settings[qlTrace+"app"].src); } }; let swipeHandler = (lr,ud) => { - if (lr == -1) qlTrace += "left"; - if (lr == 1) qlTrace += "right"; - if (ud == -1) qlTrace += "up"; - if (ud == 1) qlTrace += "down"; + if (lr == -1) qlTrace += "l"; // l=left, + if (lr == 1) qlTrace += "r"; // r=right, + if (ud == -1) qlTrace += "u"; // u=up, + if (ud == 1) qlTrace += "d"; // d=down. if (lr == -1 && settings[qlTrace+"app"] && settings[qlTrace+"app"].src){ if (settings[qlTrace+"app"].name == "Show Launcher") Bangle.showLauncher(); else if (!storage.read(settings[qlTrace+"app"].src)) reset(qlTrace+"app"); else load(settings[qlTrace+"app"].src); } if (lr == 1 && settings[qlTrace+"app"] && settings[qlTrace+"app"].src){ if (settings[qlTrace+"app"].name == "Show Launcher") Bangle.showLauncher(); else if (!storage.read(settings[qlTrace+"app"].src)) reset(qlTrace+"app"); else load(settings[qlTrace+"app"].src); } if (ud == -1 && settings[qlTrace+"app"] && settings[qlTrace+"app"].src){ if (settings[qlTrace+"app"].name == "Show Launcher") Bangle.showLauncher(); else if (!storage.read(settings[qlTrace+"app"].src)) reset(qlTrace+"app"); else load(settings[qlTrace+"app"].src); } diff --git a/apps/quicklaunch/boot.js b/apps/quicklaunch/boot.js index 10848a457..f9a9cad97 100644 --- a/apps/quicklaunch/boot.js +++ b/apps/quicklaunch/boot.js @@ -14,17 +14,18 @@ if (Bangle.CLKINFO_FOCUS) return; let R = Bangle.appRect; if (e.x < R.x || e.x > R.x2 || e.y < R.y || e.y > R.y2 ) return; - qlTrace = "tap"; - if (settings.tapapp.src){ if (settings[qlTrace+"app"].name == "Show Launcher") Bangle.showLauncher(); else if (!storage.read(settings[qlTrace+"app"].src)) reset(qlTrace+"app"); else load(settings[qlTrace+"app"].src); } + qlTrace = "t"; // t=tap + if (settings[qlTrace].src){ if (settings[qlTrace+"app"].name == "Show Launcher") Bangle.showLauncher(); else if (!storage.read(settings[qlTrace+"app"].src)) reset(qlTrace+"app"); else load(settings[qlTrace+"app"].src); } }); - + + Bangle.on("swipe", (lr,ud) => { if (!Bangle.CLOCK) return; if (Bangle.CLKINFO_FOCUS) return; - if (lr == -1) qlTrace = "left"; - if (lr == 1) qlTrace = "right"; - if (ud == -1) qlTrace = "up"; - if (ud == 1) qlTrace = "down"; + if (lr == -1) qlTrace = "l"; // l=left, + if (lr == 1) qlTrace = "r"; // r=right, + if (ud == -1) qlTrace = "u"; // u=up, + if (ud == 1) qlTrace = "d"; // d=down. if (lr == -1 && settings[qlTrace+"app"] && settings[qlTrace+"app"].src){ if (settings[qlTrace+"app"].name == "Show Launcher") Bangle.showLauncher(); else if (!storage.read(settings[qlTrace+"app"].src)) reset(qlTrace+"app"); else load(settings[qlTrace+"app"].src); } if (lr == 1 && settings[qlTrace+"app"] && settings[qlTrace+"app"].src){ if (settings[qlTrace+"app"].name == "Show Launcher") Bangle.showLauncher(); else if (!storage.read(settings[qlTrace+"app"].src)) reset(qlTrace+"app"); else load(settings[qlTrace+"app"].src); } if (ud == -1 && settings[qlTrace+"app"] && settings[qlTrace+"app"].src){ if (settings[qlTrace+"app"].name == "Show Launcher") Bangle.showLauncher(); else if (!storage.read(settings[qlTrace+"app"].src)) reset(qlTrace+"app"); else load(settings[qlTrace+"app"].src); } From 2268b438e7a82f2fa86ef2ee669ae8564a66ea64 Mon Sep 17 00:00:00 2001 From: thyttan <6uuxstm66@mozmail.com⁩> Date: Sat, 11 Mar 2023 22:48:59 +0100 Subject: [PATCH 06/28] fixes, now functional together with fastload utils --- apps/quicklaunch/app.js | 10 ++++------ apps/quicklaunch/boot.js | 1 - apps/quicklaunch/settings.js | 21 ++++++++++----------- 3 files changed, 14 insertions(+), 18 deletions(-) diff --git a/apps/quicklaunch/app.js b/apps/quicklaunch/app.js index e63e5d049..035e787cf 100644 --- a/apps/quicklaunch/app.js +++ b/apps/quicklaunch/app.js @@ -8,8 +8,6 @@ storage.write("quicklaunch.json", settings); }; - // l=left, r=right, u=up, d=down, t=tap. - let touchHandler = (_,e) => { let R = Bangle.appRect; if (e.x < R.x || e.x > R.x2 || e.y < R.y || e.y > R.y2 ) return; @@ -51,8 +49,8 @@ // Draw app hints g.setFont("Vector", 11) - .setFontAlign(0,1,0).drawString(settings[qlTrace+"app"].name, R.x+R.w/2, R.y2) - .setFontAlign(0,1,1).drawString(settings[qlTrace+"app"].name, R.x, R.y+R.h/2) - .setFontAlign(0,-1,0).drawString(settings[qlTrace+"app"].name, R.x+R.w/2, R.y) - .setFontAlign(0,1,3).drawString(settings[qlTrace+"app"].name, R.x2, R.y+R.h/2); + .setFontAlign(0,1,3).drawString(settings[qlTrace+"lapp"].name, R.x2, R.y+R.h/2) + .setFontAlign(0,1,1).drawString(settings[qlTrace+"rapp"].name, R.x, R.y+R.h/2) + .setFontAlign(0,1,0).drawString(settings[qlTrace+"uapp"].name, R.x+R.w/2, R.y2) + .setFontAlign(0,-1,0).drawString(settings[qlTrace+"dapp"].name, R.x+R.w/2, R.y); } diff --git a/apps/quicklaunch/boot.js b/apps/quicklaunch/boot.js index f9a9cad97..77288fe85 100644 --- a/apps/quicklaunch/boot.js +++ b/apps/quicklaunch/boot.js @@ -1,5 +1,4 @@ { - // TODO: Change the settings object and settings.js to match qlTrace. const storage = require("Storage"); let settings = storage.readJSON("quicklaunch.json", true) || {}; diff --git a/apps/quicklaunch/settings.js b/apps/quicklaunch/settings.js index 589dce6f3..517bbee22 100644 --- a/apps/quicklaunch/settings.js +++ b/apps/quicklaunch/settings.js @@ -22,7 +22,7 @@ let extension = { "type": "app", "sortorder": -11, "src": "quicklaunch.app.js" - } + }; apps.push(extension); apps.sort((a,b)=>{ @@ -33,16 +33,13 @@ apps.sort((a,b)=>{ return 0; }); -function findPath(key) { - let path = key.substring(0, key.lenght-3); - return path; -} +function findPath(key) {return key.substring(0, key.length-3);} function save(key, value) { let path = findPath(key); // If changing from extension app (to something else) remove downstream settings entries. if (settings[key].name == extension.name && value.name != extension.name) { - for (let c of [path+"lapp", path+"rapp", path+"uapp", path+"dapp", path+"tapapp"]) { + for (let c of [path+"lapp", path+"rapp", path+"uapp", path+"dapp", path+"tapp"]) { delete settings[c]; } } @@ -51,6 +48,7 @@ function save(key, value) { if (value.name == "Quick Launch Extension" && settings[key].name != extension.name) { for (let c of [path+"lapp", path+"rapp", path+"uapp", path+"dapp", path+"tapp"]) { settings[c] = {"name":"(none)"}; + storage.write("quicklaunch.json",settings); } } @@ -67,17 +65,18 @@ function showMainMenu() { }; //List all selected apps - for (let key of settings.keys()) { - mainmenu[key+ ": "+settings[key].name] = function() {showSubMenu(key);}; - } + for (let key of Object.keys(settings)) { + let keyCurrent = key; + mainmenu[key+ ": "+settings[key].name] = function() {showSubMenu(keyCurrent);}; + } return E.showMenu(mainmenu); } function showSubMenu(key) { - //Left swipe menu + let path = findPath(key); var submenu = { - "" : { "title" : "path: "+findPath(key)}, + "" : { "title" : "path: "+path}, "< Back" : showMainMenu }; From 4940bcb834ab536954153913d7e6fd42549bd95b Mon Sep 17 00:00:00 2001 From: thyttan <6uuxstm66@mozmail.com⁩> Date: Sun, 12 Mar 2023 01:11:07 +0100 Subject: [PATCH 07/28] fix to work without fastload utils. tweaks to settings page. --- apps/quicklaunch/app.js | 37 ++++++++++++++++++++++-------------- apps/quicklaunch/boot.js | 31 ++++++++++++++++++------------ apps/quicklaunch/settings.js | 15 +++++++++++---- 3 files changed, 53 insertions(+), 30 deletions(-) diff --git a/apps/quicklaunch/app.js b/apps/quicklaunch/app.js index 035e787cf..5c92c6d34 100644 --- a/apps/quicklaunch/app.js +++ b/apps/quicklaunch/app.js @@ -8,22 +8,30 @@ storage.write("quicklaunch.json", settings); }; + let leaveTrace = function(trace) { + settings.trace = trace; + storage.writeJSON("quicklaunch.json", settings); + return trace; + }; + + let trace = settings.trace; + let touchHandler = (_,e) => { let R = Bangle.appRect; if (e.x < R.x || e.x > R.x2 || e.y < R.y || e.y > R.y2 ) return; - qlTrace += "t"; - if (settings[qlTrace+"app"].src){ if (settings[qlTrace+"app"].name == "Show Launcher") Bangle.showLauncher(); else if (!storage.read(settings[qlTrace+"app"].src)) reset(qlTrace+"app"); else load(settings[qlTrace+"app"].src); } + trace = leaveTrace(trace+"t"); + if (settings[trace+"app"].src){ if (settings[trace+"app"].name == "Show Launcher") Bangle.showLauncher(); else if (!storage.read(settings[trace+"app"].src)) reset(trace+"app"); else load(settings[trace+"app"].src); } }; let swipeHandler = (lr,ud) => { - if (lr == -1) qlTrace += "l"; // l=left, - if (lr == 1) qlTrace += "r"; // r=right, - if (ud == -1) qlTrace += "u"; // u=up, - if (ud == 1) qlTrace += "d"; // d=down. - if (lr == -1 && settings[qlTrace+"app"] && settings[qlTrace+"app"].src){ if (settings[qlTrace+"app"].name == "Show Launcher") Bangle.showLauncher(); else if (!storage.read(settings[qlTrace+"app"].src)) reset(qlTrace+"app"); else load(settings[qlTrace+"app"].src); } - if (lr == 1 && settings[qlTrace+"app"] && settings[qlTrace+"app"].src){ if (settings[qlTrace+"app"].name == "Show Launcher") Bangle.showLauncher(); else if (!storage.read(settings[qlTrace+"app"].src)) reset(qlTrace+"app"); else load(settings[qlTrace+"app"].src); } - if (ud == -1 && settings[qlTrace+"app"] && settings[qlTrace+"app"].src){ if (settings[qlTrace+"app"].name == "Show Launcher") Bangle.showLauncher(); else if (!storage.read(settings[qlTrace+"app"].src)) reset(qlTrace+"app"); else load(settings[qlTrace+"app"].src); } - if (ud == 1 && settings[qlTrace+"app"] && settings[qlTrace+"app"].src){ if (settings[qlTrace+"app"].name == "Show Launcher") Bangle.showLauncher(); else if (!storage.read(settings[qlTrace+"app"].src)) reset(qlTrace+"app"); else load(settings[qlTrace+"app"].src); } + if (lr == -1) trace = leaveTrace(trace+"l"); // l=left, + if (lr == 1) trace = leaveTrace(trace+"r"); // r=right, + if (ud == -1) trace = leaveTrace(trace+"u"); // u=up, + if (ud == 1) trace = leaveTrace(trace+"d"); // d=down. + if (lr == -1 && settings[trace+"app"] && settings[trace+"app"].src){ if (settings[trace+"app"].name == "Show Launcher") Bangle.showLauncher(); else if (!storage.read(settings[trace+"app"].src)) reset(trace+"app"); else load(settings[trace+"app"].src); } + if (lr == 1 && settings[trace+"app"] && settings[trace+"app"].src){ if (settings[trace+"app"].name == "Show Launcher") Bangle.showLauncher(); else if (!storage.read(settings[trace+"app"].src)) reset(trace+"app"); else load(settings[trace+"app"].src); } + if (ud == -1 && settings[trace+"app"] && settings[trace+"app"].src){ if (settings[trace+"app"].name == "Show Launcher") Bangle.showLauncher(); else if (!storage.read(settings[trace+"app"].src)) reset(trace+"app"); else load(settings[trace+"app"].src); } + if (ud == 1 && settings[trace+"app"] && settings[trace+"app"].src){ if (settings[trace+"app"].name == "Show Launcher") Bangle.showLauncher(); else if (!storage.read(settings[trace+"app"].src)) reset(trace+"app"); else load(settings[trace+"app"].src); } }; Bangle.setUI({ @@ -49,8 +57,9 @@ // Draw app hints g.setFont("Vector", 11) - .setFontAlign(0,1,3).drawString(settings[qlTrace+"lapp"].name, R.x2, R.y+R.h/2) - .setFontAlign(0,1,1).drawString(settings[qlTrace+"rapp"].name, R.x, R.y+R.h/2) - .setFontAlign(0,1,0).drawString(settings[qlTrace+"uapp"].name, R.x+R.w/2, R.y2) - .setFontAlign(0,-1,0).drawString(settings[qlTrace+"dapp"].name, R.x+R.w/2, R.y); + .setFontAlign(0,1,3).drawString(settings[trace+"lapp"].name, R.x2, R.y+R.h/2) + .setFontAlign(0,1,1).drawString(settings[trace+"rapp"].name, R.x, R.y+R.h/2) + .setFontAlign(0,1,0).drawString(settings[trace+"uapp"].name, R.x+R.w/2, R.y2) + .setFontAlign(0,-1,0).drawString(settings[trace+"dapp"].name, R.x+R.w/2, R.y) + .setFontAlign(0,0,0).drawString(settings[trace+"tapp"].name, R.x+R.w/2, R.y+R.h/2); } diff --git a/apps/quicklaunch/boot.js b/apps/quicklaunch/boot.js index 77288fe85..b1dc59884 100644 --- a/apps/quicklaunch/boot.js +++ b/apps/quicklaunch/boot.js @@ -8,26 +8,33 @@ storage.write("quicklaunch.json", settings); }; + let leaveTrace = function(trace) { + settings.trace = trace; + storage.writeJSON("quicklaunch.json", settings); + return trace; + }; + + let trace; + Bangle.on("touch", (_,e) => { if (!Bangle.CLOCK) return; if (Bangle.CLKINFO_FOCUS) return; let R = Bangle.appRect; if (e.x < R.x || e.x > R.x2 || e.y < R.y || e.y > R.y2 ) return; - qlTrace = "t"; // t=tap - if (settings[qlTrace].src){ if (settings[qlTrace+"app"].name == "Show Launcher") Bangle.showLauncher(); else if (!storage.read(settings[qlTrace+"app"].src)) reset(qlTrace+"app"); else load(settings[qlTrace+"app"].src); } + trace = leaveTrace("t"); // t=tap + if (settings[trace].src){ if (settings[trace+"app"].name == "Show Launcher") Bangle.showLauncher(); else if (!storage.read(settings[trace+"app"].src)) reset(trace+"app"); else load(settings[trace+"app"].src); } }); - - + Bangle.on("swipe", (lr,ud) => { if (!Bangle.CLOCK) return; if (Bangle.CLKINFO_FOCUS) return; - if (lr == -1) qlTrace = "l"; // l=left, - if (lr == 1) qlTrace = "r"; // r=right, - if (ud == -1) qlTrace = "u"; // u=up, - if (ud == 1) qlTrace = "d"; // d=down. - if (lr == -1 && settings[qlTrace+"app"] && settings[qlTrace+"app"].src){ if (settings[qlTrace+"app"].name == "Show Launcher") Bangle.showLauncher(); else if (!storage.read(settings[qlTrace+"app"].src)) reset(qlTrace+"app"); else load(settings[qlTrace+"app"].src); } - if (lr == 1 && settings[qlTrace+"app"] && settings[qlTrace+"app"].src){ if (settings[qlTrace+"app"].name == "Show Launcher") Bangle.showLauncher(); else if (!storage.read(settings[qlTrace+"app"].src)) reset(qlTrace+"app"); else load(settings[qlTrace+"app"].src); } - if (ud == -1 && settings[qlTrace+"app"] && settings[qlTrace+"app"].src){ if (settings[qlTrace+"app"].name == "Show Launcher") Bangle.showLauncher(); else if (!storage.read(settings[qlTrace+"app"].src)) reset(qlTrace+"app"); else load(settings[qlTrace+"app"].src); } - if (ud == 1 && settings[qlTrace+"app"] && settings[qlTrace+"app"].src){ if (settings[qlTrace+"app"].name == "Show Launcher") Bangle.showLauncher(); else if (!storage.read(settings[qlTrace+"app"].src)) reset(qlTrace+"app"); else load(settings[qlTrace+"app"].src); } + if (lr == -1) trace = leaveTrace("l"); // l=left, + if (lr == 1) trace = leaveTrace("r"); // r=right, + if (ud == -1) trace = leaveTrace("u"); // u=up, + if (ud == 1) trace = leaveTrace("d"); // d=down. + if (lr == -1 && settings[trace+"app"] && settings[trace+"app"].src){ if (settings[trace+"app"].name == "Show Launcher") Bangle.showLauncher(); else if (!storage.read(settings[trace+"app"].src)) reset(trace+"app"); else load(settings[trace+"app"].src); } + if (lr == 1 && settings[trace+"app"] && settings[trace+"app"].src){ if (settings[trace+"app"].name == "Show Launcher") Bangle.showLauncher(); else if (!storage.read(settings[trace+"app"].src)) reset(trace+"app"); else load(settings[trace+"app"].src); } + if (ud == -1 && settings[trace+"app"] && settings[trace+"app"].src){ if (settings[trace+"app"].name == "Show Launcher") Bangle.showLauncher(); else if (!storage.read(settings[trace+"app"].src)) reset(trace+"app"); else load(settings[trace+"app"].src); } + if (ud == 1 && settings[trace+"app"] && settings[trace+"app"].src){ if (settings[trace+"app"].name == "Show Launcher") Bangle.showLauncher(); else if (!storage.read(settings[trace+"app"].src)) reset(trace+"app"); else load(settings[trace+"app"].src); } }); } diff --git a/apps/quicklaunch/settings.js b/apps/quicklaunch/settings.js index 517bbee22..fb80fae31 100644 --- a/apps/quicklaunch/settings.js +++ b/apps/quicklaunch/settings.js @@ -18,7 +18,7 @@ apps.push({ // Add the Quick Launch extension app let extension = { - "name": "Quick Launch Extension", + "name": "Extension", "type": "app", "sortorder": -11, "src": "quicklaunch.app.js" @@ -45,7 +45,7 @@ function save(key, value) { } // If changing to extension app (from something else) add downstream settings entries. - if (value.name == "Quick Launch Extension" && settings[key].name != extension.name) { + if (value.name == extension.name && settings[key].name != extension.name) { for (let c of [path+"lapp", path+"rapp", path+"uapp", path+"dapp", path+"tapp"]) { settings[c] = {"name":"(none)"}; storage.write("quicklaunch.json",settings); @@ -54,7 +54,7 @@ function save(key, value) { // Now change the setting on the current level in the path. settings[key] = value; - storage.write("quicklaunch.json",settings); + storage.writeJSON("quicklaunch.json",settings); } function showMainMenu() { @@ -66,8 +66,15 @@ function showMainMenu() { //List all selected apps for (let key of Object.keys(settings)) { + if (key == "trace") continue; let keyCurrent = key; - mainmenu[key+ ": "+settings[key].name] = function() {showSubMenu(keyCurrent);}; + let entry = findPath(key).toUpperCase(); + if (entry=="L") entry = "Left"; + if (entry=="R") entry = "Right"; + if (entry=="U") entry = "Up"; + if (entry=="D") entry = "Down"; + if (entry=="T") entry = "Tap"; + mainmenu[entry+ ": "+settings[key].name] = function() {showSubMenu(keyCurrent);}; } return E.showMenu(mainmenu); From 1b85a2bfcad789b520a1f593f51afa21691aa783 Mon Sep 17 00:00:00 2001 From: thyttan <6uuxstm66@mozmail.com⁩> Date: Sun, 12 Mar 2023 01:39:28 +0100 Subject: [PATCH 08/28] convert old quicklaunch.json key names to the new ones. --- apps/quicklaunch/settings.js | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/apps/quicklaunch/settings.js b/apps/quicklaunch/settings.js index fb80fae31..10ef98584 100644 --- a/apps/quicklaunch/settings.js +++ b/apps/quicklaunch/settings.js @@ -2,6 +2,19 @@ var storage = require("Storage"); var settings = Object.assign(storage.readJSON("quicklaunch.json", true) || {}); +// Convert settings object from before v.0.12 +for (let c of ["leftapp","rightapp","upapp","downapp","tapapp"]){ + if (settings[c]) { + if (settings[c].name=="Quick Launch Extension") settings[c].name = "Extension"; + settings[c.substring(0,1)+"app"] = settings[c]; + delete settings[c]; + } +} +for (let c of ["extleftapp","extrightapp","extupapp","extdownapp","exttapapp"]){ + if (settings[c]) delete settings[c]; +} + +// Add default settings if they haven't been configured before. for (let c of ["lapp","rapp","uapp","dapp","tapp"]){ // l=left, r=right, u=up, d=down, t=tap. if (!settings[c]) settings[c] = {"name":"(none)"}; } From f10c21845291fd66ce6f3c82d35fe5e7ba68c58c Mon Sep 17 00:00:00 2001 From: thyttan <6uuxstm66@mozmail.com⁩> Date: Sun, 12 Mar 2023 01:54:56 +0100 Subject: [PATCH 09/28] tweak conversion from old quicklaunch.json --- apps/quicklaunch/settings.js | 35 ++++++++++++++++++----------------- 1 file changed, 18 insertions(+), 17 deletions(-) diff --git a/apps/quicklaunch/settings.js b/apps/quicklaunch/settings.js index 10ef98584..79d138d82 100644 --- a/apps/quicklaunch/settings.js +++ b/apps/quicklaunch/settings.js @@ -2,23 +2,6 @@ var storage = require("Storage"); var settings = Object.assign(storage.readJSON("quicklaunch.json", true) || {}); -// Convert settings object from before v.0.12 -for (let c of ["leftapp","rightapp","upapp","downapp","tapapp"]){ - if (settings[c]) { - if (settings[c].name=="Quick Launch Extension") settings[c].name = "Extension"; - settings[c.substring(0,1)+"app"] = settings[c]; - delete settings[c]; - } -} -for (let c of ["extleftapp","extrightapp","extupapp","extdownapp","exttapapp"]){ - if (settings[c]) delete settings[c]; -} - -// Add default settings if they haven't been configured before. -for (let c of ["lapp","rapp","uapp","dapp","tapp"]){ // l=left, r=right, u=up, d=down, t=tap. - if (!settings[c]) settings[c] = {"name":"(none)"}; -} - var apps = storage.list(/\.info$/).map(app=>{var a=storage.readJSON(app,1);return a&&{name:a.name,type:a.type,sortorder:a.sortorder,src:a.src};}).filter(app=>app && (app.type=="app" || app.type=="launch" || app.type=="clock" || !app.type)); // Add psuedo app to trigger Bangle.showLauncher later @@ -46,6 +29,24 @@ apps.sort((a,b)=>{ return 0; }); +// Convert settings object from before v.0.12 +for (let c of ["leftapp","rightapp","upapp","downapp","tapapp"]){ + if (settings[c]) { + let cNew = c.substring(0,1)+"app"; + settings[cNew] = settings[c]; + if (settings[cNew].name=="Quick Launch Extension") save(cNew,extension); + delete settings[c]; + } +} +for (let c of ["extleftapp","extrightapp","extupapp","extdownapp","exttapapp"]){ + if (settings[c]) delete settings[c]; +} + +// Add default settings if they haven't been configured before. +for (let c of ["lapp","rapp","uapp","dapp","tapp"]){ // l=left, r=right, u=up, d=down, t=tap. + if (!settings[c]) settings[c] = {"name":"(none)"}; +} + function findPath(key) {return key.substring(0, key.length-3);} function save(key, value) { From 0c352bce76f00c22762809f9f7757f52995e5d94 Mon Sep 17 00:00:00 2001 From: thyttan <6uuxstm66@mozmail.com⁩> Date: Sun, 12 Mar 2023 02:14:28 +0100 Subject: [PATCH 10/28] further twaeks to conversion from old quicklaunch.json --- apps/quicklaunch/settings.js | 45 +++++++++++++++++++++--------------- 1 file changed, 27 insertions(+), 18 deletions(-) diff --git a/apps/quicklaunch/settings.js b/apps/quicklaunch/settings.js index 79d138d82..ce85abb6f 100644 --- a/apps/quicklaunch/settings.js +++ b/apps/quicklaunch/settings.js @@ -2,6 +2,33 @@ var storage = require("Storage"); var settings = Object.assign(storage.readJSON("quicklaunch.json", true) || {}); +// Convert settings object from before v0.12 to v0.12. +for (let c of ["leftapp","rightapp","upapp","downapp","tapapp"]){ + if (settings[c]) { + let cNew = c.substring(0,1)+"app"; + settings[cNew] = settings[c]; + delete settings[c]; + + if (settings[cNew].name=="Quick Launch Extension"){ + settings[cNew].name = "Extension"; + for (let d of ["extleftapp","extrightapp","extupapp","extdownapp","exttapapp"]){ + if (settings[d]) { + let dNew = cNew+d.substring(3,4)+"app"; + settings[dNew] = settings[d]; + } + } + } + } +} +for (let d of ["extleftapp","extrightapp","extupapp","extdownapp","exttapapp"]){ + if (settings[d]) delete settings[d]; +} + +// Add default settings if they haven't been configured before. +for (let c of ["lapp","rapp","uapp","dapp","tapp"]){ // l=left, r=right, u=up, d=down, t=tap. + if (!settings[c]) settings[c] = {"name":"(none)"}; +} + var apps = storage.list(/\.info$/).map(app=>{var a=storage.readJSON(app,1);return a&&{name:a.name,type:a.type,sortorder:a.sortorder,src:a.src};}).filter(app=>app && (app.type=="app" || app.type=="launch" || app.type=="clock" || !app.type)); // Add psuedo app to trigger Bangle.showLauncher later @@ -29,24 +56,6 @@ apps.sort((a,b)=>{ return 0; }); -// Convert settings object from before v.0.12 -for (let c of ["leftapp","rightapp","upapp","downapp","tapapp"]){ - if (settings[c]) { - let cNew = c.substring(0,1)+"app"; - settings[cNew] = settings[c]; - if (settings[cNew].name=="Quick Launch Extension") save(cNew,extension); - delete settings[c]; - } -} -for (let c of ["extleftapp","extrightapp","extupapp","extdownapp","exttapapp"]){ - if (settings[c]) delete settings[c]; -} - -// Add default settings if they haven't been configured before. -for (let c of ["lapp","rapp","uapp","dapp","tapp"]){ // l=left, r=right, u=up, d=down, t=tap. - if (!settings[c]) settings[c] = {"name":"(none)"}; -} - function findPath(key) {return key.substring(0, key.length-3);} function save(key, value) { From 203d3b075fd81a9dc43263615663064f8f061e47 Mon Sep 17 00:00:00 2001 From: thyttan <6uuxstm66@mozmail.com⁩> Date: Sun, 12 Mar 2023 02:27:03 +0100 Subject: [PATCH 11/28] tweak conversion again... --- apps/quicklaunch/settings.js | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/apps/quicklaunch/settings.js b/apps/quicklaunch/settings.js index ce85abb6f..d9adce945 100644 --- a/apps/quicklaunch/settings.js +++ b/apps/quicklaunch/settings.js @@ -2,6 +2,11 @@ var storage = require("Storage"); var settings = Object.assign(storage.readJSON("quicklaunch.json", true) || {}); +// Add default settings if they haven't been configured before. +for (let c of ["lapp","rapp","uapp","dapp","tapp"]){ // l=left, r=right, u=up, d=down, t=tap. + if (!settings[c]) settings[c] = {"name":"(none)"}; +} + // Convert settings object from before v0.12 to v0.12. for (let c of ["leftapp","rightapp","upapp","downapp","tapapp"]){ if (settings[c]) { @@ -13,7 +18,7 @@ for (let c of ["leftapp","rightapp","upapp","downapp","tapapp"]){ settings[cNew].name = "Extension"; for (let d of ["extleftapp","extrightapp","extupapp","extdownapp","exttapapp"]){ if (settings[d]) { - let dNew = cNew+d.substring(3,4)+"app"; + let dNew = cNew.substring(0,1)+d.substring(3,4)+"app"; settings[dNew] = settings[d]; } } @@ -24,11 +29,6 @@ for (let d of ["extleftapp","extrightapp","extupapp","extdownapp","exttapapp"]){ if (settings[d]) delete settings[d]; } -// Add default settings if they haven't been configured before. -for (let c of ["lapp","rapp","uapp","dapp","tapp"]){ // l=left, r=right, u=up, d=down, t=tap. - if (!settings[c]) settings[c] = {"name":"(none)"}; -} - var apps = storage.list(/\.info$/).map(app=>{var a=storage.readJSON(app,1);return a&&{name:a.name,type:a.type,sortorder:a.sortorder,src:a.src};}).filter(app=>app && (app.type=="app" || app.type=="launch" || app.type=="clock" || !app.type)); // Add psuedo app to trigger Bangle.showLauncher later From 6bc0604c60802e59e68fd9646457fdab112cee60 Mon Sep 17 00:00:00 2001 From: thyttan <6uuxstm66@mozmail.com⁩> Date: Sun, 12 Mar 2023 02:36:53 +0100 Subject: [PATCH 12/28] tweak conversion quicklaunch.json again... --- apps/quicklaunch/settings.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/apps/quicklaunch/settings.js b/apps/quicklaunch/settings.js index d9adce945..40f7ff683 100644 --- a/apps/quicklaunch/settings.js +++ b/apps/quicklaunch/settings.js @@ -23,12 +23,15 @@ for (let c of ["leftapp","rightapp","upapp","downapp","tapapp"]){ } } } + storage.writeJSON("quicklaunch.json",settings); } } for (let d of ["extleftapp","extrightapp","extupapp","extdownapp","exttapapp"]){ if (settings[d]) delete settings[d]; } + + var apps = storage.list(/\.info$/).map(app=>{var a=storage.readJSON(app,1);return a&&{name:a.name,type:a.type,sortorder:a.sortorder,src:a.src};}).filter(app=>app && (app.type=="app" || app.type=="launch" || app.type=="clock" || !app.type)); // Add psuedo app to trigger Bangle.showLauncher later From a8da0783e4532f017565deb8d2b73281a2b10ef5 Mon Sep 17 00:00:00 2001 From: thyttan <6uuxstm66@mozmail.com⁩> Date: Sun, 12 Mar 2023 02:47:30 +0100 Subject: [PATCH 13/28] add to readme --- apps/quicklaunch/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/quicklaunch/README.md b/apps/quicklaunch/README.md index dc4c50071..3b72804bd 100644 --- a/apps/quicklaunch/README.md +++ b/apps/quicklaunch/README.md @@ -1,3 +1,3 @@ -Tap or swipe left/right/up/down on your clock face to launch up to five apps of your choice. The Quick Launch Extension (included) can be chosen as one of the apps, in turn providing fast access to up to five additional apps. Configurations can be accessed through Settings->Apps. +Tap or swipe left/right/up/down on your clock face to launch up to five apps of your choice. The extension (included) can be chosen as one of the apps, in turn providing fast access to up to five additional apps per extension screen - which can be stacked indefinitely. Configurations can be accessed through Settings->Apps. From c14dc872b7049f19cb4be75377ad9a78598f9501 Mon Sep 17 00:00:00 2001 From: thyttan <6uuxstm66@mozmail.com⁩> Date: Sun, 12 Mar 2023 03:05:00 +0100 Subject: [PATCH 14/28] Instruct the user to visit settings page to prompt update of quicklaunch.json --- apps/quicklaunch/ChangeLog | 4 +++- apps/quicklaunch/README.md | 2 +- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/apps/quicklaunch/ChangeLog b/apps/quicklaunch/ChangeLog index 4de189ab1..7796ff84d 100644 --- a/apps/quicklaunch/ChangeLog +++ b/apps/quicklaunch/ChangeLog @@ -10,4 +10,6 @@ 0.10: Extend the functionality via a quicklaunch.app.js file that can be launched with quicklaunch itself. 0.11: Add hints to the extension app. Tweak remove function. -0.12: Stackable extension screens. +0.12: Stackable extension screens. After updating, please visit the quicklaunch + settings page to prompt an automatic update of the quicklaunch.json settings file with + new key names. diff --git a/apps/quicklaunch/README.md b/apps/quicklaunch/README.md index 3b72804bd..71311f82c 100644 --- a/apps/quicklaunch/README.md +++ b/apps/quicklaunch/README.md @@ -1,3 +1,3 @@ Tap or swipe left/right/up/down on your clock face to launch up to five apps of your choice. The extension (included) can be chosen as one of the apps, in turn providing fast access to up to five additional apps per extension screen - which can be stacked indefinitely. Configurations can be accessed through Settings->Apps. - +With the introduction of stackable extension screens in v0.12 of Quick Launch the keys of the settings file have been changed. Please just visit Settings->Apps->Quick Launch to prompt an automatic update. Quick Launch will not be responsive until this has been done. From a6728e2f1892e8fca371ab90d9a357bdf2661f33 Mon Sep 17 00:00:00 2001 From: thyttan <6uuxstm66@mozmail.com⁩> Date: Sun, 12 Mar 2023 03:24:16 +0100 Subject: [PATCH 15/28] tweak submenus heading --- apps/quicklaunch/settings.js | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/apps/quicklaunch/settings.js b/apps/quicklaunch/settings.js index 40f7ff683..d34df6fa8 100644 --- a/apps/quicklaunch/settings.js +++ b/apps/quicklaunch/settings.js @@ -107,9 +107,8 @@ function showMainMenu() { } function showSubMenu(key) { - let path = findPath(key); var submenu = { - "" : { "title" : "path: "+path}, + "" : { "title" : "Path: "+findPath(key).toUpperCase()}, "< Back" : showMainMenu }; From 7e8ceae785fc8ab777a9982f84fa441702c584a9 Mon Sep 17 00:00:00 2001 From: thyttan <6uuxstm66@mozmail.com⁩> Date: Sun, 12 Mar 2023 03:25:56 +0100 Subject: [PATCH 16/28] remove empty lines --- apps/quicklaunch/settings.js | 2 -- 1 file changed, 2 deletions(-) diff --git a/apps/quicklaunch/settings.js b/apps/quicklaunch/settings.js index d34df6fa8..9e69c4e01 100644 --- a/apps/quicklaunch/settings.js +++ b/apps/quicklaunch/settings.js @@ -30,8 +30,6 @@ for (let d of ["extleftapp","extrightapp","extupapp","extdownapp","exttapapp"]){ if (settings[d]) delete settings[d]; } - - var apps = storage.list(/\.info$/).map(app=>{var a=storage.readJSON(app,1);return a&&{name:a.name,type:a.type,sortorder:a.sortorder,src:a.src};}).filter(app=>app && (app.type=="app" || app.type=="launch" || app.type=="clock" || !app.type)); // Add psuedo app to trigger Bangle.showLauncher later From 10ac0e625aa92eea75ffb9ea1559e8420a9d9931 Mon Sep 17 00:00:00 2001 From: thyttan <6uuxstm66@mozmail.com⁩> Date: Sun, 12 Mar 2023 11:25:42 +0100 Subject: [PATCH 17/28] don't draw "(none)" in extension when app is not chosen --- apps/quicklaunch/app.js | 21 +++++++++++++-------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/apps/quicklaunch/app.js b/apps/quicklaunch/app.js index 5c92c6d34..d0eb06771 100644 --- a/apps/quicklaunch/app.js +++ b/apps/quicklaunch/app.js @@ -47,19 +47,24 @@ // taken from Icon Launcher with some alterations let timeoutToClock; const updateTimeoutToClock = function(){ - let time = 1000; // milliseconds + let time = 1500; // milliseconds if (timeoutToClock) clearTimeout(timeoutToClock); timeoutToClock = setTimeout(load,time); }; updateTimeoutToClock(); - + let R = Bangle.appRect; - + // Draw app hints + let lname = settings[trace+"lapp"].name=="(none)"?"":settings[trace+"lapp"].name; + let rname = settings[trace+"rapp"].name=="(none)"?"":settings[trace+"rapp"].name; + let uname = settings[trace+"uapp"].name=="(none)"?"":settings[trace+"uapp"].name; + let dname = settings[trace+"dapp"].name=="(none)"?"":settings[trace+"dapp"].name; + let tname = settings[trace+"tapp"].name=="(none)"?"":settings[trace+"tapp"].name; g.setFont("Vector", 11) - .setFontAlign(0,1,3).drawString(settings[trace+"lapp"].name, R.x2, R.y+R.h/2) - .setFontAlign(0,1,1).drawString(settings[trace+"rapp"].name, R.x, R.y+R.h/2) - .setFontAlign(0,1,0).drawString(settings[trace+"uapp"].name, R.x+R.w/2, R.y2) - .setFontAlign(0,-1,0).drawString(settings[trace+"dapp"].name, R.x+R.w/2, R.y) - .setFontAlign(0,0,0).drawString(settings[trace+"tapp"].name, R.x+R.w/2, R.y+R.h/2); + .setFontAlign(0,1,3).drawString(lname, R.x2, R.y+R.h/2) + .setFontAlign(0,1,1).drawString(rname, R.x, R.y+R.h/2) + .setFontAlign(0,1,0).drawString(uname, R.x+R.w/2, R.y2) + .setFontAlign(0,-1,0).drawString(dname, R.x+R.w/2, R.y) + .setFontAlign(0,0,0).drawString(tname, R.x+R.w/2, R.y+R.h/2); } From 6d80f784b40c7695884b32850edb4fe13fa45493 Mon Sep 17 00:00:00 2001 From: thyttan <6uuxstm66@mozmail.com⁩> Date: Sun, 12 Mar 2023 12:22:02 +0100 Subject: [PATCH 18/28] handle app name "(none)" vs empty string "" in settings.js instead of in app.js" --- apps/quicklaunch/app.js | 15 +++++---------- apps/quicklaunch/settings.js | 14 +++++++++----- 2 files changed, 14 insertions(+), 15 deletions(-) diff --git a/apps/quicklaunch/app.js b/apps/quicklaunch/app.js index d0eb06771..8bd3d0f2d 100644 --- a/apps/quicklaunch/app.js +++ b/apps/quicklaunch/app.js @@ -56,15 +56,10 @@ let R = Bangle.appRect; // Draw app hints - let lname = settings[trace+"lapp"].name=="(none)"?"":settings[trace+"lapp"].name; - let rname = settings[trace+"rapp"].name=="(none)"?"":settings[trace+"rapp"].name; - let uname = settings[trace+"uapp"].name=="(none)"?"":settings[trace+"uapp"].name; - let dname = settings[trace+"dapp"].name=="(none)"?"":settings[trace+"dapp"].name; - let tname = settings[trace+"tapp"].name=="(none)"?"":settings[trace+"tapp"].name; g.setFont("Vector", 11) - .setFontAlign(0,1,3).drawString(lname, R.x2, R.y+R.h/2) - .setFontAlign(0,1,1).drawString(rname, R.x, R.y+R.h/2) - .setFontAlign(0,1,0).drawString(uname, R.x+R.w/2, R.y2) - .setFontAlign(0,-1,0).drawString(dname, R.x+R.w/2, R.y) - .setFontAlign(0,0,0).drawString(tname, R.x+R.w/2, R.y+R.h/2); + .setFontAlign(0,1,3).drawString(settings[trace+"lapp"].name, R.x2, R.y+R.h/2) + .setFontAlign(0,1,1).drawString(settings[trace+"rapp"].name, R.x, R.y+R.h/2) + .setFontAlign(0,1,0).drawString(settings[trace+"uapp"].name, R.x+R.w/2, R.y2) + .setFontAlign(0,-1,0).drawString(settings[trace+"dapp"].name, R.x+R.w/2, R.y) + .setFontAlign(0,0,0).drawString(settings[trace+"tapp"].name, R.x+R.w/2, R.y+R.h/2); } diff --git a/apps/quicklaunch/settings.js b/apps/quicklaunch/settings.js index 9e69c4e01..08059efa5 100644 --- a/apps/quicklaunch/settings.js +++ b/apps/quicklaunch/settings.js @@ -4,7 +4,7 @@ var settings = Object.assign(storage.readJSON("quicklaunch.json", true) || {}); // Add default settings if they haven't been configured before. for (let c of ["lapp","rapp","uapp","dapp","tapp"]){ // l=left, r=right, u=up, d=down, t=tap. - if (!settings[c]) settings[c] = {"name":"(none)"}; + if (!settings[c]) settings[c] = {"name":""}; } // Convert settings object from before v0.12 to v0.12. @@ -13,6 +13,7 @@ for (let c of ["leftapp","rightapp","upapp","downapp","tapapp"]){ let cNew = c.substring(0,1)+"app"; settings[cNew] = settings[c]; delete settings[c]; + if (settings[cNew].name=="(none)") settings[cNew].name = ""; if (settings[cNew].name=="Quick Launch Extension"){ settings[cNew].name = "Extension"; @@ -20,6 +21,7 @@ for (let c of ["leftapp","rightapp","upapp","downapp","tapapp"]){ if (settings[d]) { let dNew = cNew.substring(0,1)+d.substring(3,4)+"app"; settings[dNew] = settings[d]; + if (settings[dNew].name=="(none)") settings[dNew].name = ""; } } } @@ -71,7 +73,7 @@ function save(key, value) { // If changing to extension app (from something else) add downstream settings entries. if (value.name == extension.name && settings[key].name != extension.name) { for (let c of [path+"lapp", path+"rapp", path+"uapp", path+"dapp", path+"tapp"]) { - settings[c] = {"name":"(none)"}; + settings[c] = {"name":""}; storage.write("quicklaunch.json",settings); } } @@ -88,7 +90,7 @@ function showMainMenu() { "< Back" : ()=>{load();} }; - //List all selected apps + // List all selected apps. for (let key of Object.keys(settings)) { if (key == "trace") continue; let keyCurrent = key; @@ -98,7 +100,9 @@ function showMainMenu() { if (entry=="U") entry = "Up"; if (entry=="D") entry = "Down"; if (entry=="T") entry = "Tap"; - mainmenu[entry+ ": "+settings[key].name] = function() {showSubMenu(keyCurrent);}; + // If no app is selected the name is an empty string, but we want to display "(none)". + let appName = settings[key].name==""?"(none)":settings[key].name; + mainmenu[entry+ ": "+appName] = function() {showSubMenu(keyCurrent);}; } return E.showMenu(mainmenu); @@ -111,7 +115,7 @@ function showSubMenu(key) { }; submenu["(none)"] = function() { - save(key, {"name":"(none)"}); + save(key, {"name":""}); showMainMenu(); }; apps.forEach((a)=>{ From 1bfb1ae7e43312b81b51a97ccf15b819c9e7858c Mon Sep 17 00:00:00 2001 From: thyttan <6uuxstm66@mozmail.com⁩> Date: Sun, 12 Mar 2023 12:35:03 +0100 Subject: [PATCH 19/28] fix quicklaunch.json name conversion deleting extleftapp etc --- apps/quicklaunch/settings.js | 1 + 1 file changed, 1 insertion(+) diff --git a/apps/quicklaunch/settings.js b/apps/quicklaunch/settings.js index 08059efa5..ffdef3838 100644 --- a/apps/quicklaunch/settings.js +++ b/apps/quicklaunch/settings.js @@ -21,6 +21,7 @@ for (let c of ["leftapp","rightapp","upapp","downapp","tapapp"]){ if (settings[d]) { let dNew = cNew.substring(0,1)+d.substring(3,4)+"app"; settings[dNew] = settings[d]; + delete settings[d]; if (settings[dNew].name=="(none)") settings[dNew].name = ""; } } From b1e57cc00dce10fb4a287ccebc7b2d2ca73a525e Mon Sep 17 00:00:00 2001 From: thyttan <6uuxstm66@mozmail.com⁩> Date: Sun, 12 Mar 2023 13:41:23 +0100 Subject: [PATCH 20/28] only call loadWidgets if Fastload Utils is installed --- apps/quicklaunch/app.js | 2 +- apps/quicklaunch/settings.js | 4 ++++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/apps/quicklaunch/app.js b/apps/quicklaunch/app.js index 8bd3d0f2d..bff868900 100644 --- a/apps/quicklaunch/app.js +++ b/apps/quicklaunch/app.js @@ -42,7 +42,7 @@ }); g.clearRect(Bangle.appRect); - Bangle.loadWidgets(); // Compatibility with Fastload Utils. + if (settings.fuInstalled) Bangle.loadWidgets(); // Compatibility with Fastload Utils. // taken from Icon Launcher with some alterations let timeoutToClock; diff --git a/apps/quicklaunch/settings.js b/apps/quicklaunch/settings.js index ffdef3838..4ca35e2e0 100644 --- a/apps/quicklaunch/settings.js +++ b/apps/quicklaunch/settings.js @@ -7,6 +7,10 @@ for (let c of ["lapp","rapp","uapp","dapp","tapp"]){ // l=left, r=right, u=up, d if (!settings[c]) settings[c] = {"name":""}; } +// Always check it Fastload Utils is installed. +if (!settings.fuInstalled) settings.fuInstalled = false; +if (storage.read("fastload.utils",0,1)) settings.fuInstalled = true; + // Convert settings object from before v0.12 to v0.12. for (let c of ["leftapp","rightapp","upapp","downapp","tapapp"]){ if (settings[c]) { From 3c6e708009d65e05695d58cdb6461c57df9cccb3 Mon Sep 17 00:00:00 2001 From: thyttan <6uuxstm66@mozmail.com⁩> Date: Sun, 12 Mar 2023 14:00:01 +0100 Subject: [PATCH 21/28] tweaks re checking if Fastload Utils is installed --- apps/quicklaunch/settings.js | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/apps/quicklaunch/settings.js b/apps/quicklaunch/settings.js index 4ca35e2e0..7d2124352 100644 --- a/apps/quicklaunch/settings.js +++ b/apps/quicklaunch/settings.js @@ -2,14 +2,15 @@ var storage = require("Storage"); var settings = Object.assign(storage.readJSON("quicklaunch.json", true) || {}); +// Always check it Fastload Utils is installed. If it was uninstalled we want to stop loading widgets in quicklaunch.app.js. +if (!settings.fuInstalled) settings.fuInstalled = false; +if (storage.read("fastload.utils",0,1)) settings.fuInstalled = true; + // Add default settings if they haven't been configured before. for (let c of ["lapp","rapp","uapp","dapp","tapp"]){ // l=left, r=right, u=up, d=down, t=tap. if (!settings[c]) settings[c] = {"name":""}; } - -// Always check it Fastload Utils is installed. -if (!settings.fuInstalled) settings.fuInstalled = false; -if (storage.read("fastload.utils",0,1)) settings.fuInstalled = true; +storage.writeJSON("quicklaunch.json",settings); // Convert settings object from before v0.12 to v0.12. for (let c of ["leftapp","rightapp","upapp","downapp","tapapp"]){ @@ -37,6 +38,7 @@ for (let d of ["extleftapp","extrightapp","extupapp","extdownapp","exttapapp"]){ if (settings[d]) delete settings[d]; } + var apps = storage.list(/\.info$/).map(app=>{var a=storage.readJSON(app,1);return a&&{name:a.name,type:a.type,sortorder:a.sortorder,src:a.src};}).filter(app=>app && (app.type=="app" || app.type=="launch" || app.type=="clock" || !app.type)); // Add psuedo app to trigger Bangle.showLauncher later @@ -97,7 +99,7 @@ function showMainMenu() { // List all selected apps. for (let key of Object.keys(settings)) { - if (key == "trace") continue; + if (key == "trace" || key == "fuInstalled") continue; let keyCurrent = key; let entry = findPath(key).toUpperCase(); if (entry=="L") entry = "Left"; From 850c791ba2fe4f660281bffebff15fd513c50539 Mon Sep 17 00:00:00 2001 From: thyttan <6uuxstm66@mozmail.com⁩> Date: Sun, 12 Mar 2023 14:12:57 +0100 Subject: [PATCH 22/28] handle if Fastload Utils is installed or not with a hack instead of with a settings entry --- apps/quicklaunch/app.js | 2 +- apps/quicklaunch/settings.js | 5 ----- 2 files changed, 1 insertion(+), 6 deletions(-) diff --git a/apps/quicklaunch/app.js b/apps/quicklaunch/app.js index bff868900..bea0728d4 100644 --- a/apps/quicklaunch/app.js +++ b/apps/quicklaunch/app.js @@ -42,7 +42,7 @@ }); g.clearRect(Bangle.appRect); - if (settings.fuInstalled) Bangle.loadWidgets(); // Compatibility with Fastload Utils. + let loadWidgets = "Bangle.loadWidgets();"; // Hack: Fool Fastload Utils that we call Bangle.loadWidgets(). This way we get the fastest possibe loading in whichever environment we find ourselvs. // taken from Icon Launcher with some alterations let timeoutToClock; diff --git a/apps/quicklaunch/settings.js b/apps/quicklaunch/settings.js index 7d2124352..ba369a1bc 100644 --- a/apps/quicklaunch/settings.js +++ b/apps/quicklaunch/settings.js @@ -2,15 +2,10 @@ var storage = require("Storage"); var settings = Object.assign(storage.readJSON("quicklaunch.json", true) || {}); -// Always check it Fastload Utils is installed. If it was uninstalled we want to stop loading widgets in quicklaunch.app.js. -if (!settings.fuInstalled) settings.fuInstalled = false; -if (storage.read("fastload.utils",0,1)) settings.fuInstalled = true; - // Add default settings if they haven't been configured before. for (let c of ["lapp","rapp","uapp","dapp","tapp"]){ // l=left, r=right, u=up, d=down, t=tap. if (!settings[c]) settings[c] = {"name":""}; } -storage.writeJSON("quicklaunch.json",settings); // Convert settings object from before v0.12 to v0.12. for (let c of ["leftapp","rightapp","upapp","downapp","tapapp"]){ From b06e9968ca3b117d7f9a9b37b20f2d7c0e74a35b Mon Sep 17 00:00:00 2001 From: thyttan <6uuxstm66@mozmail.com⁩> Date: Sun, 12 Mar 2023 14:14:07 +0100 Subject: [PATCH 23/28] cleanup after removine fuInstalled settings entry --- apps/quicklaunch/settings.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/quicklaunch/settings.js b/apps/quicklaunch/settings.js index ba369a1bc..fc6149ac7 100644 --- a/apps/quicklaunch/settings.js +++ b/apps/quicklaunch/settings.js @@ -94,7 +94,7 @@ function showMainMenu() { // List all selected apps. for (let key of Object.keys(settings)) { - if (key == "trace" || key == "fuInstalled") continue; + if (key == "trace") continue; let keyCurrent = key; let entry = findPath(key).toUpperCase(); if (entry=="L") entry = "Left"; From 224500e8f47ee18a1ad1cd6fbccd54de0c58e474 Mon Sep 17 00:00:00 2001 From: thyttan <6uuxstm66@mozmail.com⁩> Date: Sun, 12 Mar 2023 14:48:32 +0100 Subject: [PATCH 24/28] add screenshots to readme --- apps/quicklaunch/README.md | 10 ++++++++++ apps/quicklaunch/screenshot0.png | Bin 0 -> 1873 bytes apps/quicklaunch/screenshot1.png | Bin 0 -> 2280 bytes 3 files changed, 10 insertions(+) create mode 100644 apps/quicklaunch/screenshot0.png create mode 100644 apps/quicklaunch/screenshot1.png diff --git a/apps/quicklaunch/README.md b/apps/quicklaunch/README.md index 71311f82c..70395b5d8 100644 --- a/apps/quicklaunch/README.md +++ b/apps/quicklaunch/README.md @@ -1,3 +1,13 @@ Tap or swipe left/right/up/down on your clock face to launch up to five apps of your choice. The extension (included) can be chosen as one of the apps, in turn providing fast access to up to five additional apps per extension screen - which can be stacked indefinitely. Configurations can be accessed through Settings->Apps. With the introduction of stackable extension screens in v0.12 of Quick Launch the keys of the settings file have been changed. Please just visit Settings->Apps->Quick Launch to prompt an automatic update. Quick Launch will not be responsive until this has been done. + +Below is extension screens where current apps have been set like so: +- left swipe is "PA Remote", +- right swipe is "Remote for Spotify" and +- down swipe is another extension screen where new apps are accessible. + +![](screenshot0.png) +*Extension screen.* +![](screenshot1.png) +*Extension screen when Fastload Utils is present.* diff --git a/apps/quicklaunch/screenshot0.png b/apps/quicklaunch/screenshot0.png new file mode 100644 index 0000000000000000000000000000000000000000..98bb25b5c38bafd847a59971296a84acf3fe90a5 GIT binary patch literal 1873 zcmd6o`#042AIIO*2Q!fmx%5@X$mKiQh_p3!klUCN6PDF57zQnha;-32=)hLE+gObof?lKM(~Rlat=f5Z2j@AI73>v>+U^Z51odZm8rY_BMP zKpp^~=x~POw&S9|3MaSIYZ_*JcMKElW={sy{hA9qgG@Bp!5z0FHtu{10CHOn6kGRL z-{pezsM{uLld;hcYWI2 z+?rc|H@Y;>xm1Ih(wFmg8dsfwrGuMtY!H}}WR2*<*4PVUbhgki4A)9Hr5 zuq?Dtk*i3i<>Jua77m0!%p3e1!Y)yiSZ)lAYM=i;6;$R|Bc{Lpm3y1?7KcpCj9_o1J@nzbIpZ4Z>irhz=u%s}tY>e97}cmF`E ztb|&lO8ogWPHQSOG=J0e)sH-$mr{lkNt6gxLN$C9A`Kt1j@GI2RVR=)yo^t(kv}UG zS-D`-!lgq>q?cj-`s+Ug%KmYPRvGLihfrXMq|}W@5^#7SVx;kh;B$ zgJ#TIP~U#x)5jddmwzD<0w@2w7+3mab=2&I3^vVj^-EW#VWg^xf43hj zxO3~3(nYJ`m+?AQ(X`B?h;_HA?D|*_$3Q=>!Yb4?EO2 ziR9nu7n}7FVL{MTOvy@4<1(|li=he!Crn`KbK@uM`b`Frm9GyRU+swLP44$-cdQ6l zLudIE0q6V;2aqMyCMH;zMBx*uJ!owm6lU}=hOO0kuuafA;-vRBFo!^UUWQyqD@XeAS2Oe{cHt=(g$t_c+E zX>$-inbPC>;sqk<*o~qpBZwFEPqx8NPv1P5b?}$Pil2A9qkKKydv$X4Gs3XDp#bTZnzGk#2gasWn#2D*i=&3ft+J)(pY} zxUr>Yu3R)?@SZ*LkQEY6;FW3L4T->UnX?1Xv*9T!L~|k~icwx=Wj>2D2q3J}F|Rr?BYz6XTr-9bWTFePhr;GYOXj zb#^rpu#P8b*7yJQ@}JiAb~{&12(Qw6jzt$e;NWfE#+{|<*bwre*0yhqg!@T8Y_*tw zr|wzdfIB$2MaHDT?R3gOb5b7YuUaGyN@&Gj> zm@=4a=|h4PY^~Ye@Sd0ho}nEm*KugX)TNGtYe-s?J2yK9dhHYu1X=|Ij> zu=9xC-ys95qH~%WgNQL&2k#9mzBjj3Tl0whwm18cZJ-NIo8FGh?HM1#M9At4&o9_q z*`G-`?xIcmjH8S$2y8otBCfIz$MZPKqwfeAC9hB( z<$AYDggi?6ra?{)NuG&mh;))iZb@@;=iYzdu66fXd+)V>*lT~*-k?XeZ+Zr0Yy5xd86ePhd!2yLZP$WoOXN1 z1S}L^ikLA}bI#e=cz@b8CBRXYs;_k9=B@GZ>ta{w`;=$kLk9;Yv%P&|8Vlv&*4Ee8 z*JLuS_= zjj|uU_LSlkCC&!p0+xY;i2SJz&K*o$en8`Ml?iTU_+zLPo}Nn1wMkw0`utsCGqEcA zjI7;Q@?P+VZx5z59w+ohv^6#o{t8u=(oO@uA5F^%Is8aSMy^rc>tl>3Kt=1dBI^K# zXzfhJPY#>!i|&Egs=ou2A~f_kXbjRH98AWG4}RzMtDJ_P(R790;y-v3sWF4OEz}?% zgo*{X3LE1$nOl5Gthv3Y1q`zHAkJWlewbfkmrs-v(z=TuxH`5MAqR3&6WT7fWg|v3 zajsfjyrJ+(VT(mbh_2;CvW=GIk;Be`L3%$Y9SEu5%`5osY_pd={4m%3&NyQ9jYnXZ z!O=fG1P^Mm()O*NGY%9#JapI}wD>3<>T_)T_3FE(AJLQujjr?g?Kd>{ApWZjZ*JA& ztBTnn+Do^sWs8F33HBgI;ZjL+4h^P3w$ai6>+mT(QUQFQ1fL_>Xa^?*ZOzlU)5eXG z4!gOS+h|wNCEg!375p(-8NJEHesAf0HN$3@(@R;Ut>BNWSS#Lhp5TFINPHF-9kfaX zz1+wm8;7?2#vQvsUSgl@ot~Y_QM>=6dPj7+Kz8Cxg1q%G`GWW zLH}K7dQa#l4lU`pVv}J1y86A@{AR3qhISoR=48o10U4UdWPA`EW0Fvmp~*tZAl=8g zC~z{3G*<@UmJD}yh0FNbNr9s|c6vf*~Ah{0D|3WyPG^fS1Yx?2lW-)Mte+ z$|e({(Q99f+P^|Ov2p(`gVasqe;r$Jv)J7X1(O*3`0AW~N@U?+H^86In7=wy+!AK_Fx=X==gHvo zke4zeU7upe_e_ z!C&b^mem1OfFGzzyBp3$0S|fVLPd~w2%Whb(E}C~bM7FMR&0B7@Q{Cxk;5e*W{-pe z^5pE*!W9yHD>1KWAP?+IFE^>vOOYT=3f-ILznc!vnCl6H-{gB96L>)uuw zL;dbR(_MNA6W@*R@vTCACkSUhBLgKBsl!E|XTIG!T;^C3N*7yG+%RmH*Ft`RRyTS>pUTKp6y1 z>3BR6l_jU-MdPct7(dt9-<19P3Du2IXvJr^EeqhHW5{Goi+5K&82fCqrHlf@8sY)S zPybG!BGYyV%76!u0XZ25<_%(&6-VZ`kX(#4L?^&Xg@x47NR^vg{FfWDBL{-9BfInr z8m634z~a`7DKqfHLG(P!j^?BjqQu+kX@_^$3DP{)+e<6iCDM3Ak+e?S+aZLbHne*= zbCd*VqW(8)3e%lc!YO&zL*B2aK8YK3W|`2^4yEEOtV18ZOgSuq%Uvc_h5RdY}O zg2$5&XexS;U$~)w-xH5s!-D8h7yZ=I92EEo>b4+3xVj8`oHGM}CNNiyFwx{d(phqv z2Z(OL6Q9Q6SO{~4rBw{!!WcFw-^ef=KO;1>m8+gdnA+#vDB$}ug?&+Sr7V_gp1ptq xzho(wzNf;l-4n}RWdQnUfOQ)9{|2vN>(909V*ObeB>z@WZq6P~cO3&0{|!wg*y#WO literal 0 HcmV?d00001 From 927d69b9e38154034809ed48f40bb2d065f89e4b Mon Sep 17 00:00:00 2001 From: thyttan <6uuxstm66@mozmail.com⁩> Date: Sun, 12 Mar 2023 14:52:23 +0100 Subject: [PATCH 25/28] tweak readme --- apps/quicklaunch/README.md | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/apps/quicklaunch/README.md b/apps/quicklaunch/README.md index 70395b5d8..e360a1216 100644 --- a/apps/quicklaunch/README.md +++ b/apps/quicklaunch/README.md @@ -1,6 +1,6 @@ -Tap or swipe left/right/up/down on your clock face to launch up to five apps of your choice. The extension (included) can be chosen as one of the apps, in turn providing fast access to up to five additional apps per extension screen - which can be stacked indefinitely. Configurations can be accessed through Settings->Apps. +**PLEASE NOTE: With v0.12 of Quick Launch the keys of the settings file have been changed. Please just visit Settings->Apps->Quick Launch to prompt an automatic update. Quick Launch will not be responsive until this has been done. This is a consequence of how the new stackable extension screens are implemented.** -With the introduction of stackable extension screens in v0.12 of Quick Launch the keys of the settings file have been changed. Please just visit Settings->Apps->Quick Launch to prompt an automatic update. Quick Launch will not be responsive until this has been done. +Tap or swipe left/right/up/down on your clock face to launch up to five apps of your choice. The extension (included) can be chosen as one of the apps, in turn providing fast access to up to five additional apps per extension screen - which can be stacked indefinitely. Configurations can be accessed through Settings->Apps. Below is extension screens where current apps have been set like so: - left swipe is "PA Remote", @@ -8,6 +8,10 @@ Below is extension screens where current apps have been set like so: - down swipe is another extension screen where new apps are accessible. ![](screenshot0.png) + *Extension screen.* + + ![](screenshot1.png) + *Extension screen when Fastload Utils is present.* From 37923961500edfbeaa8e3e58702776e8f6b47ca1 Mon Sep 17 00:00:00 2001 From: thyttan <6uuxstm66@mozmail.com⁩> Date: Sun, 12 Mar 2023 21:23:19 +0100 Subject: [PATCH 26/28] tweak faking of Bangle.loadWidgets() --- apps/quicklaunch/app.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/quicklaunch/app.js b/apps/quicklaunch/app.js index bea0728d4..f6cacd457 100644 --- a/apps/quicklaunch/app.js +++ b/apps/quicklaunch/app.js @@ -19,7 +19,7 @@ let touchHandler = (_,e) => { let R = Bangle.appRect; if (e.x < R.x || e.x > R.x2 || e.y < R.y || e.y > R.y2 ) return; - trace = leaveTrace(trace+"t"); + trace = leaveTrace(trace+"t"); // t=tap. if (settings[trace+"app"].src){ if (settings[trace+"app"].name == "Show Launcher") Bangle.showLauncher(); else if (!storage.read(settings[trace+"app"].src)) reset(trace+"app"); else load(settings[trace+"app"].src); } }; @@ -42,7 +42,7 @@ }); g.clearRect(Bangle.appRect); - let loadWidgets = "Bangle.loadWidgets();"; // Hack: Fool Fastload Utils that we call Bangle.loadWidgets(). This way we get the fastest possibe loading in whichever environment we find ourselvs. + "Bangle.loadWidgets()"; // Hack: Fool Fastload Utils that we call Bangle.loadWidgets(). This way we get the fastest possibe loading in whichever environment we find ourselves. // taken from Icon Launcher with some alterations let timeoutToClock; From 424adcce4fa64e9113cb41ac989db266bfbf7113 Mon Sep 17 00:00:00 2001 From: thyttan <6uuxstm66@mozmail.com⁩> Date: Sun, 12 Mar 2023 21:57:36 +0100 Subject: [PATCH 27/28] list contributors in readme --- apps/quicklaunch/README.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/apps/quicklaunch/README.md b/apps/quicklaunch/README.md index e360a1216..f6450adac 100644 --- a/apps/quicklaunch/README.md +++ b/apps/quicklaunch/README.md @@ -15,3 +15,9 @@ Below is extension screens where current apps have been set like so: ![](screenshot1.png) *Extension screen when Fastload Utils is present.* + +## Contributors +frigis1 (Creator) +halemmerich +thyttan +glemco From c0ded36586583fd200e7c9b1805b29492eb4df65 Mon Sep 17 00:00:00 2001 From: thyttan <97237430+thyttan@users.noreply.github.com> Date: Sun, 12 Mar 2023 22:02:01 +0100 Subject: [PATCH 28/28] Update README.md --- apps/quicklaunch/README.md | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/apps/quicklaunch/README.md b/apps/quicklaunch/README.md index f6450adac..8a60e5279 100644 --- a/apps/quicklaunch/README.md +++ b/apps/quicklaunch/README.md @@ -17,7 +17,8 @@ Below is extension screens where current apps have been set like so: *Extension screen when Fastload Utils is present.* ## Contributors -frigis1 (Creator) -halemmerich -thyttan -glemco + +frigis1 (Creator), +halemmerich, +thyttan, +glemco.