Merge pull request #2203 from halemmerich/quicklaunch

Quicklaunch - Improve performance
pull/2209/head
Gordon Williams 2022-10-28 08:58:35 +01:00 committed by GitHub
commit a42b79a7c7
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 35 additions and 68 deletions

View File

@ -1,2 +1,3 @@
0.01: Initial version
0.02: Moved settings from launcher to settings->apps menu
0.03: Better performance by not scanning on every boot

View File

@ -1,67 +1,29 @@
(function() {
var settings = Object.assign(require("Storage").readJSON("quicklaunch.json", true) || {});
{
let settings = Object.assign(require("Storage").readJSON("quicklaunch.json", true) || {});
//list all sources
var apps = require("Storage").list(/\.info$/).map(app=>{var a=require("Storage").readJSON(app,1);return a&&{src:a.src};});
//populate empty app list
if (!settings.leftapp) {
settings["leftapp"] = {"name":"(none)"};
require("Storage").write("quicklaunch.json",settings);
}
if (!settings.rightapp) {
settings["rightapp"] = {"name":"(none)"};
require("Storage").write("quicklaunch.json",settings);
}
if (!settings.upapp) {
settings["upapp"] = {"name":"(none)"};
require("Storage").write("quicklaunch.json",settings);
}
if (!settings.downapp) {
settings["downapp"] = {"name":"(none)"};
require("Storage").write("quicklaunch.json",settings);
}
if (!settings.tapapp) {
settings["tapapp"] = {"name":"(none)"};
require("Storage").write("quicklaunch.json",settings);
}
let hash = require("Storage").hash(/\.info/);
if (settings.hash!=hash) {
//apps changed, rescan and remove no longer existing apps
let apps = require("Storage").list(/\.info$/).map(app=>{var a=require("Storage").readJSON(app,1);return a&&{src:a.src};});
//activate on clock faces
var sui = Bangle.setUI;
Bangle.setUI = function(mode, cb) {
sui(mode,cb);
if(!mode) return;
if ("object"==typeof mode) mode = mode.mode;
if (!mode.startsWith("clock")) return;
function tap() {
//tap, check if source exists, launch
if ((settings.tapapp.src) && apps.some(e => e.src === settings.tapapp.src)) load (settings.tapapp.src);
}
let drag;
let e;
Bangle.on("touch",tap);
Bangle.on("drag", e => {
if (!drag) { // start dragging
drag = {x: e.x, y: e.y};
} else if (!e.b) { // released
const dx = e.x-drag.x, dy = e.y-drag.y;
drag = null;
//horizontal swipes, check if source exists, launch
if (Math.abs(dx)>Math.abs(dy)+10) {
if ((settings.leftapp.src) && apps.some(e => e.src === settings.leftapp.src) && dx<0) load(settings.leftapp.src);
if ((settings.rightapp.src) && apps.some(e => e.src === settings.rightapp.src) && dx>0) load(settings.rightapp.src);
}
//vertical swipes, check if source exists, launch
else if (Math.abs(dy)>Math.abs(dx)+10) {
if ((settings.upapp.src) && apps.some(e => e.src === settings.upapp.src) && dy<0) load(settings.upapp.src);
if ((settings.downapp.src) && apps.some(e => e.src === settings.downapp.src) && dy>0) load(settings.downapp.src);
}
for (let c of ["leftapp","rightapp","upapp","downapp","tapapp"]){
if (!settings[c]) settings[c] = {"name":"(none)"};
if (!require("Storage").read(settings[c].src)) settings[c] = {"name":"(none)"};
}
});
settings.hash = hash;
require("Storage").write("quicklaunch.json",settings);
}
};
})();
Bangle.on("touch", () => {
if (!Bangle.CLOCK) return;
if (settings.tapapp.src) load(settings.tapapp.src);
});
Bangle.on("swipe", (lr,ud) => {
if (!Bangle.CLOCK) return;
if (lr == -1 && settings.leftapp.src) load(settings.leftapp.src);
if (lr == 1 && settings.rightapp.src) load(settings.rightapp.src);
if (ud == 1 && settings.upapp.src) load(settings.upapp.src);
if (ud == -1 && settings.downapp.src) load(settings.downapp.src);
});
}

View File

@ -2,7 +2,7 @@
"id": "quicklaunch",
"name": "Quick Launch",
"icon": "app.png",
"version":"0.02",
"version":"0.03",
"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",

View File

@ -1,6 +1,10 @@
(function(back) {
var settings = Object.assign(require("Storage").readJSON("quicklaunch.json", true) || {});
for (let c of ["leftapp","rightapp","upapp","downapp","tapapp"]){
if (!settings[c]) settings[c] = {"name":"(none)"};
}
var apps = require("Storage").list(/\.info$/).map(app=>{var a=require("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));
apps.sort((a,b)=>{
@ -29,11 +33,11 @@ function showMainMenu() {
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); };
return E.showMenu(mainmenu);
}
//Left swipe menu
//Left swipe menu
var leftmenu = {
"" : { "title" : "Left Swipe" },
"< Back" : showMainMenu
@ -119,4 +123,4 @@ apps.forEach((a)=>{
});
showMainMenu();
});
})