Fast load to clockface on B2
parent
5374b1af30
commit
ffd85de635
|
|
@ -14,3 +14,4 @@
|
||||||
0.14: Don't move pages when doing exit swipe - Bangle 2.
|
0.14: Don't move pages when doing exit swipe - Bangle 2.
|
||||||
0.15: 'Swipe to exit'-code is slightly altered to be more reliable - Bangle 2.
|
0.15: 'Swipe to exit'-code is slightly altered to be more reliable - Bangle 2.
|
||||||
0.16: Use default Bangle formatter for booleans
|
0.16: Use default Bangle formatter for booleans
|
||||||
|
0.17: Bangle 2: Fast loading on exit to clock face
|
||||||
|
|
|
||||||
|
|
@ -1,28 +1,31 @@
|
||||||
|
{ // must be inside our own scope here so that when we are unloaded everything disappears
|
||||||
|
|
||||||
/* Desktop launcher
|
/* Desktop launcher
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
var settings = Object.assign({
|
let settings = Object.assign({
|
||||||
showClocks: true,
|
showClocks: true,
|
||||||
showLaunchers: true,
|
showLaunchers: true,
|
||||||
direct: false,
|
direct: false,
|
||||||
oneClickExit:false,
|
oneClickExit:false,
|
||||||
swipeExit: false
|
swipeExit: false,
|
||||||
|
fastload: false,
|
||||||
}, require('Storage').readJSON("dtlaunch.json", true) || {});
|
}, require('Storage').readJSON("dtlaunch.json", true) || {});
|
||||||
|
|
||||||
if( settings.oneClickExit)
|
if( settings.oneClickExit)
|
||||||
setWatch(_=> load(), BTN1);
|
setWatch(_=> returnToClock, BTN1);
|
||||||
|
|
||||||
var s = require("Storage");
|
let s = require("Storage");
|
||||||
var apps = s.list(/\.info$/).map(app=>{
|
var apps = s.list(/\.info$/).map(app=>{
|
||||||
var a=s.readJSON(app,1);
|
let a=s.readJSON(app,1);
|
||||||
return a && {
|
return a && {
|
||||||
name:a.name, type:a.type, icon:a.icon, sortorder:a.sortorder, src:a.src
|
name:a.name, type:a.type, icon:a.icon, sortorder:a.sortorder, src:a.src
|
||||||
};}).filter(
|
};}).filter(
|
||||||
app=>app && (app.type=="app" || (app.type=="clock" && settings.showClocks) || (app.type=="launch" && settings.showLaunchers) || !app.type));
|
app=>app && (app.type=="app" || (app.type=="clock" && settings.showClocks) || (app.type=="launch" && settings.showLaunchers) || !app.type));
|
||||||
|
|
||||||
apps.sort((a,b)=>{
|
apps.sort((a,b)=>{
|
||||||
var n=(0|a.sortorder)-(0|b.sortorder);
|
let n=(0|a.sortorder)-(0|b.sortorder);
|
||||||
if (n) return n; // do sortorder first
|
if (n) return n; // do sortorder first
|
||||||
if (a.name<b.name) return -1;
|
if (a.name<b.name) return -1;
|
||||||
if (a.name>b.name) return 1;
|
if (a.name>b.name) return 1;
|
||||||
|
|
@ -33,28 +36,28 @@ apps.forEach(app=>{
|
||||||
app.icon = s.read(app.icon); // should just be a link to a memory area
|
app.icon = s.read(app.icon); // should just be a link to a memory area
|
||||||
});
|
});
|
||||||
|
|
||||||
var Napps = apps.length;
|
let Napps = apps.length;
|
||||||
var Npages = Math.ceil(Napps/4);
|
let Npages = Math.ceil(Napps/4);
|
||||||
var maxPage = Npages-1;
|
let maxPage = Npages-1;
|
||||||
var selected = -1;
|
let selected = -1;
|
||||||
var oldselected = -1;
|
let oldselected = -1;
|
||||||
var page = 0;
|
let page = 0;
|
||||||
const XOFF = 24;
|
const XOFF = 24;
|
||||||
const YOFF = 30;
|
const YOFF = 30;
|
||||||
|
|
||||||
function draw_icon(p,n,selected) {
|
function draw_icon(p,n,selected) {
|
||||||
var x = (n%2)*72+XOFF;
|
let x = (n%2)*72+XOFF;
|
||||||
var y = n>1?72+YOFF:YOFF;
|
let y = n>1?72+YOFF:YOFF;
|
||||||
(selected?g.setColor(g.theme.fgH):g.setColor(g.theme.bg)).fillRect(x+11,y+3,x+60,y+52);
|
(selected?g.setColor(g.theme.fgH):g.setColor(g.theme.bg)).fillRect(x+11,y+3,x+60,y+52);
|
||||||
g.clearRect(x+12,y+4,x+59,y+51);
|
g.clearRect(x+12,y+4,x+59,y+51);
|
||||||
g.setColor(g.theme.fg);
|
g.setColor(g.theme.fg);
|
||||||
try{g.drawImage(apps[p*4+n].icon,x+12,y+4);} catch(e){}
|
try{g.drawImage(apps[p*4+n].icon,x+12,y+4);} catch(e){}
|
||||||
g.setFontAlign(0,-1,0).setFont("6x8",1);
|
g.setFontAlign(0,-1,0).setFont("6x8",1);
|
||||||
var txt = apps[p*4+n].name.replace(/([a-z])([A-Z])/g, "$1 $2").split(" ");
|
let txt = apps[p*4+n].name.replace(/([a-z])([A-Z])/g, "$1 $2").split(" ");
|
||||||
var lineY = 0;
|
let lineY = 0;
|
||||||
var line = "";
|
let line = "";
|
||||||
while (txt.length > 0){
|
while (txt.length > 0){
|
||||||
var c = txt.shift();
|
let c = txt.shift();
|
||||||
|
|
||||||
if (c.length + 1 + line.length > 13){
|
if (c.length + 1 + line.length > 13){
|
||||||
if (line.length > 0){
|
if (line.length > 0){
|
||||||
|
|
@ -72,24 +75,24 @@ function draw_icon(p,n,selected) {
|
||||||
function drawPage(p){
|
function drawPage(p){
|
||||||
g.reset();
|
g.reset();
|
||||||
g.clearRect(0,24,175,175);
|
g.clearRect(0,24,175,175);
|
||||||
var O = 88+YOFF/2-12*(Npages/2);
|
let O = 88+YOFF/2-12*(Npages/2);
|
||||||
for (var j=0;j<Npages;j++){
|
for (let j=0;j<Npages;j++){
|
||||||
var y = O+j*12;
|
let y = O+j*12;
|
||||||
g.setColor(g.theme.fg);
|
g.setColor(g.theme.fg);
|
||||||
if (j==page) g.fillCircle(XOFF/2,y,4);
|
if (j==page) g.fillCircle(XOFF/2,y,4);
|
||||||
else g.drawCircle(XOFF/2,y,4);
|
else g.drawCircle(XOFF/2,y,4);
|
||||||
}
|
}
|
||||||
for (var i=0;i<4;i++) {
|
for (let i=0;i<4;i++) {
|
||||||
if (!apps[p*4+i]) return i;
|
if (!apps[p*4+i]) return i;
|
||||||
draw_icon(p,i,selected==i && !settings.direct);
|
draw_icon(p,i,selected==i && !settings.direct);
|
||||||
}
|
}
|
||||||
g.flip();
|
g.flip();
|
||||||
}
|
}
|
||||||
|
|
||||||
Bangle.on("swipe",(dirLeftRight, dirUpDown)=>{
|
function swipeListenerDt(dirLeftRight, dirUpDown){
|
||||||
selected = 0;
|
selected = 0;
|
||||||
oldselected=-1;
|
oldselected=-1;
|
||||||
if(settings.swipeExit && dirLeftRight==1) load();
|
if(settings.swipeExit && dirLeftRight==1) returnToClock();
|
||||||
if (dirUpDown==-1||dirLeftRight==-1){
|
if (dirUpDown==-1||dirLeftRight==-1){
|
||||||
++page; if (page>maxPage) page=0;
|
++page; if (page>maxPage) page=0;
|
||||||
drawPage(page);
|
drawPage(page);
|
||||||
|
|
@ -97,17 +100,18 @@ Bangle.on("swipe",(dirLeftRight, dirUpDown)=>{
|
||||||
--page; if (page<0) page=maxPage;
|
--page; if (page<0) page=maxPage;
|
||||||
drawPage(page);
|
drawPage(page);
|
||||||
}
|
}
|
||||||
});
|
}
|
||||||
|
Bangle.on("swipe",swipeListenerDt);
|
||||||
|
|
||||||
function isTouched(p,n){
|
function isTouched(p,n){
|
||||||
if (n<0 || n>3) return false;
|
if (n<0 || n>3) return false;
|
||||||
var x1 = (n%2)*72+XOFF; var y1 = n>1?72+YOFF:YOFF;
|
let x1 = (n%2)*72+XOFF; let y1 = n>1?72+YOFF:YOFF;
|
||||||
var x2 = x1+71; var y2 = y1+81;
|
let x2 = x1+71; let y2 = y1+81;
|
||||||
return (p.x>x1 && p.y>y1 && p.x<x2 && p.y<y2);
|
return (p.x>x1 && p.y>y1 && p.x<x2 && p.y<y2);
|
||||||
}
|
}
|
||||||
|
|
||||||
Bangle.on("touch",(_,p)=>{
|
function touchListenerDt(_,p){
|
||||||
var i;
|
let i;
|
||||||
for (i=0;i<4;i++){
|
for (i=0;i<4;i++){
|
||||||
if((page*4+i)<Napps){
|
if((page*4+i)<Napps){
|
||||||
if (isTouched(p,i)) {
|
if (isTouched(p,i)) {
|
||||||
|
|
@ -116,7 +120,7 @@ Bangle.on("touch",(_,p)=>{
|
||||||
if (selected!=i && !settings.direct){
|
if (selected!=i && !settings.direct){
|
||||||
draw_icon(page,selected,false);
|
draw_icon(page,selected,false);
|
||||||
} else {
|
} else {
|
||||||
load(apps[page*4+i].src);
|
loadApp(apps[page*4+i].src);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
selected=i;
|
selected=i;
|
||||||
|
|
@ -128,9 +132,53 @@ Bangle.on("touch",(_,p)=>{
|
||||||
draw_icon(page,selected,false);
|
draw_icon(page,selected,false);
|
||||||
selected=-1;
|
selected=-1;
|
||||||
}
|
}
|
||||||
});
|
}
|
||||||
|
Bangle.on("touch",touchListenerDt);
|
||||||
|
|
||||||
|
const returnToClock = function() { // Delete virtually everything, don't know if some deletes are unnecessary.
|
||||||
|
Bangle.setUI();
|
||||||
|
if (watch) clearWatch(watch);
|
||||||
|
delete s;
|
||||||
|
delete a;
|
||||||
|
delete n;
|
||||||
|
delete Napps;
|
||||||
|
delete Npages;
|
||||||
|
delete maxPage;
|
||||||
|
delete selected;
|
||||||
|
delete oldselected;
|
||||||
|
delete page;
|
||||||
|
delete XOFF;
|
||||||
|
delete YOFF;
|
||||||
|
delete x;
|
||||||
|
delete y;
|
||||||
|
delete txt;
|
||||||
|
delete lineY;
|
||||||
|
delete line;
|
||||||
|
delete c;
|
||||||
|
delete O;
|
||||||
|
delete x1;
|
||||||
|
delete x2;
|
||||||
|
delete i;
|
||||||
|
Bangle.removeListener("swipe", swipeListenerDt);
|
||||||
|
Bangle.removeListener("touch", touchListenerDt);
|
||||||
|
var apps = [];
|
||||||
|
delete apps;
|
||||||
|
delete returnToClock;
|
||||||
|
delete settings;
|
||||||
|
delete watch;
|
||||||
|
delete loadApp;
|
||||||
|
setTimeout(eval, 0, s.read(".bootcde"));
|
||||||
|
};
|
||||||
|
|
||||||
|
let watch;
|
||||||
|
let loadApp;
|
||||||
|
loadApp = function(name) {
|
||||||
|
load(name);
|
||||||
|
};
|
||||||
|
|
||||||
Bangle.loadWidgets();
|
Bangle.loadWidgets();
|
||||||
g.clear();
|
g.clear();
|
||||||
Bangle.drawWidgets();
|
Bangle.drawWidgets();
|
||||||
drawPage(0);
|
drawPage(0);
|
||||||
|
|
||||||
|
} // end of app scope
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
{
|
{
|
||||||
"id": "dtlaunch",
|
"id": "dtlaunch",
|
||||||
"name": "Desktop Launcher",
|
"name": "Desktop Launcher",
|
||||||
"version": "0.16",
|
"version": "0.17",
|
||||||
"description": "Desktop style App Launcher with six (four for Bangle 2) apps per page - fast access if you have lots of apps installed.",
|
"description": "Desktop style App Launcher with six (four for Bangle 2) apps per page - fast access if you have lots of apps installed.",
|
||||||
"screenshots": [{"url":"shot1.png"},{"url":"shot2.png"},{"url":"shot3.png"}],
|
"screenshots": [{"url":"shot1.png"},{"url":"shot2.png"},{"url":"shot3.png"}],
|
||||||
"icon": "icon.png",
|
"icon": "icon.png",
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue