From 5c7c73895cfaaf908e6c2ba9fc29b7ff007c59ff Mon Sep 17 00:00:00 2001 From: RKBoss6 Date: Fri, 12 Dec 2025 15:20:16 -0500 Subject: [PATCH 01/24] Add selection for shortcuts --- apps/taglaunch/settings.js | 78 +++++++++++++++++++++++++++++++++++++- 1 file changed, 76 insertions(+), 2 deletions(-) diff --git a/apps/taglaunch/settings.js b/apps/taglaunch/settings.js index 09290cf24c..3d12697287 100644 --- a/apps/taglaunch/settings.js +++ b/apps/taglaunch/settings.js @@ -1,19 +1,93 @@ // make sure to enclose the function in parentheses (function(back) { + + let storedBackFn=function(){}; + let launchCache; let settings = Object.assign({ showClocks: true, fullscreen: false, - buzz:false + buzz:false, + shortcuts:["","",""] }, require("Storage").readJSON("taglaunch.json", true) || {}); - let fonts = g.getFonts(); function save(key, value) { settings[key] = value; require("Storage").write("taglaunch.json",settings); } + + function setShortcut(id,spot,bk){ + let shortcuts=settings.shortcuts; + shortcuts[spot]=id; + save("shortcuts",shortcuts); + bk() + } + + function showAppList(spot,bk){ + //make sure cache is present + launchCache=require("Storage").readJSON("taglaunch.cache.json") + if (!launchCache || !launchCache.appsByTag) { + E.showAlert("Caching apps, returning to launcher","Loading").then(function(v){ + Bangle.load("taglaunch.app.js"); + }); + } else { + var apps = []; + var appsByTag = launchCache.appsByTag; + for (var tag in appsByTag) { + var list = appsByTag[tag]; + for (var i = 0; i < list.length; i++) { + var app = list[i]; + apps.push({ + name: app.name, + src: app.src || app.name, + id: app.id + }); + } + } + + var menu = {}; + var spotText=""; + if(spot==0)spotText+="Left "; + if(spot==1)spotText+="Center "; + if(spot==2)spotText+="Right "; + spotText+="App"; + menu[""] = { "title" : spotText}, // Title for the menu + + menu["None"] = () => setShortcut("",spot,bk); + apps.forEach(a => { + menu[a.name] = function(){ + E.showPrompt("Set "+a.name+" as the "+spotText+"?",{ + title:"Confirm", + buttons: {"Cancel":false,"Ok":true} + }).then(function(a){ + if(a)setShortcut(a.id,spot,bk); + else showAppList(spot,bk) + }) + } + }); + menu["< Back"] = bk; + + // Show it + E.showMenu(menu); + } + } + + function showSpotMenu(){ + E.showMenu({ + "":{ "title" : "Select Spot"}, // Title for the menu + "< Back":function(){ + eval(require("Storage").read("taglaunch.settings.js"))(()=>load()); + }, + "Left" : function() { showAppList(0,showSpotMenu); }, + "Center" : function() { showAppList(1,showSpotMenu); }, + "Right" : function() { showAppList(2,showSpotMenu);} + }) + } const appMenu = { "": { "title": /*LANG*/"Tag Launcher" }, "< Back": back, + /*LANG*/"Shortcuts": function(){ + showSpotMenu() + }, /*LANG*/"Font": { value: fonts.includes(settings.font)? fonts.indexOf(settings.font) : fonts.indexOf("12x20"), min:0, max:fonts.length-1, step:1,wrap:true, From f9fcbf4e5cebb03ab9087eb021ae0db224b69e51 Mon Sep 17 00:00:00 2001 From: RKBoss6 Date: Fri, 12 Dec 2025 15:21:21 -0500 Subject: [PATCH 02/24] Add shortcut display, hides if no shortcuts are selected --- apps/taglaunch/app.js | 57 ++++++++++++++++++++++++++++++++++--------- 1 file changed, 45 insertions(+), 12 deletions(-) diff --git a/apps/taglaunch/app.js b/apps/taglaunch/app.js index 3e322b5ba9..c571236c82 100644 --- a/apps/taglaunch/app.js +++ b/apps/taglaunch/app.js @@ -1,7 +1,7 @@ { // must be inside our own scope here so that when we are unloaded everything disappears let s = require("Storage"); - // TODO: Allow to change sortorder in settings + let tags = {"clock": {name: /*LANG*/"Clocks", icon: () => atob("MDCEBERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERESIiIiIREREREREREREREREREREREREiIiIiIiIiIhERERERERERERERERERESIiIiIiIiIiIiIREREREREREREREREREiIiIiIiIiIiIiIhERERERERERERERESIiIiIgz//8ziIiIiIREREREREREREREiIiIg////////ziIiIhERERERERERERIiIiD//////////84iIiERERERERERESIiIg/////8A/////ziIiIRERERERERESIiI//////8A//////+IiIREREREREREiIiP//////8A///////4iIhERERERERIiIg///////8A///////ziIiERERERERIiIP///////8A////////OIiERERERESIiI////////8A////////+IiIRERERESIiD////////8A////////84iIRERERESIiP////////8A/////////4iIRERERESIiP////////8A/////////4iIREREREiIg/////////8A/////////ziIhEREREiIg/////////IAL////////ziIhEREREiIj////////yAAAv////////iIhEREREiIgiIv/////wCIAP/////yIiiIhEREREiIgiIv/////wCIAP/////yIiiIhEREREiIj////////yAAAD////////iIhEREREiIg/////////IAABP//////ziIhEREREiIg///////////IAE//////ziIhERERESIiP//////////8gAT/////4iIRERERESIiP///////////yABP////4iIRERERESIiD////////////IAL///84iIRERERESIiI////////////8i////+IiIRERERERIiIP/////////////////OIiERERERERIiIg////////////////ziIiEREREREREiIiP///////////////4iIhERERERERESIiI//////////////+IiIRERERERERESIiIg/////8i/////ziIiIRERERERERERIiIiD////8i////84iIiEREREREREREREiIiIg///8i///ziIiIhERERERERERERESIiIiIgz8i8ziIiIiIREREREREREREREREiIiIiIiIiIiIiIhERERERERERERERERESIiIiIiIiIiIiIREREREREREREREREREREiIiIiIiIiIhERERERERERERERERERERERESIiIiIRERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERA==")}, "game": {name: /*LANG*/"Games", sortorder: 1, icon: () => atob("MDCEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAzMzMzMzMzMzMzMzMzMzMzMwAAAAAAAAAzMzMzMzMzMzMzMzMzMzMzMwAAAAAAAAAzIiIiIiIiIiIiIiIiIiIiMwAAAAAAAAAzL///IiIi////IiIi///yMwAAAAAAAAAzL///IiIi////IiIi///yMwAAAAAAAAAzL///IiIi////IiIi///yMwAAAAAAAAAzL///IiIi////IiIi///yMwAAAAAAAAAzL///IiIi////IiIi///yMwAAAAAAAAAzIiIi////IiIi////IiIiMwAAAAAAAAAzIiIi////IiIi////IiIiMwAAAAAAAAAzIiIi////IiIi////IiIiMwAAAAAAAAAzIiIi////IiIi////IiIiMwAAAAAAAAAzIiIi////IiIi////IiIiMwAAAAAAAAAzIiIi////IiIi////IiIiMwAAAAAAAAAzL///IiIi////IiIi///yMwAAAAAAAAAzL///IiIi////IiIi///yMwAAAAAAAAAzL///IiIi////IiIi8R/xERABEAAAAAAzL///IiIi////IiIi8R/xERABEAAAAAAzL///IiIi////IiIi8R/xERABEAAAAAAzL///IiIi////IiIi8RMxERABEAAAAAAzIiIi////IiIi////IREREREREAAAAAAzIiIi////IiIi////IREREREREAAAAAAzIiIi////IiIi////IREREREREAAAAAAzIiIi////IiIi////IhERERERAAAAAAAzIiIi////IiIi////IiMzMzMwAAAAAAAzIiIi////IiIi////IiMzMzMwAAAAAAAzL///IiIi////IiIi///xERAAAAAAAAAzL///IiIi////IiIi//8xERAAAAAAAAAzL///IiIi////IiIi//8hEREAAAAAAAAzL///IiIi////IiIi//8REREAAAAAAAAzL///IiIi////IiIi//MREREAAAAAAAAzIiIiIiIiIiIiIiIiIzMzMzMzMAAAAAAzMzMzMzMzMzMzMzMzMzMzMzMzMAAAAAAzMzMzMzMzMzMzMzMzMhEREREREAAAAAAAAAAAAAAAAAAAAAAAEREREREREQAAAAAAAAAAAAAAAAAAAAAAEREREREREQAAAAAAAAAAAAAAAAAAAAAAEREREREREQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==")}, "tool": {name: /*LANG*/"Tools", sortorder: -1, icon: () => atob("MDCEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMwAAAAAAAAAAAAAAIiIgAAAAAAAAAAADMzMAAAAAAAAAAAAiIiIgAAAAAAAAAAADMzMwAAAAAAAAAAIiIiIAAAAAAAAAAAAAMzMzAAAAAAAAACIiIiAAAAAAAAAAAAAAMzMzMAAAAAAAACIiIgAAAAAAAAAAAAAAAzMzMAAAAAAAAiIiIAAAAAAAAAAAAAAAADMzMwAAAAAAAiIiIAAAAAIgAAAAAAAAAAMzMzAAAAAAAiIiIgAAACIgAAAAAAAAAAADMzMAAAAAAiIiIiAAAiIgAAAAAAAAAAAAMzMwAAAAAiIiIiIAIiIgAAAAAAAAAAAAAzMzAAAAACIiIiIiIiIgAAAAAAAAAAAAADMzMAAAAiIiIiIiIiIAAAAAAAAAAAAAAAMzMwDdQiIiIiIiIiIAAAAAAAAAAAAAAAAzMz3d0iIiIiIiIiAAAAAAAAAAAAAAAAADM93d1CIiIiIiIgAAAAAAAAAAAAAAAAAAPd3d3iIiACIiAAAAAAAAAAAAAAAAAAAA3d3d7kIgAAAAAAAAAAAAAAAAAAAAAAAN3d3e7uQAAAAAAAAAAAAAAAAAAAAAAAAN3d3u7u4AAAAAAAAAAAAAAAAAAAAAAAAC3d7u7u7gAAAAAAAAAAAAAAAAAAAAAAAiJO7u7u7uAAAAAAAAAAAAAAAAAAAAAAIiIiTu7u7u7gAAAAAAAAAAAAAAAAAAACIiIiIu7u7u7uAAAAAAAAAAAAAAAAAAAiIiIiIA7u7u7u4AAAAAAAAAAAAAAAAAIiIiIiAADu7u7u7uAAAAAAAAAAAAAAACIiIiIgAAAO7u7u7u4AAAAAAAAAAAAAAiIiIiIAAAAO7u7u7u7gAAAAAAAAAAAAIiIiIiAAAAAA7u7u7u7uAAAAAAAAAAAiIiIiIgAAAAAADu7u7u7u4AAAAAAAAAIiIiIiIAAAAAAAAO7u7u7u7gAAAAAAAAIiIiIiAAAAAAAAAO7u7u7u7gAAAAAAACIgAiIgAAAAAAAAAA7u7u7u7gAAAAAAACIgAiIAAAAAAAAAAADu7u7u7gAAAAAAACIiIiIAAAAAAAAAAAAO7u7u4AAAAAAAAAIiIiAAAAAAAAAAAAAO7u7uAAAAAAAAAAAiIAAAAAAAAAAAAAAADu7gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==")}, @@ -84,6 +84,15 @@ const unload = () => { Bangle.removeListener("lock", lockHandler); }; +let shortcuts=settings.shortcuts; +let noShortcuts=shortcuts[0]==""&&shortcuts[1]==""&&shortcuts[2]==""; + +let loadShortcut=function(idx){ + if(shortcuts[idx]!=""){ + if(settings.buzz)Bangle.buzz(25); + Bangle.load(shortcuts[idx]+".app.js"); + } +} // 10s of inactivity goes back to clock Bangle.setLocked(false); // unlock initially let lockTimeout; @@ -117,7 +126,7 @@ let showTagMenu = (tag) => { E.showMessage(/*LANG*/"App Source\nNot found"); setTimeout(showMainMenu, 2000); } else { - load(app.src); + Bangle.load(app.src); } }; if(settings.buzz){ @@ -137,21 +146,45 @@ let showTagMenu = (tag) => { let showMainMenu = () => { E.showScroller({ - h : 64*scaleval, c : tagKeys.length, + h : 64*scaleval, c : tagKeys.length+1, draw : (i, r) => { - let tag = tagKeys[i]; g.clearRect((r.x),(r.y),(r.x+r.w-1), (r.y+r.h-1)); - g.setFont(font).setFontAlign(-1,0).drawString(tags[tag].name,64*scaleval,r.y+(32*scaleval)); + + if(!noShortcuts)i-=1; + if(i==-1){ + for(i=0;i<3;i++){ + const img = s.read(shortcuts[i]+".img"); + if (img) { + try { + g.drawImage(img,8*scaleval+((g.getWidth()/3)*i), r.y+(8*scaleval), {scale: scaleval});} + catch(e){} + } + } - const img = tags[tag].icon ? tags[tag].icon() : s.read("taglaunch." + tag + ".img"); - if (img) { - try {g.drawImage(img,8*scaleval, r.y+(8*scaleval), {scale: scaleval});} catch(e){} + + }else{ + let tag = tagKeys[i]; g.setFont(font).setFontAlign(-1,0).drawString(tags[tag].name,64*scaleval,r.y+(32*scaleval)); + + const img = tags[tag].icon ? tags[tag].icon() : s.read("taglaunch." + tag + ".img"); + if (img) { + try {g.drawImage(img,8*scaleval, r.y+(8*scaleval), {scale: scaleval});} catch(e){} + } } }, - select : i => { - if(settings.buzz)Bangle.buzz(25); - let tag = tagKeys[i]; - showTagMenu(tag); + select : (i,e) => { + if(!noShortcuts)i-=1; + if(i==-1){ + if(e.x Date: Fri, 12 Dec 2025 15:21:55 -0500 Subject: [PATCH 03/24] add shortcut setting default --- apps/taglaunch/app.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/apps/taglaunch/app.js b/apps/taglaunch/app.js index c571236c82..5fdd9b18a5 100644 --- a/apps/taglaunch/app.js +++ b/apps/taglaunch/app.js @@ -18,7 +18,8 @@ let font = g.getFonts().includes("12x20") ? "12x20" : "6x8:2"; let settings = Object.assign({ showClocks: true, fullscreen: false, - buzz:false + buzz:false, + shortcuts:["","",""] }, s.readJSON("taglaunch.json", true) || {}); if ("vectorsize" in settings) vectorval = parseInt(settings.vectorsize); From fb433a0736bc9f77058e82e6ff55346aee5938b7 Mon Sep 17 00:00:00 2001 From: RKBoss6 Date: Fri, 12 Dec 2025 15:22:32 -0500 Subject: [PATCH 04/24] Add shortcut apps option to tag menu --- apps/taglaunch/ChangeLog | 1 + 1 file changed, 1 insertion(+) diff --git a/apps/taglaunch/ChangeLog b/apps/taglaunch/ChangeLog index 6574fcb4d5..e088349ab0 100644 --- a/apps/taglaunch/ChangeLog +++ b/apps/taglaunch/ChangeLog @@ -7,3 +7,4 @@ 0.06: Fixed a crash if an app has no tags (app.tags is undefined) 0.07: Clear cached app list when updating showClocks setting 0.08: Add haptic feedback option when selecting app or category in menu, increase vector size limit in settings +0.09: Add option to set up to 3 shortcut apps that you can access straight from the tag menu for quicker access From 25dc225aed8aaaf71c00279133e6ca5cecbdc556 Mon Sep 17 00:00:00 2001 From: RKBoss6 Date: Fri, 12 Dec 2025 15:25:44 -0500 Subject: [PATCH 05/24] Add files via upload --- apps/taglaunch/screenshot2.png | Bin 0 -> 5493 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 apps/taglaunch/screenshot2.png diff --git a/apps/taglaunch/screenshot2.png b/apps/taglaunch/screenshot2.png new file mode 100644 index 0000000000000000000000000000000000000000..b2107d32936f4c63b1b6ad33e8fa43191423f8b1 GIT binary patch literal 5493 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 Date: Fri, 12 Dec 2025 15:26:40 -0500 Subject: [PATCH 06/24] Update version and enhance description in metadata --- apps/taglaunch/metadata.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/apps/taglaunch/metadata.json b/apps/taglaunch/metadata.json index c4cafaa1c5..853772fb45 100644 --- a/apps/taglaunch/metadata.json +++ b/apps/taglaunch/metadata.json @@ -2,15 +2,15 @@ "id": "taglaunch", "name": "Tag Launcher", "shortName": "Taglauncher", - "version": "0.08", + "version": "0.09", "author": "nxdefiant", - "description": "Launcher that puts all applications into submenus based on their tag. With many applications installed this can result in a faster application selection than the linear access from the default launcher.", + "description": "Launcher that puts all applications into submenus based on their tag, with three customizable app shortcuts at the top. With many applications installed this can result in a faster application selection than the linear access from the default launcher.", "readme": "README.md", "icon": "app.png", "type": "launch", "tags": "tool,system,launcher", "supports": ["BANGLEJS2"], - "screenshots": [ {"url":"screenshot.png"} ], + "screenshots": [ {"url":"screenshot.png"},{"url":"screenshot2.png"} ], "storage": [ {"name":"taglaunch.app.js","url":"app.js"}, {"name":"taglaunch.settings.js","url":"settings.js"} From 087466aafb4417667f4ddb404d6af0256c025f17 Mon Sep 17 00:00:00 2001 From: RKBoss6 Date: Fri, 12 Dec 2025 15:26:56 -0500 Subject: [PATCH 07/24] Update shortName from 'Taglauncher' to 'Tag Launch' --- apps/taglaunch/metadata.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/taglaunch/metadata.json b/apps/taglaunch/metadata.json index 853772fb45..f4c4ff1745 100644 --- a/apps/taglaunch/metadata.json +++ b/apps/taglaunch/metadata.json @@ -1,7 +1,7 @@ { "id": "taglaunch", "name": "Tag Launcher", - "shortName": "Taglauncher", + "shortName": "Tag Launch", "version": "0.09", "author": "nxdefiant", "description": "Launcher that puts all applications into submenus based on their tag, with three customizable app shortcuts at the top. With many applications installed this can result in a faster application selection than the linear access from the default launcher.", From 956585685b690d49171e7715201c25fdc1e1794c Mon Sep 17 00:00:00 2001 From: RKBoss6 Date: Fri, 12 Dec 2025 15:29:26 -0500 Subject: [PATCH 08/24] Update README.md --- apps/taglaunch/README.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/apps/taglaunch/README.md b/apps/taglaunch/README.md index cc32f54a1b..0b10ff9181 100644 --- a/apps/taglaunch/README.md +++ b/apps/taglaunch/README.md @@ -1,14 +1,15 @@ Tag Launcher ======== -Based on the default launcher but puts all applications in a submenu by their tag. +Based on the default launcher but puts all applications in a submenu by their tag. There are three customizable spots at the top of the launcher for quicker access to your favorite apps. + With many applications installed this can result in a faster applications selection than the linear access of the default launcher. Currently the following tags are supported: clock, game, tool, bluetooth, outdoors, health and misc. Settings -------- - +- `Shortcuts` - Change the app shortcuts at the top of the launcher. If no apps are set as the shortcut, the launcher will not have a section at the top, instead beginning with the first tag. (Default: No shortcuts) - `Font` - The font used (`4x6`, `6x8`, `12x20`, `6x15` or `Vector`). Default `12x20`. - `Vector Font Size` - The size of the font if `Font` is set to `Vector`. Default `10`. - `Haptic Feedback` - Whether or not to vibrate slightly when selecting an app or category in the launcher. Default `No`. From 9b53b3d28fffd346cd1c115a008e638c99d3a16f Mon Sep 17 00:00:00 2001 From: RKBoss6 Date: Fri, 12 Dec 2025 15:32:25 -0500 Subject: [PATCH 09/24] Update shortcut removal to use E.showPrompt Refactor shortcut removal confirmation to use a prompt. --- apps/taglaunch/settings.js | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/apps/taglaunch/settings.js b/apps/taglaunch/settings.js index 3d12697287..43ad047971 100644 --- a/apps/taglaunch/settings.js +++ b/apps/taglaunch/settings.js @@ -1,7 +1,5 @@ // make sure to enclose the function in parentheses (function(back) { - - let storedBackFn=function(){}; let launchCache; let settings = Object.assign({ showClocks: true, @@ -52,7 +50,15 @@ spotText+="App"; menu[""] = { "title" : spotText}, // Title for the menu - menu["None"] = () => setShortcut("",spot,bk); + menu["None"] = function(){ + E.showPrompt("Remove the "+spotText+" shortcut?",{ + title:"Confirm", + buttons: {"Cancel":false,"Ok":true} + }).then(function(a){ + if(a)setShortcut("",spot,bk); + else showAppList(spot,bk) + }) + } apps.forEach(a => { menu[a.name] = function(){ E.showPrompt("Set "+a.name+" as the "+spotText+"?",{ From 2bdde12e879f476f45bbc4fe5998bcf6f25928da Mon Sep 17 00:00:00 2001 From: RKBoss6 Date: Fri, 12 Dec 2025 15:34:03 -0500 Subject: [PATCH 10/24] Adjust main menu height based on shortcuts availability --- apps/taglaunch/app.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/taglaunch/app.js b/apps/taglaunch/app.js index 5fdd9b18a5..bcc8fe1208 100644 --- a/apps/taglaunch/app.js +++ b/apps/taglaunch/app.js @@ -147,7 +147,7 @@ let showTagMenu = (tag) => { let showMainMenu = () => { E.showScroller({ - h : 64*scaleval, c : tagKeys.length+1, + h : 64*scaleval, c : noShortcuts ? tagKeys.length : tagKeys.length+1, draw : (i, r) => { g.clearRect((r.x),(r.y),(r.x+r.w-1), (r.y+r.h-1)); From 37852a8f52407a77feb57f77dd9633435a04a199 Mon Sep 17 00:00:00 2001 From: RKBoss6 Date: Fri, 12 Dec 2025 15:38:39 -0500 Subject: [PATCH 11/24] Refactor promise handling in settings.js --- apps/taglaunch/settings.js | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/apps/taglaunch/settings.js b/apps/taglaunch/settings.js index 43ad047971..ea440ad303 100644 --- a/apps/taglaunch/settings.js +++ b/apps/taglaunch/settings.js @@ -1,5 +1,6 @@ // make sure to enclose the function in parentheses (function(back) { + let launchCache; let settings = Object.assign({ showClocks: true, @@ -51,11 +52,12 @@ menu[""] = { "title" : spotText}, // Title for the menu menu["None"] = function(){ + E.showPrompt("Remove the "+spotText+" shortcut?",{ title:"Confirm", buttons: {"Cancel":false,"Ok":true} - }).then(function(a){ - if(a)setShortcut("",spot,bk); + }).then(function(v){ + if(v)setShortcut("",spot,bk); else showAppList(spot,bk) }) } @@ -64,8 +66,8 @@ E.showPrompt("Set "+a.name+" as the "+spotText+"?",{ title:"Confirm", buttons: {"Cancel":false,"Ok":true} - }).then(function(a){ - if(a)setShortcut(a.id,spot,bk); + }).then(function(v){ + if(v)setShortcut(a.id,spot,bk); else showAppList(spot,bk) }) } From 9842cafb964cf83b465c910e4cefd96e7c5c5222 Mon Sep 17 00:00:00 2001 From: RKBoss6 Date: Fri, 12 Dec 2025 15:40:39 -0500 Subject: [PATCH 12/24] Refactor loading of shortcuts and app sources --- apps/taglaunch/app.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/taglaunch/app.js b/apps/taglaunch/app.js index bcc8fe1208..826e989313 100644 --- a/apps/taglaunch/app.js +++ b/apps/taglaunch/app.js @@ -91,7 +91,7 @@ let noShortcuts=shortcuts[0]==""&&shortcuts[1]==""&&shortcuts[2]==""; let loadShortcut=function(idx){ if(shortcuts[idx]!=""){ if(settings.buzz)Bangle.buzz(25); - Bangle.load(shortcuts[idx]+".app.js"); + load(shortcuts[idx]+".app.js"); } } // 10s of inactivity goes back to clock @@ -127,7 +127,7 @@ let showTagMenu = (tag) => { E.showMessage(/*LANG*/"App Source\nNot found"); setTimeout(showMainMenu, 2000); } else { - Bangle.load(app.src); + load(app.src); } }; if(settings.buzz){ From f8af1659051374430a7784045541bb11f5d88a5d Mon Sep 17 00:00:00 2001 From: RKBoss6 Date: Fri, 12 Dec 2025 15:46:24 -0500 Subject: [PATCH 13/24] Update apps/taglaunch/settings.js Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- apps/taglaunch/settings.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/taglaunch/settings.js b/apps/taglaunch/settings.js index ea440ad303..1b855ed500 100644 --- a/apps/taglaunch/settings.js +++ b/apps/taglaunch/settings.js @@ -18,7 +18,7 @@ let shortcuts=settings.shortcuts; shortcuts[spot]=id; save("shortcuts",shortcuts); - bk() + bk(); } function showAppList(spot,bk){ From 46ec2e8fc996df904dbb3284f935f949604f6ada Mon Sep 17 00:00:00 2001 From: RKBoss6 Date: Fri, 12 Dec 2025 15:46:43 -0500 Subject: [PATCH 14/24] Update apps/taglaunch/settings.js Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- apps/taglaunch/settings.js | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/apps/taglaunch/settings.js b/apps/taglaunch/settings.js index 1b855ed500..a660243140 100644 --- a/apps/taglaunch/settings.js +++ b/apps/taglaunch/settings.js @@ -29,19 +29,23 @@ Bangle.load("taglaunch.app.js"); }); } else { - var apps = []; var appsByTag = launchCache.appsByTag; + var appsById = {}; for (var tag in appsByTag) { var list = appsByTag[tag]; for (var i = 0; i < list.length; i++) { var app = list[i]; - apps.push({ - name: app.name, - src: app.src || app.name, - id: app.id - }); + // Use app.id as key to deduplicate + if (!appsById[app.id]) { + appsById[app.id] = { + name: app.name, + src: app.src || app.name, + id: app.id + }; + } } } + var apps = Object.values(appsById); var menu = {}; var spotText=""; From cf2dbcbd9dc6f400bfc7193794854e8068a4386c Mon Sep 17 00:00:00 2001 From: RKBoss6 Date: Fri, 12 Dec 2025 15:48:51 -0500 Subject: [PATCH 15/24] Update apps/taglaunch/app.js Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- apps/taglaunch/app.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/taglaunch/app.js b/apps/taglaunch/app.js index 826e989313..73c52b7919 100644 --- a/apps/taglaunch/app.js +++ b/apps/taglaunch/app.js @@ -93,7 +93,7 @@ let loadShortcut=function(idx){ if(settings.buzz)Bangle.buzz(25); load(shortcuts[idx]+".app.js"); } -} +}; // 10s of inactivity goes back to clock Bangle.setLocked(false); // unlock initially let lockTimeout; From 13823c4861a92076ace5448c71020e3590be7455 Mon Sep 17 00:00:00 2001 From: RKBoss6 Date: Fri, 12 Dec 2025 15:49:03 -0500 Subject: [PATCH 16/24] Update apps/taglaunch/app.js Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- apps/taglaunch/app.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/taglaunch/app.js b/apps/taglaunch/app.js index 73c52b7919..9d5d10f593 100644 --- a/apps/taglaunch/app.js +++ b/apps/taglaunch/app.js @@ -176,7 +176,7 @@ let showMainMenu = () => { if(!noShortcuts)i-=1; if(i==-1){ if(e.x Date: Fri, 12 Dec 2025 15:49:54 -0500 Subject: [PATCH 17/24] Update apps/taglaunch/settings.js Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- apps/taglaunch/settings.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/apps/taglaunch/settings.js b/apps/taglaunch/settings.js index a660243140..3cee0ea53f 100644 --- a/apps/taglaunch/settings.js +++ b/apps/taglaunch/settings.js @@ -89,9 +89,9 @@ "< Back":function(){ eval(require("Storage").read("taglaunch.settings.js"))(()=>load()); }, - "Left" : function() { showAppList(0,showSpotMenu); }, - "Center" : function() { showAppList(1,showSpotMenu); }, - "Right" : function() { showAppList(2,showSpotMenu);} + "Left": function() { showAppList(0,showSpotMenu); }, + "Center": function() { showAppList(1,showSpotMenu); }, + "Right": function() { showAppList(2,showSpotMenu);} }) } const appMenu = { From 8acb41939da86bf3048b2fd0efec477ac22e0930 Mon Sep 17 00:00:00 2001 From: RKBoss6 Date: Fri, 12 Dec 2025 15:50:30 -0500 Subject: [PATCH 18/24] Update apps/taglaunch/app.js Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- apps/taglaunch/app.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/apps/taglaunch/app.js b/apps/taglaunch/app.js index 9d5d10f593..54f684f228 100644 --- a/apps/taglaunch/app.js +++ b/apps/taglaunch/app.js @@ -153,11 +153,11 @@ let showMainMenu = () => { if(!noShortcuts)i-=1; if(i==-1){ - for(i=0;i<3;i++){ - const img = s.read(shortcuts[i]+".img"); + for(let j=0;j<3;j++){ + const img = s.read(shortcuts[j]+".img"); if (img) { try { - g.drawImage(img,8*scaleval+((g.getWidth()/3)*i), r.y+(8*scaleval), {scale: scaleval});} + g.drawImage(img,8*scaleval+((g.getWidth()/3)*j), r.y+(8*scaleval), {scale: scaleval});} catch(e){} } } From f033d39cb77859ad097c3a662ca4c76f0fd1038a Mon Sep 17 00:00:00 2001 From: RKBoss6 Date: Fri, 12 Dec 2025 15:51:58 -0500 Subject: [PATCH 19/24] Update app.js --- apps/taglaunch/app.js | 1 + 1 file changed, 1 insertion(+) diff --git a/apps/taglaunch/app.js b/apps/taglaunch/app.js index 54f684f228..b23a1b5df6 100644 --- a/apps/taglaunch/app.js +++ b/apps/taglaunch/app.js @@ -183,6 +183,7 @@ let showMainMenu = () => { loadShortcut(2) } }else{ + if(settings.buzz)Bangle.buzz(25); let tag = tagKeys[i]; showTagMenu(tag); } From 41af7007dec2c5eae33fda7761449d61f576359d Mon Sep 17 00:00:00 2001 From: RKBoss6 Date: Fri, 12 Dec 2025 15:52:52 -0500 Subject: [PATCH 20/24] Update apps/taglaunch/settings.js Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- apps/taglaunch/settings.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/taglaunch/settings.js b/apps/taglaunch/settings.js index 3cee0ea53f..7170ce7046 100644 --- a/apps/taglaunch/settings.js +++ b/apps/taglaunch/settings.js @@ -23,7 +23,7 @@ function showAppList(spot,bk){ //make sure cache is present - launchCache=require("Storage").readJSON("taglaunch.cache.json") + launchCache=require("Storage").readJSON("taglaunch.cache.json"); if (!launchCache || !launchCache.appsByTag) { E.showAlert("Caching apps, returning to launcher","Loading").then(function(v){ Bangle.load("taglaunch.app.js"); From e2ee0876f83a963fe477c2a4f865f638c33d8c68 Mon Sep 17 00:00:00 2001 From: RKBoss6 Date: Fri, 12 Dec 2025 15:53:07 -0500 Subject: [PATCH 21/24] Update apps/taglaunch/settings.js Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- apps/taglaunch/settings.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/taglaunch/settings.js b/apps/taglaunch/settings.js index 7170ce7046..7bb3268c48 100644 --- a/apps/taglaunch/settings.js +++ b/apps/taglaunch/settings.js @@ -53,7 +53,7 @@ if(spot==1)spotText+="Center "; if(spot==2)spotText+="Right "; spotText+="App"; - menu[""] = { "title" : spotText}, // Title for the menu + menu[""] = { "title" : spotText }; // Title for the menu menu["None"] = function(){ From 7fe9020d52b2c62582aaf0aa04d60933352d9b69 Mon Sep 17 00:00:00 2001 From: RKBoss6 Date: Fri, 12 Dec 2025 15:53:35 -0500 Subject: [PATCH 22/24] Update shortName in metadata.json --- apps/taglaunch/metadata.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/taglaunch/metadata.json b/apps/taglaunch/metadata.json index f4c4ff1745..853772fb45 100644 --- a/apps/taglaunch/metadata.json +++ b/apps/taglaunch/metadata.json @@ -1,7 +1,7 @@ { "id": "taglaunch", "name": "Tag Launcher", - "shortName": "Tag Launch", + "shortName": "Taglauncher", "version": "0.09", "author": "nxdefiant", "description": "Launcher that puts all applications into submenus based on their tag, with three customizable app shortcuts at the top. With many applications installed this can result in a faster application selection than the linear access from the default launcher.", From 0db209c0515ffadd8c9b1d240bfb1329d2be51f7 Mon Sep 17 00:00:00 2001 From: RKBoss6 Date: Mon, 15 Dec 2025 11:53:29 -0500 Subject: [PATCH 23/24] Add delay to loadShortcut function for buzz effect --- apps/taglaunch/app.js | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/apps/taglaunch/app.js b/apps/taglaunch/app.js index b23a1b5df6..df9c9b295d 100644 --- a/apps/taglaunch/app.js +++ b/apps/taglaunch/app.js @@ -1,7 +1,6 @@ { // must be inside our own scope here so that when we are unloaded everything disappears let s = require("Storage"); // TODO: Allow to change sortorder in settings - let tags = {"clock": {name: /*LANG*/"Clocks", icon: () => atob("MDCEBERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERESIiIiIREREREREREREREREREREREREiIiIiIiIiIhERERERERERERERERERESIiIiIiIiIiIiIREREREREREREREREREiIiIiIiIiIiIiIhERERERERERERERESIiIiIgz//8ziIiIiIREREREREREREREiIiIg////////ziIiIhERERERERERERIiIiD//////////84iIiERERERERERESIiIg/////8A/////ziIiIRERERERERESIiI//////8A//////+IiIREREREREREiIiP//////8A///////4iIhERERERERIiIg///////8A///////ziIiERERERERIiIP///////8A////////OIiERERERESIiI////////8A////////+IiIRERERESIiD////////8A////////84iIRERERESIiP////////8A/////////4iIRERERESIiP////////8A/////////4iIREREREiIg/////////8A/////////ziIhEREREiIg/////////IAL////////ziIhEREREiIj////////yAAAv////////iIhEREREiIgiIv/////wCIAP/////yIiiIhEREREiIgiIv/////wCIAP/////yIiiIhEREREiIj////////yAAAD////////iIhEREREiIg/////////IAABP//////ziIhEREREiIg///////////IAE//////ziIhERERESIiP//////////8gAT/////4iIRERERESIiP///////////yABP////4iIRERERESIiD////////////IAL///84iIRERERESIiI////////////8i////+IiIRERERERIiIP/////////////////OIiERERERERIiIg////////////////ziIiEREREREREiIiP///////////////4iIhERERERERESIiI//////////////+IiIRERERERERESIiIg/////8i/////ziIiIRERERERERERIiIiD////8i////84iIiEREREREREREREiIiIg///8i///ziIiIhERERERERERERESIiIiIgz8i8ziIiIiIREREREREREREREREiIiIiIiIiIiIiIhERERERERERERERERESIiIiIiIiIiIiIREREREREREREREREREREiIiIiIiIiIhERERERERERERERERERERERESIiIiIRERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERA==")}, "game": {name: /*LANG*/"Games", sortorder: 1, icon: () => atob("MDCEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAzMzMzMzMzMzMzMzMzMzMzMwAAAAAAAAAzMzMzMzMzMzMzMzMzMzMzMwAAAAAAAAAzIiIiIiIiIiIiIiIiIiIiMwAAAAAAAAAzL///IiIi////IiIi///yMwAAAAAAAAAzL///IiIi////IiIi///yMwAAAAAAAAAzL///IiIi////IiIi///yMwAAAAAAAAAzL///IiIi////IiIi///yMwAAAAAAAAAzL///IiIi////IiIi///yMwAAAAAAAAAzIiIi////IiIi////IiIiMwAAAAAAAAAzIiIi////IiIi////IiIiMwAAAAAAAAAzIiIi////IiIi////IiIiMwAAAAAAAAAzIiIi////IiIi////IiIiMwAAAAAAAAAzIiIi////IiIi////IiIiMwAAAAAAAAAzIiIi////IiIi////IiIiMwAAAAAAAAAzL///IiIi////IiIi///yMwAAAAAAAAAzL///IiIi////IiIi///yMwAAAAAAAAAzL///IiIi////IiIi8R/xERABEAAAAAAzL///IiIi////IiIi8R/xERABEAAAAAAzL///IiIi////IiIi8R/xERABEAAAAAAzL///IiIi////IiIi8RMxERABEAAAAAAzIiIi////IiIi////IREREREREAAAAAAzIiIi////IiIi////IREREREREAAAAAAzIiIi////IiIi////IREREREREAAAAAAzIiIi////IiIi////IhERERERAAAAAAAzIiIi////IiIi////IiMzMzMwAAAAAAAzIiIi////IiIi////IiMzMzMwAAAAAAAzL///IiIi////IiIi///xERAAAAAAAAAzL///IiIi////IiIi//8xERAAAAAAAAAzL///IiIi////IiIi//8hEREAAAAAAAAzL///IiIi////IiIi//8REREAAAAAAAAzL///IiIi////IiIi//MREREAAAAAAAAzIiIiIiIiIiIiIiIiIzMzMzMzMAAAAAAzMzMzMzMzMzMzMzMzMzMzMzMzMAAAAAAzMzMzMzMzMzMzMzMzMhEREREREAAAAAAAAAAAAAAAAAAAAAAAEREREREREQAAAAAAAAAAAAAAAAAAAAAAEREREREREQAAAAAAAAAAAAAAAAAAAAAAEREREREREQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==")}, "tool": {name: /*LANG*/"Tools", sortorder: -1, icon: () => atob("MDCEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMwAAAAAAAAAAAAAAIiIgAAAAAAAAAAADMzMAAAAAAAAAAAAiIiIgAAAAAAAAAAADMzMwAAAAAAAAAAIiIiIAAAAAAAAAAAAAMzMzAAAAAAAAACIiIiAAAAAAAAAAAAAAMzMzMAAAAAAAACIiIgAAAAAAAAAAAAAAAzMzMAAAAAAAAiIiIAAAAAAAAAAAAAAAADMzMwAAAAAAAiIiIAAAAAIgAAAAAAAAAAMzMzAAAAAAAiIiIgAAACIgAAAAAAAAAAADMzMAAAAAAiIiIiAAAiIgAAAAAAAAAAAAMzMwAAAAAiIiIiIAIiIgAAAAAAAAAAAAAzMzAAAAACIiIiIiIiIgAAAAAAAAAAAAADMzMAAAAiIiIiIiIiIAAAAAAAAAAAAAAAMzMwDdQiIiIiIiIiIAAAAAAAAAAAAAAAAzMz3d0iIiIiIiIiAAAAAAAAAAAAAAAAADM93d1CIiIiIiIgAAAAAAAAAAAAAAAAAAPd3d3iIiACIiAAAAAAAAAAAAAAAAAAAA3d3d7kIgAAAAAAAAAAAAAAAAAAAAAAAN3d3e7uQAAAAAAAAAAAAAAAAAAAAAAAAN3d3u7u4AAAAAAAAAAAAAAAAAAAAAAAAC3d7u7u7gAAAAAAAAAAAAAAAAAAAAAAAiJO7u7u7uAAAAAAAAAAAAAAAAAAAAAAIiIiTu7u7u7gAAAAAAAAAAAAAAAAAAACIiIiIu7u7u7uAAAAAAAAAAAAAAAAAAAiIiIiIA7u7u7u4AAAAAAAAAAAAAAAAAIiIiIiAADu7u7u7uAAAAAAAAAAAAAAACIiIiIgAAAO7u7u7u4AAAAAAAAAAAAAAiIiIiIAAAAO7u7u7u7gAAAAAAAAAAAAIiIiIiAAAAAA7u7u7u7uAAAAAAAAAAAiIiIiIgAAAAAADu7u7u7u4AAAAAAAAAIiIiIiIAAAAAAAAO7u7u7u7gAAAAAAAAIiIiIiAAAAAAAAAO7u7u7u7gAAAAAAACIgAiIgAAAAAAAAAA7u7u7u7gAAAAAAACIgAiIAAAAAAAAAAADu7u7u7gAAAAAAACIiIiIAAAAAAAAAAAAO7u7u4AAAAAAAAAIiIiAAAAAAAAAAAAAO7u7uAAAAAAAAAAAiIAAAAAAAAAAAAAAADu7gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==")}, @@ -91,7 +90,7 @@ let noShortcuts=shortcuts[0]==""&&shortcuts[1]==""&&shortcuts[2]==""; let loadShortcut=function(idx){ if(shortcuts[idx]!=""){ if(settings.buzz)Bangle.buzz(25); - load(shortcuts[idx]+".app.js"); + setTimeout(function(){load(shortcuts[idx]+".app.js")},27); //let buzz have effect } }; // 10s of inactivity goes back to clock From 742d518feb6cb93748eebf934f9ef2be38ec4d88 Mon Sep 17 00:00:00 2001 From: RKBoss6 Date: Mon, 15 Dec 2025 21:31:11 -0500 Subject: [PATCH 24/24] Update apps/taglaunch/app.js Co-authored-by: Rob Pilling --- apps/taglaunch/app.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/taglaunch/app.js b/apps/taglaunch/app.js index df9c9b295d..df187b3fd8 100644 --- a/apps/taglaunch/app.js +++ b/apps/taglaunch/app.js @@ -89,8 +89,8 @@ let noShortcuts=shortcuts[0]==""&&shortcuts[1]==""&&shortcuts[2]==""; let loadShortcut=function(idx){ if(shortcuts[idx]!=""){ - if(settings.buzz)Bangle.buzz(25); - setTimeout(function(){load(shortcuts[idx]+".app.js")},27); //let buzz have effect + const p = settings.buzz ? Bangle.buzz(25) : Promise.resolve(); + p.then(() => load(shortcuts[idx]+".app.js")); } }; // 10s of inactivity goes back to clock