2022-04-28 07:10:50 +00:00
|
|
|
(function(back) {
|
2023-02-12 20:30:38 +00:00
|
|
|
var storage = require("Storage");
|
|
|
|
var settings = Object.assign(storage.readJSON("quicklaunch.json", true) || {});
|
2022-04-28 07:10:50 +00:00
|
|
|
|
2023-03-12 01:27:03 +00:00
|
|
|
// 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.
|
2023-03-12 11:22:02 +00:00
|
|
|
if (!settings[c]) settings[c] = {"name":""};
|
2023-03-12 01:27:03 +00:00
|
|
|
}
|
|
|
|
|
2023-03-12 12:41:23 +00:00
|
|
|
// Always check it Fastload Utils is installed.
|
|
|
|
if (!settings.fuInstalled) settings.fuInstalled = false;
|
|
|
|
if (storage.read("fastload.utils",0,1)) settings.fuInstalled = true;
|
|
|
|
|
2023-03-12 01:14:28 +00:00
|
|
|
// 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];
|
2023-03-12 11:22:02 +00:00
|
|
|
if (settings[cNew].name=="(none)") settings[cNew].name = "";
|
2023-03-12 01:14:28 +00:00
|
|
|
|
|
|
|
if (settings[cNew].name=="Quick Launch Extension"){
|
|
|
|
settings[cNew].name = "Extension";
|
|
|
|
for (let d of ["extleftapp","extrightapp","extupapp","extdownapp","exttapapp"]){
|
|
|
|
if (settings[d]) {
|
2023-03-12 01:27:03 +00:00
|
|
|
let dNew = cNew.substring(0,1)+d.substring(3,4)+"app";
|
2023-03-12 01:14:28 +00:00
|
|
|
settings[dNew] = settings[d];
|
2023-03-12 11:35:03 +00:00
|
|
|
delete settings[d];
|
2023-03-12 11:22:02 +00:00
|
|
|
if (settings[dNew].name=="(none)") settings[dNew].name = "";
|
2023-03-12 01:14:28 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
2023-03-12 01:36:53 +00:00
|
|
|
storage.writeJSON("quicklaunch.json",settings);
|
2023-03-12 01:14:28 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
for (let d of ["extleftapp","extrightapp","extupapp","extdownapp","exttapapp"]){
|
|
|
|
if (settings[d]) delete settings[d];
|
|
|
|
}
|
|
|
|
|
2023-02-12 20:30:38 +00:00
|
|
|
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));
|
2022-04-28 07:10:50 +00:00
|
|
|
|
2022-11-20 16:25:21 +00:00
|
|
|
// Add psuedo app to trigger Bangle.showLauncher later
|
|
|
|
apps.push({
|
|
|
|
"name": "Show Launcher",
|
2023-02-13 18:33:57 +00:00
|
|
|
"type": undefined,
|
2023-02-13 18:58:38 +00:00
|
|
|
"sortorder": -12,
|
2023-02-12 20:30:38 +00:00
|
|
|
"src": "no source"
|
2022-11-20 16:25:21 +00:00
|
|
|
});
|
|
|
|
|
2023-02-13 21:35:58 +00:00
|
|
|
// Add the Quick Launch extension app
|
2023-03-11 17:57:00 +00:00
|
|
|
let extension = {
|
2023-03-12 00:11:07 +00:00
|
|
|
"name": "Extension",
|
2023-02-13 18:33:57 +00:00
|
|
|
"type": "app",
|
2023-02-13 18:58:38 +00:00
|
|
|
"sortorder": -11,
|
2023-02-13 18:33:57 +00:00
|
|
|
"src": "quicklaunch.app.js"
|
2023-03-11 21:48:59 +00:00
|
|
|
};
|
2023-03-11 17:57:00 +00:00
|
|
|
apps.push(extension);
|
2023-02-13 18:33:57 +00:00
|
|
|
|
2022-04-28 07:10:50 +00:00
|
|
|
apps.sort((a,b)=>{
|
|
|
|
var n=(0|a.sortorder)-(0|b.sortorder);
|
|
|
|
if (n) return n; // do sortorder first
|
|
|
|
if (a.name<b.name) return -1;
|
|
|
|
if (a.name>b.name) return 1;
|
|
|
|
return 0;
|
|
|
|
});
|
|
|
|
|
2023-03-11 21:48:59 +00:00
|
|
|
function findPath(key) {return key.substring(0, key.length-3);}
|
2023-03-11 17:57:00 +00:00
|
|
|
|
2022-04-28 07:10:50 +00:00
|
|
|
function save(key, value) {
|
2023-03-11 17:57:00 +00:00
|
|
|
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) {
|
2023-03-11 21:48:59 +00:00
|
|
|
for (let c of [path+"lapp", path+"rapp", path+"uapp", path+"dapp", path+"tapp"]) {
|
2023-03-11 17:57:00 +00:00
|
|
|
delete settings[c];
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
// If changing to extension app (from something else) add downstream settings entries.
|
2023-03-12 00:11:07 +00:00
|
|
|
if (value.name == extension.name && settings[key].name != extension.name) {
|
2023-03-11 17:57:00 +00:00
|
|
|
for (let c of [path+"lapp", path+"rapp", path+"uapp", path+"dapp", path+"tapp"]) {
|
2023-03-12 11:22:02 +00:00
|
|
|
settings[c] = {"name":""};
|
2023-03-11 21:48:59 +00:00
|
|
|
storage.write("quicklaunch.json",settings);
|
2023-03-11 17:57:00 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
// Now change the setting on the current level in the path.
|
2022-04-28 07:10:50 +00:00
|
|
|
settings[key] = value;
|
2023-03-12 00:11:07 +00:00
|
|
|
storage.writeJSON("quicklaunch.json",settings);
|
2022-04-28 07:10:50 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
function showMainMenu() {
|
2023-02-12 20:30:38 +00:00
|
|
|
// Quick Launch menu
|
2022-04-28 07:10:50 +00:00
|
|
|
var mainmenu = {
|
|
|
|
"" : { "title" : "Quick Launch" },
|
|
|
|
"< Back" : ()=>{load();}
|
|
|
|
};
|
|
|
|
|
2023-03-12 11:22:02 +00:00
|
|
|
// List all selected apps.
|
2023-03-11 21:48:59 +00:00
|
|
|
for (let key of Object.keys(settings)) {
|
2023-03-12 00:11:07 +00:00
|
|
|
if (key == "trace") continue;
|
2023-03-11 21:48:59 +00:00
|
|
|
let keyCurrent = key;
|
2023-03-12 00:11:07 +00:00
|
|
|
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";
|
2023-03-12 11:22:02 +00:00
|
|
|
// 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);};
|
2023-03-11 21:48:59 +00:00
|
|
|
}
|
2022-10-27 16:09:01 +00:00
|
|
|
|
2022-04-28 07:10:50 +00:00
|
|
|
return E.showMenu(mainmenu);
|
|
|
|
}
|
2022-10-27 16:09:01 +00:00
|
|
|
|
2023-03-11 17:57:00 +00:00
|
|
|
function showSubMenu(key) {
|
|
|
|
var submenu = {
|
2023-03-12 02:24:16 +00:00
|
|
|
"" : { "title" : "Path: "+findPath(key).toUpperCase()},
|
2023-03-11 17:57:00 +00:00
|
|
|
"< Back" : showMainMenu
|
|
|
|
};
|
|
|
|
|
|
|
|
submenu["(none)"] = function() {
|
2023-03-12 11:22:02 +00:00
|
|
|
save(key, {"name":""});
|
2022-04-28 07:10:50 +00:00
|
|
|
showMainMenu();
|
2023-02-12 20:30:38 +00:00
|
|
|
};
|
2023-03-11 17:57:00 +00:00
|
|
|
apps.forEach((a)=>{
|
|
|
|
submenu[a.name] = function() {
|
|
|
|
save(key, a);
|
|
|
|
showMainMenu();
|
|
|
|
};
|
|
|
|
});
|
|
|
|
|
|
|
|
return E.showMenu(submenu);
|
2023-02-12 20:30:38 +00:00
|
|
|
}
|
|
|
|
|
2022-04-28 07:10:50 +00:00
|
|
|
showMainMenu();
|
2022-10-27 16:09:01 +00:00
|
|
|
})
|