From ffd85de6356ff33ea069b51f3796c1e977f06960 Mon Sep 17 00:00:00 2001 From: thyttan <6uuxstm66@mozmail.com⁩> Date: Sun, 6 Nov 2022 15:15:42 +0100 Subject: [PATCH 01/13] Fast load to clockface on B2 --- apps/dtlaunch/ChangeLog | 1 + apps/dtlaunch/app-b2.js | 114 +++++++++++++++++++++++++----------- apps/dtlaunch/metadata.json | 2 +- 3 files changed, 83 insertions(+), 34 deletions(-) diff --git a/apps/dtlaunch/ChangeLog b/apps/dtlaunch/ChangeLog index 16c550334..05a1637c0 100644 --- a/apps/dtlaunch/ChangeLog +++ b/apps/dtlaunch/ChangeLog @@ -14,3 +14,4 @@ 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.16: Use default Bangle formatter for booleans +0.17: Bangle 2: Fast loading on exit to clock face diff --git a/apps/dtlaunch/app-b2.js b/apps/dtlaunch/app-b2.js index 8cd5790bb..ddbb74023 100644 --- a/apps/dtlaunch/app-b2.js +++ b/apps/dtlaunch/app-b2.js @@ -1,28 +1,31 @@ +{ // must be inside our own scope here so that when we are unloaded everything disappears + /* Desktop launcher * */ -var settings = Object.assign({ +let settings = Object.assign({ showClocks: true, showLaunchers: true, direct: false, oneClickExit:false, - swipeExit: false + swipeExit: false, + fastload: false, }, require('Storage').readJSON("dtlaunch.json", true) || {}); if( settings.oneClickExit) - setWatch(_=> load(), BTN1); + setWatch(_=> returnToClock, BTN1); -var s = require("Storage"); -var apps = s.list(/\.info$/).map(app=>{ - var a=s.readJSON(app,1); +let s = require("Storage"); + var apps = s.list(/\.info$/).map(app=>{ + let a=s.readJSON(app,1); return a && { name:a.name, type:a.type, icon:a.icon, sortorder:a.sortorder, src:a.src };}).filter( app=>app && (app.type=="app" || (app.type=="clock" && settings.showClocks) || (app.type=="launch" && settings.showLaunchers) || !app.type)); - + 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 (a.nameb.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 }); -var Napps = apps.length; -var Npages = Math.ceil(Napps/4); -var maxPage = Npages-1; -var selected = -1; -var oldselected = -1; -var page = 0; +let Napps = apps.length; +let Npages = Math.ceil(Napps/4); +let maxPage = Npages-1; +let selected = -1; +let oldselected = -1; +let page = 0; const XOFF = 24; const YOFF = 30; function draw_icon(p,n,selected) { - var x = (n%2)*72+XOFF; - var y = n>1?72+YOFF:YOFF; + let x = (n%2)*72+XOFF; + 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); g.clearRect(x+12,y+4,x+59,y+51); g.setColor(g.theme.fg); try{g.drawImage(apps[p*4+n].icon,x+12,y+4);} catch(e){} g.setFontAlign(0,-1,0).setFont("6x8",1); - var txt = apps[p*4+n].name.replace(/([a-z])([A-Z])/g, "$1 $2").split(" "); - var lineY = 0; - var line = ""; + let txt = apps[p*4+n].name.replace(/([a-z])([A-Z])/g, "$1 $2").split(" "); + let lineY = 0; + let line = ""; while (txt.length > 0){ - var c = txt.shift(); + let c = txt.shift(); if (c.length + 1 + line.length > 13){ if (line.length > 0){ @@ -72,24 +75,24 @@ function draw_icon(p,n,selected) { function drawPage(p){ g.reset(); g.clearRect(0,24,175,175); - var O = 88+YOFF/2-12*(Npages/2); - for (var j=0;j{ +function swipeListenerDt(dirLeftRight, dirUpDown){ selected = 0; oldselected=-1; - if(settings.swipeExit && dirLeftRight==1) load(); + if(settings.swipeExit && dirLeftRight==1) returnToClock(); if (dirUpDown==-1||dirLeftRight==-1){ ++page; if (page>maxPage) page=0; drawPage(page); @@ -97,17 +100,18 @@ Bangle.on("swipe",(dirLeftRight, dirUpDown)=>{ --page; if (page<0) page=maxPage; drawPage(page); } -}); +} +Bangle.on("swipe",swipeListenerDt); function isTouched(p,n){ if (n<0 || n>3) return false; - var x1 = (n%2)*72+XOFF; var y1 = n>1?72+YOFF:YOFF; - var x2 = x1+71; var y2 = y1+81; + let x1 = (n%2)*72+XOFF; let y1 = n>1?72+YOFF:YOFF; + let x2 = x1+71; let y2 = y1+81; return (p.x>x1 && p.y>y1 && p.x{ - var i; +function touchListenerDt(_,p){ + let i; for (i=0;i<4;i++){ if((page*4+i){ if (selected!=i && !settings.direct){ draw_icon(page,selected,false); } else { - load(apps[page*4+i].src); + loadApp(apps[page*4+i].src); } } selected=i; @@ -128,9 +132,53 @@ Bangle.on("touch",(_,p)=>{ draw_icon(page,selected,false); 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(); g.clear(); Bangle.drawWidgets(); drawPage(0); + +} // end of app scope diff --git a/apps/dtlaunch/metadata.json b/apps/dtlaunch/metadata.json index 36728f342..b71f4ca9b 100644 --- a/apps/dtlaunch/metadata.json +++ b/apps/dtlaunch/metadata.json @@ -1,7 +1,7 @@ { "id": "dtlaunch", "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.", "screenshots": [{"url":"shot1.png"},{"url":"shot2.png"},{"url":"shot3.png"}], "icon": "icon.png", From e20a47bf35da6bddb35573300c7a5f2916ff4ce6 Mon Sep 17 00:00:00 2001 From: thyttan <6uuxstm66@mozmail.com⁩> Date: Sun, 6 Nov 2022 16:20:42 +0100 Subject: [PATCH 02/13] some tweaks --- apps/dtlaunch/app-b2.js | 62 +++++++++++++++++++---------------------- 1 file changed, 28 insertions(+), 34 deletions(-) diff --git a/apps/dtlaunch/app-b2.js b/apps/dtlaunch/app-b2.js index ddbb74023..8bbd9ed5c 100644 --- a/apps/dtlaunch/app-b2.js +++ b/apps/dtlaunch/app-b2.js @@ -10,7 +10,6 @@ let settings = Object.assign({ direct: false, oneClickExit:false, swipeExit: false, - fastload: false, }, require('Storage').readJSON("dtlaunch.json", true) || {}); if( settings.oneClickExit) @@ -45,7 +44,7 @@ let page = 0; const XOFF = 24; const YOFF = 30; -function draw_icon(p,n,selected) { +let drawIcon= function(p,n,selected) { let x = (n%2)*72+XOFF; 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); @@ -56,9 +55,8 @@ function draw_icon(p,n,selected) { let txt = apps[p*4+n].name.replace(/([a-z])([A-Z])/g, "$1 $2").split(" "); let lineY = 0; let line = ""; - while (txt.length > 0){ + while (txt.length > 0){ let c = txt.shift(); - if (c.length + 1 + line.length > 13){ if (line.length > 0){ g.drawString(line.trim(),x+36,y+54+lineY*8); @@ -70,9 +68,9 @@ function draw_icon(p,n,selected) { } } g.drawString(line.trim(),x+36,y+54+lineY*8); -} +}; -function drawPage(p){ +let drawPage = function(p){ g.reset(); g.clearRect(0,24,175,175); let O = 88+YOFF/2-12*(Npages/2); @@ -84,12 +82,17 @@ function drawPage(p){ } for (let i=0;i<4;i++) { if (!apps[p*4+i]) return i; - draw_icon(p,i,selected==i && !settings.direct); + drawIcon(p,i,selected==i && !settings.direct); } g.flip(); -} +}; + +Bangle.loadWidgets(); +//g.clear(); +Bangle.drawWidgets(); +drawPage(0); -function swipeListenerDt(dirLeftRight, dirUpDown){ +let swipeListenerDt = function(dirLeftRight, dirUpDown){ selected = 0; oldselected=-1; if(settings.swipeExit && dirLeftRight==1) returnToClock(); @@ -100,27 +103,27 @@ function swipeListenerDt(dirLeftRight, dirUpDown){ --page; if (page<0) page=maxPage; drawPage(page); } -} +}; Bangle.on("swipe",swipeListenerDt); -function isTouched(p,n){ +let isTouched = function(p,n){ if (n<0 || n>3) return false; let x1 = (n%2)*72+XOFF; let y1 = n>1?72+YOFF:YOFF; let x2 = x1+71; let y2 = y1+81; return (p.x>x1 && p.y>y1 && p.x=0 || settings.direct) { if (selected!=i && !settings.direct){ - draw_icon(page,selected,false); + drawIcon(page,selected,false); } else { - loadApp(apps[page*4+i].src); + load(apps[page*4+i].src); } } selected=i; @@ -129,15 +132,14 @@ function touchListenerDt(_,p){ } } if ((i==4 || (page*4+i)>Napps) && selected>=0) { - draw_icon(page,selected,false); + drawIcon(page,selected,false); selected=-1; } -} +}; Bangle.on("touch",touchListenerDt); -const returnToClock = function() { // Delete virtually everything, don't know if some deletes are unnecessary. +const returnToClock = function() { Bangle.setUI(); - if (watch) clearWatch(watch); delete s; delete a; delete n; @@ -159,26 +161,18 @@ const returnToClock = function() { // Delete virtually everything, don't know if delete x1; delete x2; delete i; + delete drawIcon; + delete drawPage; + delete isTouched; Bangle.removeListener("swipe", swipeListenerDt); + delete swipeListenerDt; Bangle.removeListener("touch", touchListenerDt); + delete 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(); -g.clear(); -Bangle.drawWidgets(); -drawPage(0); - } // end of app scope From 02b5f3be5809bdf29c74396522faf88597baf25b Mon Sep 17 00:00:00 2001 From: thyttan <6uuxstm66@mozmail.com⁩> Date: Sun, 6 Nov 2022 18:59:16 +0100 Subject: [PATCH 03/13] remove watcher for BTN1 --- apps/dtlaunch/app-b2.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/apps/dtlaunch/app-b2.js b/apps/dtlaunch/app-b2.js index 8bbd9ed5c..e6620a50b 100644 --- a/apps/dtlaunch/app-b2.js +++ b/apps/dtlaunch/app-b2.js @@ -13,7 +13,7 @@ let settings = Object.assign({ }, require('Storage').readJSON("dtlaunch.json", true) || {}); if( settings.oneClickExit) - setWatch(_=> returnToClock, BTN1); + let buttonWatch = setWatch(_=> returnToClock, BTN1); let s = require("Storage"); var apps = s.list(/\.info$/).map(app=>{ @@ -140,6 +140,7 @@ Bangle.on("touch",touchListenerDt); const returnToClock = function() { Bangle.setUI(); + clearWatch(buttonWatch); delete s; delete a; delete n; From eca777c8ecc819a506905b64127142d52074bac9 Mon Sep 17 00:00:00 2001 From: thyttan <6uuxstm66@mozmail.com⁩> Date: Sun, 6 Nov 2022 19:03:51 +0100 Subject: [PATCH 04/13] fix --- apps/dtlaunch/app-b2.js | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/apps/dtlaunch/app-b2.js b/apps/dtlaunch/app-b2.js index e6620a50b..1d36156bc 100644 --- a/apps/dtlaunch/app-b2.js +++ b/apps/dtlaunch/app-b2.js @@ -12,8 +12,7 @@ let settings = Object.assign({ swipeExit: false, }, require('Storage').readJSON("dtlaunch.json", true) || {}); -if( settings.oneClickExit) - let buttonWatch = setWatch(_=> returnToClock, BTN1); +if (settings.oneClickExit) let buttonWatch = setWatch(_=> returnToClock, BTN1); let s = require("Storage"); var apps = s.list(/\.info$/).map(app=>{ From 5e2819bedcb7aed55cc3d143320dd21da70cf53d Mon Sep 17 00:00:00 2001 From: thyttan <6uuxstm66@mozmail.com⁩> Date: Sun, 6 Nov 2022 19:07:01 +0100 Subject: [PATCH 05/13] new try at fix --- apps/dtlaunch/app-b2.js | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/apps/dtlaunch/app-b2.js b/apps/dtlaunch/app-b2.js index 1d36156bc..6b7d0b61b 100644 --- a/apps/dtlaunch/app-b2.js +++ b/apps/dtlaunch/app-b2.js @@ -12,8 +12,10 @@ let settings = Object.assign({ swipeExit: false, }, require('Storage').readJSON("dtlaunch.json", true) || {}); -if (settings.oneClickExit) let buttonWatch = setWatch(_=> returnToClock, BTN1); - +if (settings.oneClickExit) { + let buttonWatch = setWatch(_=> returnToClock, BTN1); +} + let s = require("Storage"); var apps = s.list(/\.info$/).map(app=>{ let a=s.readJSON(app,1); From 84837228f9c1ce8bf1316191d151fbe5f5179469 Mon Sep 17 00:00:00 2001 From: thyttan <6uuxstm66@mozmail.com⁩> Date: Sun, 6 Nov 2022 19:21:22 +0100 Subject: [PATCH 06/13] fixfixfix --- apps/dtlaunch/app-b2.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/dtlaunch/app-b2.js b/apps/dtlaunch/app-b2.js index 6b7d0b61b..aba09406f 100644 --- a/apps/dtlaunch/app-b2.js +++ b/apps/dtlaunch/app-b2.js @@ -13,7 +13,7 @@ let settings = Object.assign({ }, require('Storage').readJSON("dtlaunch.json", true) || {}); if (settings.oneClickExit) { - let buttonWatch = setWatch(_=> returnToClock, BTN1); + var buttonWatch = setWatch(_=> returnToClock, BTN1); } let s = require("Storage"); From a46c76a2ffb749d2e8c153e0fce791df01e2ef6c Mon Sep 17 00:00:00 2001 From: thyttan <6uuxstm66@mozmail.com⁩> Date: Sun, 6 Nov 2022 19:53:28 +0100 Subject: [PATCH 07/13] timeout to clock copied from Icon Launcher --- apps/dtlaunch/app-b2.js | 353 ++++++++++++++++++----------------- apps/dtlaunch/settings-b2.js | 29 ++- 2 files changed, 202 insertions(+), 180 deletions(-) diff --git a/apps/dtlaunch/app-b2.js b/apps/dtlaunch/app-b2.js index aba09406f..151be96c4 100644 --- a/apps/dtlaunch/app-b2.js +++ b/apps/dtlaunch/app-b2.js @@ -1,180 +1,189 @@ { // must be inside our own scope here so that when we are unloaded everything disappears - -/* Desktop launcher -* -*/ - -let settings = Object.assign({ - showClocks: true, - showLaunchers: true, - direct: false, - oneClickExit:false, - swipeExit: false, -}, require('Storage').readJSON("dtlaunch.json", true) || {}); - -if (settings.oneClickExit) { - var buttonWatch = setWatch(_=> returnToClock, BTN1); -} - -let s = require("Storage"); - var apps = s.list(/\.info$/).map(app=>{ - let a=s.readJSON(app,1); - return a && { - name:a.name, type:a.type, icon:a.icon, sortorder:a.sortorder, src:a.src - };}).filter( - app=>app && (app.type=="app" || (app.type=="clock" && settings.showClocks) || (app.type=="launch" && settings.showLaunchers) || !app.type)); -apps.sort((a,b)=>{ - let n=(0|a.sortorder)-(0|b.sortorder); - if (n) return n; // do sortorder first - if (a.nameb.name) return 1; - return 0; -}); -apps.forEach(app=>{ - if (app.icon) - app.icon = s.read(app.icon); // should just be a link to a memory area + /* Desktop launcher + * + */ + + let settings = Object.assign({ + showClocks: true, + showLaunchers: true, + direct: false, + oneClickExit: false, + swipeExit: false, + timeOut: "Off" + }, require('Storage').readJSON("dtlaunch.json", true) || {}); + + if (settings.oneClickExit) { + var buttonWatch = setWatch(_=> returnToClock, BTN1); + } + + // taken from Icon Launcher with minor alterations + if (settings.timeOut!="Off"){ + let time=parseInt(settings.timeOut); //the "s" will be trimmed by the parseInt + var timeoutToClock = setTimeout(returnToClock,time*1000); + } + let s = require("Storage"); + var apps = s.list(/\.info$/).map(app=>{ + let a=s.readJSON(app,1); + return a && { + name:a.name, type:a.type, icon:a.icon, sortorder:a.sortorder, src:a.src + };}).filter( + app=>app && (app.type=="app" || (app.type=="clock" && settings.showClocks) || (app.type=="launch" && settings.showLaunchers) || !app.type)); + + apps.sort((a,b)=>{ + let n=(0|a.sortorder)-(0|b.sortorder); + if (n) return n; // do sortorder first + if (a.nameb.name) return 1; + return 0; }); - -let Napps = apps.length; -let Npages = Math.ceil(Napps/4); -let maxPage = Npages-1; -let selected = -1; -let oldselected = -1; -let page = 0; -const XOFF = 24; -const YOFF = 30; - -let drawIcon= function(p,n,selected) { - let x = (n%2)*72+XOFF; - 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); - g.clearRect(x+12,y+4,x+59,y+51); - g.setColor(g.theme.fg); - try{g.drawImage(apps[p*4+n].icon,x+12,y+4);} catch(e){} - g.setFontAlign(0,-1,0).setFont("6x8",1); - let txt = apps[p*4+n].name.replace(/([a-z])([A-Z])/g, "$1 $2").split(" "); - let lineY = 0; - let line = ""; - while (txt.length > 0){ - let c = txt.shift(); - if (c.length + 1 + line.length > 13){ - if (line.length > 0){ - g.drawString(line.trim(),x+36,y+54+lineY*8); - lineY++; + apps.forEach(app=>{ + if (app.icon) + app.icon = s.read(app.icon); // should just be a link to a memory area + }); + + let Napps = apps.length; + let Npages = Math.ceil(Napps/4); + let maxPage = Npages-1; + let selected = -1; + let oldselected = -1; + let page = 0; + const XOFF = 24; + const YOFF = 30; + + let drawIcon= function(p,n,selected) { + let x = (n%2)*72+XOFF; + 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); + g.clearRect(x+12,y+4,x+59,y+51); + g.setColor(g.theme.fg); + try{g.drawImage(apps[p*4+n].icon,x+12,y+4);} catch(e){} + g.setFontAlign(0,-1,0).setFont("6x8",1); + let txt = apps[p*4+n].name.replace(/([a-z])([A-Z])/g, "$1 $2").split(" "); + let lineY = 0; + let line = ""; + while (txt.length > 0){ + let c = txt.shift(); + if (c.length + 1 + line.length > 13){ + if (line.length > 0){ + g.drawString(line.trim(),x+36,y+54+lineY*8); + lineY++; + } + line = c; + } else { + line += " " + c; } - line = c; - } else { - line += " " + c; } - } - g.drawString(line.trim(),x+36,y+54+lineY*8); -}; - -let drawPage = function(p){ - g.reset(); - g.clearRect(0,24,175,175); - let O = 88+YOFF/2-12*(Npages/2); - for (let j=0;jmaxPage) page=0; - drawPage(page); - } else if (dirUpDown==1||(dirLeftRight==1 && !settings.swipeExit)){ - --page; if (page<0) page=maxPage; - drawPage(page); - } -}; -Bangle.on("swipe",swipeListenerDt); - -let isTouched = function(p,n){ - if (n<0 || n>3) return false; - let x1 = (n%2)*72+XOFF; let y1 = n>1?72+YOFF:YOFF; - let x2 = x1+71; let y2 = y1+81; - return (p.x>x1 && p.y>y1 && p.x=0 || settings.direct) { - if (selected!=i && !settings.direct){ - drawIcon(page,selected,false); - } else { - load(apps[page*4+i].src); - } - } - selected=i; - break; - } - } - } - if ((i==4 || (page*4+i)>Napps) && selected>=0) { - drawIcon(page,selected,false); - selected=-1; - } -}; -Bangle.on("touch",touchListenerDt); + let drawPage = function(p){ + g.reset(); + g.clearRect(0,24,175,175); + let O = 88+YOFF/2-12*(Npages/2); + for (let j=0;jmaxPage) page=0; + drawPage(page); + } else if (dirUpDown==1||(dirLeftRight==1 && !settings.swipeExit)){ + --page; if (page<0) page=maxPage; + drawPage(page); + } + }; + Bangle.on("swipe",swipeListenerDt); + + let isTouched = function(p,n){ + if (n<0 || n>3) return false; + let x1 = (n%2)*72+XOFF; let y1 = n>1?72+YOFF:YOFF; + let x2 = x1+71; let y2 = y1+81; + return (p.x>x1 && p.y>y1 && p.x=0 || settings.direct) { + if (selected!=i && !settings.direct){ + drawIcon(page,selected,false); + } else { + load(apps[page*4+i].src); + } + } + selected=i; + break; + } + } + } + if ((i==4 || (page*4+i)>Napps) && selected>=0) { + drawIcon(page,selected,false); + selected=-1; + } + }; + Bangle.on("touch",touchListenerDt); + + const returnToClock = function() { + Bangle.setUI(); + clearWatch(buttonWatch); + delete buttonWatch; + clearTimeout(timeoutToClock); + delete timeoutToClock; + 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; + delete drawIcon; + delete drawPage; + delete isTouched; + Bangle.removeListener("swipe", swipeListenerDt); + delete swipeListenerDt; + Bangle.removeListener("touch", touchListenerDt); + delete touchListenerDt; + var apps = []; + delete apps; + delete returnToClock; + delete settings; + setTimeout(eval, 0, s.read(".bootcde")); + }; -const returnToClock = function() { - Bangle.setUI(); - clearWatch(buttonWatch); - 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; - delete drawIcon; - delete drawPage; - delete isTouched; - Bangle.removeListener("swipe", swipeListenerDt); - delete swipeListenerDt; - Bangle.removeListener("touch", touchListenerDt); - delete touchListenerDt; - var apps = []; - delete apps; - delete returnToClock; - delete settings; - setTimeout(eval, 0, s.read(".bootcde")); -}; - } // end of app scope diff --git a/apps/dtlaunch/settings-b2.js b/apps/dtlaunch/settings-b2.js index fac9c0fff..315974c77 100644 --- a/apps/dtlaunch/settings-b2.js +++ b/apps/dtlaunch/settings-b2.js @@ -6,50 +6,63 @@ showLaunchers: true, direct: false, oneClickExit:false, - swipeExit: false + swipeExit: false, + timeOut: "Off" }, require('Storage').readJSON(FILE, true) || {}); function writeSettings() { require('Storage').writeJSON(FILE, settings); } + const timeOutChoices = [/*LANG*/"Off", "10s", "15s", "20s", "30s"]; + E.showMenu({ "" : { "title" : "Desktop launcher" }, - "< Back" : () => back(), - 'Show clocks': { + /*LANG*/"< Back" : () => back(), + /*LANG*/'Show clocks': { value: settings.showClocks, onchange: v => { settings.showClocks = v; writeSettings(); } }, - 'Show launchers': { + /*LANG*/'Show launchers': { value: settings.showLaunchers, onchange: v => { settings.showLaunchers = v; writeSettings(); } }, - 'Direct launch': { + /*LANG*/'Direct launch': { value: settings.direct, onchange: v => { settings.direct = v; writeSettings(); } }, - 'Swipe Exit': { + /*LANG*/'Swipe Exit': { value: settings.swipeExit, onchange: v => { settings.swipeExit = v; writeSettings(); } }, - 'One click exit': { + /*LANG*/'One click exit': { value: settings.oneClickExit, onchange: v => { settings.oneClickExit = v; writeSettings(); } - } + }, + /*LANG*/'Time Out': { + value: timeOutChoices.indexOf(settings.timeOut), + min: 0, + max: timeOutChoices.length-1, + format: v => timeOutChoices[v], + onchange: m => { + settings.timeOut = m; + writeSettings(); + } + }, }); }) From 8c427938fdddcdf4a7cd98174b651317705a6b1a Mon Sep 17 00:00:00 2001 From: thyttan <6uuxstm66@mozmail.com⁩> Date: Sun, 6 Nov 2022 19:54:50 +0100 Subject: [PATCH 08/13] make the diff readable... --- apps/dtlaunch/app-b2.js | 362 ++++++++++++++++++++-------------------- 1 file changed, 181 insertions(+), 181 deletions(-) diff --git a/apps/dtlaunch/app-b2.js b/apps/dtlaunch/app-b2.js index 151be96c4..7c75f291b 100644 --- a/apps/dtlaunch/app-b2.js +++ b/apps/dtlaunch/app-b2.js @@ -1,189 +1,189 @@ { // must be inside our own scope here so that when we are unloaded everything disappears + +/* Desktop launcher +* +*/ + +let settings = Object.assign({ + showClocks: true, + showLaunchers: true, + direct: false, + oneClickExit: false, + swipeExit: false, + timeOut: "Off" +}, require('Storage').readJSON("dtlaunch.json", true) || {}); + +if (settings.oneClickExit) { + var buttonWatch = setWatch(_=> returnToClock, BTN1); +} + +// taken from Icon Launcher with minor alterations +if (settings.timeOut!="Off"){ + let time=parseInt(settings.timeOut); //the "s" will be trimmed by the parseInt + var timeoutToClock = setTimeout(returnToClock,time*1000); +} +let s = require("Storage"); + var apps = s.list(/\.info$/).map(app=>{ + let a=s.readJSON(app,1); + return a && { + name:a.name, type:a.type, icon:a.icon, sortorder:a.sortorder, src:a.src + };}).filter( + app=>app && (app.type=="app" || (app.type=="clock" && settings.showClocks) || (app.type=="launch" && settings.showLaunchers) || !app.type)); - /* Desktop launcher - * - */ - - let settings = Object.assign({ - showClocks: true, - showLaunchers: true, - direct: false, - oneClickExit: false, - swipeExit: false, - timeOut: "Off" - }, require('Storage').readJSON("dtlaunch.json", true) || {}); - - if (settings.oneClickExit) { - var buttonWatch = setWatch(_=> returnToClock, BTN1); - } - - // taken from Icon Launcher with minor alterations - if (settings.timeOut!="Off"){ - let time=parseInt(settings.timeOut); //the "s" will be trimmed by the parseInt - var timeoutToClock = setTimeout(returnToClock,time*1000); - } - let s = require("Storage"); - var apps = s.list(/\.info$/).map(app=>{ - let a=s.readJSON(app,1); - return a && { - name:a.name, type:a.type, icon:a.icon, sortorder:a.sortorder, src:a.src - };}).filter( - app=>app && (app.type=="app" || (app.type=="clock" && settings.showClocks) || (app.type=="launch" && settings.showLaunchers) || !app.type)); - - apps.sort((a,b)=>{ - let n=(0|a.sortorder)-(0|b.sortorder); - if (n) return n; // do sortorder first - if (a.nameb.name) return 1; - return 0; +apps.sort((a,b)=>{ + let n=(0|a.sortorder)-(0|b.sortorder); + if (n) return n; // do sortorder first + if (a.nameb.name) return 1; + return 0; +}); +apps.forEach(app=>{ + if (app.icon) + app.icon = s.read(app.icon); // should just be a link to a memory area }); - apps.forEach(app=>{ - if (app.icon) - app.icon = s.read(app.icon); // should just be a link to a memory area - }); - - let Napps = apps.length; - let Npages = Math.ceil(Napps/4); - let maxPage = Npages-1; - let selected = -1; - let oldselected = -1; - let page = 0; - const XOFF = 24; - const YOFF = 30; - - let drawIcon= function(p,n,selected) { - let x = (n%2)*72+XOFF; - 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); - g.clearRect(x+12,y+4,x+59,y+51); - g.setColor(g.theme.fg); - try{g.drawImage(apps[p*4+n].icon,x+12,y+4);} catch(e){} - g.setFontAlign(0,-1,0).setFont("6x8",1); - let txt = apps[p*4+n].name.replace(/([a-z])([A-Z])/g, "$1 $2").split(" "); - let lineY = 0; - let line = ""; - while (txt.length > 0){ - let c = txt.shift(); - if (c.length + 1 + line.length > 13){ - if (line.length > 0){ - g.drawString(line.trim(),x+36,y+54+lineY*8); - lineY++; - } - line = c; - } else { - line += " " + c; + +let Napps = apps.length; +let Npages = Math.ceil(Napps/4); +let maxPage = Npages-1; +let selected = -1; +let oldselected = -1; +let page = 0; +const XOFF = 24; +const YOFF = 30; + +let drawIcon= function(p,n,selected) { + let x = (n%2)*72+XOFF; + 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); + g.clearRect(x+12,y+4,x+59,y+51); + g.setColor(g.theme.fg); + try{g.drawImage(apps[p*4+n].icon,x+12,y+4);} catch(e){} + g.setFontAlign(0,-1,0).setFont("6x8",1); + let txt = apps[p*4+n].name.replace(/([a-z])([A-Z])/g, "$1 $2").split(" "); + let lineY = 0; + let line = ""; + while (txt.length > 0){ + let c = txt.shift(); + if (c.length + 1 + line.length > 13){ + if (line.length > 0){ + g.drawString(line.trim(),x+36,y+54+lineY*8); + lineY++; } + line = c; + } else { + line += " " + c; } - g.drawString(line.trim(),x+36,y+54+lineY*8); - }; + } + g.drawString(line.trim(),x+36,y+54+lineY*8); +}; + +let drawPage = function(p){ + g.reset(); + g.clearRect(0,24,175,175); + let O = 88+YOFF/2-12*(Npages/2); + for (let j=0;jmaxPage) page=0; - drawPage(page); - } else if (dirUpDown==1||(dirLeftRight==1 && !settings.swipeExit)){ - --page; if (page<0) page=maxPage; - drawPage(page); - } - }; - Bangle.on("swipe",swipeListenerDt); - - let isTouched = function(p,n){ - if (n<0 || n>3) return false; - let x1 = (n%2)*72+XOFF; let y1 = n>1?72+YOFF:YOFF; - let x2 = x1+71; let y2 = y1+81; - return (p.x>x1 && p.y>y1 && p.x=0 || settings.direct) { - if (selected!=i && !settings.direct){ - drawIcon(page,selected,false); - } else { - load(apps[page*4+i].src); - } - } - selected=i; - break; - } - } - } - if ((i==4 || (page*4+i)>Napps) && selected>=0) { - drawIcon(page,selected,false); - selected=-1; - } - }; - Bangle.on("touch",touchListenerDt); - - const returnToClock = function() { - Bangle.setUI(); - clearWatch(buttonWatch); - delete buttonWatch; - clearTimeout(timeoutToClock); - delete timeoutToClock; - 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; - delete drawIcon; - delete drawPage; - delete isTouched; - Bangle.removeListener("swipe", swipeListenerDt); - delete swipeListenerDt; - Bangle.removeListener("touch", touchListenerDt); - delete touchListenerDt; - var apps = []; - delete apps; - delete returnToClock; - delete settings; - setTimeout(eval, 0, s.read(".bootcde")); - }; +Bangle.loadWidgets(); +//g.clear(); +Bangle.drawWidgets(); +drawPage(0); + +let swipeListenerDt = function(dirLeftRight, dirUpDown){ + selected = 0; + oldselected=-1; + if(settings.swipeExit && dirLeftRight==1) returnToClock(); + if (dirUpDown==-1||dirLeftRight==-1){ + ++page; if (page>maxPage) page=0; + drawPage(page); + } else if (dirUpDown==1||(dirLeftRight==1 && !settings.swipeExit)){ + --page; if (page<0) page=maxPage; + drawPage(page); + } +}; +Bangle.on("swipe",swipeListenerDt); + +let isTouched = function(p,n){ + if (n<0 || n>3) return false; + let x1 = (n%2)*72+XOFF; let y1 = n>1?72+YOFF:YOFF; + let x2 = x1+71; let y2 = y1+81; + return (p.x>x1 && p.y>y1 && p.x=0 || settings.direct) { + if (selected!=i && !settings.direct){ + drawIcon(page,selected,false); + } else { + load(apps[page*4+i].src); + } + } + selected=i; + break; + } + } + } + if ((i==4 || (page*4+i)>Napps) && selected>=0) { + drawIcon(page,selected,false); + selected=-1; + } +}; +Bangle.on("touch",touchListenerDt); +const returnToClock = function() { + Bangle.setUI(); + clearWatch(buttonWatch); + delete buttonWatch; + clearTimeout(timeoutToClock); + delete timeoutToClock; + 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; + delete drawIcon; + delete drawPage; + delete isTouched; + Bangle.removeListener("swipe", swipeListenerDt); + delete swipeListenerDt; + Bangle.removeListener("touch", touchListenerDt); + delete touchListenerDt; + var apps = []; + delete apps; + delete returnToClock; + delete settings; + setTimeout(eval, 0, s.read(".bootcde")); +}; + } // end of app scope From 479f0e3d6954be4ba9cad29dce12a72819ce0431 Mon Sep 17 00:00:00 2001 From: thyttan <6uuxstm66@mozmail.com⁩> Date: Sun, 6 Nov 2022 19:59:04 +0100 Subject: [PATCH 09/13] comment in settings-b2.js --- apps/dtlaunch/settings-b2.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/dtlaunch/settings-b2.js b/apps/dtlaunch/settings-b2.js index 315974c77..6d4c98c38 100644 --- a/apps/dtlaunch/settings-b2.js +++ b/apps/dtlaunch/settings-b2.js @@ -54,7 +54,7 @@ writeSettings(); } }, - /*LANG*/'Time Out': { + /*LANG*/'Time Out': { // Adapted from Icon Launcher value: timeOutChoices.indexOf(settings.timeOut), min: 0, max: timeOutChoices.length-1, From 675953ddcdc414483d74668bcdf00da5396163ce Mon Sep 17 00:00:00 2001 From: thyttan <6uuxstm66@mozmail.com⁩> Date: Sun, 6 Nov 2022 20:20:51 +0100 Subject: [PATCH 10/13] make timeout to clock work --- apps/dtlaunch/app-b2.js | 13 +++++++------ apps/dtlaunch/settings-b2.js | 6 +++--- 2 files changed, 10 insertions(+), 9 deletions(-) diff --git a/apps/dtlaunch/app-b2.js b/apps/dtlaunch/app-b2.js index 7c75f291b..80ee36eca 100644 --- a/apps/dtlaunch/app-b2.js +++ b/apps/dtlaunch/app-b2.js @@ -15,13 +15,8 @@ let settings = Object.assign({ if (settings.oneClickExit) { var buttonWatch = setWatch(_=> returnToClock, BTN1); -} - -// taken from Icon Launcher with minor alterations -if (settings.timeOut!="Off"){ - let time=parseInt(settings.timeOut); //the "s" will be trimmed by the parseInt - var timeoutToClock = setTimeout(returnToClock,time*1000); } + let s = require("Storage"); var apps = s.list(/\.info$/).map(app=>{ let a=s.readJSON(app,1); @@ -186,4 +181,10 @@ const returnToClock = function() { setTimeout(eval, 0, s.read(".bootcde")); }; +// taken from Icon Launcher with minor alterations +if (settings.timeOut!="Off"){ + let time=parseInt(settings.timeOut); //the "s" will be trimmed by the parseInt + var timeoutToClock = setTimeout(returnToClock,time*1000); +} + } // end of app scope diff --git a/apps/dtlaunch/settings-b2.js b/apps/dtlaunch/settings-b2.js index 6d4c98c38..80ad0414a 100644 --- a/apps/dtlaunch/settings-b2.js +++ b/apps/dtlaunch/settings-b2.js @@ -59,10 +59,10 @@ min: 0, max: timeOutChoices.length-1, format: v => timeOutChoices[v], - onchange: m => { - settings.timeOut = m; + onchange: v => { + settings.timeOut = timeOutChoices[v]; writeSettings(); } }, }); -}) +}); From 23a0c2fc2f6881de4aa11aec3febeb7cf8d39f83 Mon Sep 17 00:00:00 2001 From: thyttan <6uuxstm66@mozmail.com⁩> Date: Sun, 6 Nov 2022 20:25:36 +0100 Subject: [PATCH 11/13] add to changelog --- apps/dtlaunch/ChangeLog | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/apps/dtlaunch/ChangeLog b/apps/dtlaunch/ChangeLog index 05a1637c0..1054aa387 100644 --- a/apps/dtlaunch/ChangeLog +++ b/apps/dtlaunch/ChangeLog @@ -14,4 +14,5 @@ 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.16: Use default Bangle formatter for booleans -0.17: Bangle 2: Fast loading on exit to clock face +0.17: Bangle 2: Fast loading on exit to clock face. Added option for exit to +clock face by timeout. From ef1cf7ef7b3d2eecf11ea701fe2fdc82fef7ca5b Mon Sep 17 00:00:00 2001 From: thyttan <6uuxstm66@mozmail.com⁩> Date: Sun, 6 Nov 2022 21:27:40 +0100 Subject: [PATCH 12/13] update timeout to clock per new implementation in Icon Launcher --- apps/dtlaunch/app-b2.js | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/apps/dtlaunch/app-b2.js b/apps/dtlaunch/app-b2.js index 80ee36eca..11ef7ba5f 100644 --- a/apps/dtlaunch/app-b2.js +++ b/apps/dtlaunch/app-b2.js @@ -24,7 +24,7 @@ let s = require("Storage"); name:a.name, type:a.type, icon:a.icon, sortorder:a.sortorder, src:a.src };}).filter( app=>app && (app.type=="app" || (app.type=="clock" && settings.showClocks) || (app.type=="launch" && settings.showLaunchers) || !app.type)); - + apps.sort((a,b)=>{ let n=(0|a.sortorder)-(0|b.sortorder); if (n) return n; // do sortorder first @@ -88,7 +88,7 @@ let drawPage = function(p){ } g.flip(); }; - + Bangle.loadWidgets(); //g.clear(); Bangle.drawWidgets(); @@ -139,7 +139,7 @@ let touchListenerDt = function(_,p){ } }; Bangle.on("touch",touchListenerDt); - + const returnToClock = function() { Bangle.setUI(); clearWatch(buttonWatch); @@ -182,9 +182,14 @@ const returnToClock = function() { }; // taken from Icon Launcher with minor alterations -if (settings.timeOut!="Off"){ - let time=parseInt(settings.timeOut); //the "s" will be trimmed by the parseInt - var timeoutToClock = setTimeout(returnToClock,time*1000); -} +var timeoutToClock; +const updateTimeoutToClock = function(){ + if (settings.timeOut!="Off"){ + let time=parseInt(settings.timeOut); //the "s" will be trimmed by the parseInt + if (timeoutToClock) clearTimeout(timeoutToClock); + timeoutToClock = setTimeout(returnToClock,time*1000); + } +}; +updateTimeoutToClock(); } // end of app scope From e0073bd17f355e44a7113ec060b287d352d5d1f6 Mon Sep 17 00:00:00 2001 From: thyttan <6uuxstm66@mozmail.com⁩> Date: Sun, 6 Nov 2022 21:53:41 +0100 Subject: [PATCH 13/13] remove some delete statements, make BTN1 to clock work --- apps/dtlaunch/app-b2.js | 41 +++++++++-------------------------------- 1 file changed, 9 insertions(+), 32 deletions(-) diff --git a/apps/dtlaunch/app-b2.js b/apps/dtlaunch/app-b2.js index 11ef7ba5f..48d9b2f38 100644 --- a/apps/dtlaunch/app-b2.js +++ b/apps/dtlaunch/app-b2.js @@ -14,7 +14,7 @@ let settings = Object.assign({ }, require('Storage').readJSON("dtlaunch.json", true) || {}); if (settings.oneClickExit) { - var buttonWatch = setWatch(_=> returnToClock, BTN1); + var buttonWatch = setWatch(_=> returnToClock(), BTN1, {edge: 'falling'}); } let s = require("Storage"); @@ -142,42 +142,19 @@ Bangle.on("touch",touchListenerDt); const returnToClock = function() { Bangle.setUI(); - clearWatch(buttonWatch); - delete buttonWatch; - clearTimeout(timeoutToClock); - delete timeoutToClock; - 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; - delete drawIcon; - delete drawPage; - delete isTouched; + if (buttonWatch) { + clearWatch(buttonWatch); + delete buttonWatch; + } + if (timeoutToClock) { + clearTimeout(timeoutToClock); + delete timeoutToClock; + } Bangle.removeListener("swipe", swipeListenerDt); - delete swipeListenerDt; Bangle.removeListener("touch", touchListenerDt); - delete touchListenerDt; var apps = []; delete apps; delete returnToClock; - delete settings; setTimeout(eval, 0, s.read(".bootcde")); };