From 7d28e12a387932b9b7d660e1751ac2a6f2512126 Mon Sep 17 00:00:00 2001 From: thyttan <6uuxstm66@mozmail.com⁩> Date: Tue, 5 Nov 2024 16:13:17 +0100 Subject: [PATCH 1/6] dtlaunch: remember page between dtlaunch instances --- apps/dtlaunch/ChangeLog | 1 + apps/dtlaunch/app-b2.js | 33 +++++++++++++++++++++++++++------ apps/dtlaunch/metadata.json | 2 +- 3 files changed, 29 insertions(+), 7 deletions(-) diff --git a/apps/dtlaunch/ChangeLog b/apps/dtlaunch/ChangeLog index 585e89ef9..69177e716 100644 --- a/apps/dtlaunch/ChangeLog +++ b/apps/dtlaunch/ChangeLog @@ -31,3 +31,4 @@ when moving pages. Add caching for faster startups. 0.24: Add buzz-on-interaction setting 0.25: Minor code improvements 0.26: Bangle 2: Postpone loading icons that are not needed initially. +0.27: Bangle 2: Remember and present the last open page between instances of dtlaunch. diff --git a/apps/dtlaunch/app-b2.js b/apps/dtlaunch/app-b2.js index 9da914980..868bc8657 100644 --- a/apps/dtlaunch/app-b2.js +++ b/apps/dtlaunch/app-b2.js @@ -33,7 +33,8 @@ s.writeJSON("launch.cache.json", launchCache); } let apps = launchCache.apps; - for (let i = 0; i < 4; i++) { // Initially only load icons for the current page. + let page = (Bangle.dtHandlePagePersist&&Bangle.dtHandlePagePersist()) ?? (parseInt(s.read("dtlaunch.page")) ?? 0); + for (let i = page*4; i < Math.min(page*4+4, apps.length); i++) { // Initially only load icons for the current page. if (apps[i].icon) apps[i].icon = s.read(apps[i].icon); // should just be a link to a memory area } @@ -43,7 +44,6 @@ let maxPage = Npages-1; let selected = -1; //let oldselected = -1; - let page = 0; const XOFF = 24; const YOFF = 30; @@ -99,13 +99,31 @@ Bangle.drawWidgets(); // To immediately update widget field to follow current theme - remove leftovers if previous app set custom theme. Bangle.loadWidgets(); - drawPage(0); + drawPage(page); - for (let i = 4; i < apps.length; i++) { // Load the rest of the app icons that were not initially. + for (let i = 0; i < apps.length; i++) { // Load the rest of the app icons that were not initially. + if (i >= page*4 && i < Math.min(page*4+4, apps.length)) continue; if (apps[i].icon) apps[i].icon = s.read(apps[i].icon); // should just be a link to a memory area } + if (!Bangle.dtHandlePagePersist) { + Bangle.dtHandlePagePersist = (page) => { + // Function for persisting the active page when leaving dtlaunch. + if (page===undefined) {return this.page||0;} + + if (!this.killHandler) { // Only register kill listener once. + this.killHandler = () => { + s.write("dtlaunch.page", this.page.toString()); + }; + E.on("kill", this.killHandler); // This is intentionally left around after fastloading into other apps. I.e. not removed in uiRemove. + } + + this.page = page; + }; + Bangle.dtHandlePagePersist(page); + } + let swipeListenerDt = function(dirLeftRight, dirUpDown){ updateTimeoutToClock(); selected = -1; @@ -142,6 +160,7 @@ drawIcon(page,selected,false); } else { buzzLong(); + Bangle.dtHandlePagePersist(page); load(apps[page*4+i].src); } } @@ -162,7 +181,10 @@ back : Bangle.showClock, swipe : swipeListenerDt, touch : touchListenerDt, - remove : ()=>{if (timeoutToClock) clearTimeout(timeoutToClock);} + remove : ()=>{ + if (timeoutToClock) {clearTimeout(timeoutToClock);} + Bangle.dtHandlePagePersist(page); + } }); // taken from Icon Launcher with minor alterations @@ -177,4 +199,3 @@ updateTimeoutToClock(); } // end of app scope - diff --git a/apps/dtlaunch/metadata.json b/apps/dtlaunch/metadata.json index 0f6430829..1ff75b953 100644 --- a/apps/dtlaunch/metadata.json +++ b/apps/dtlaunch/metadata.json @@ -1,7 +1,7 @@ { "id": "dtlaunch", "name": "Desktop Launcher", - "version": "0.26", + "version": "0.27", "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 60089275bc97f75b7b52131480da8c63a67a02ae Mon Sep 17 00:00:00 2001 From: thyttan <6uuxstm66@mozmail.com⁩> Date: Thu, 7 Nov 2024 23:51:33 +0100 Subject: [PATCH 2/6] dtlaunch: add global dtlaunch object The global dtlaunch object contains function and information to restore the page between instances of dtlaunch. --- apps/dtlaunch/app-b2.js | 25 +++++++++++++++---------- 1 file changed, 15 insertions(+), 10 deletions(-) diff --git a/apps/dtlaunch/app-b2.js b/apps/dtlaunch/app-b2.js index 868bc8657..c1244d4f0 100644 --- a/apps/dtlaunch/app-b2.js +++ b/apps/dtlaunch/app-b2.js @@ -33,8 +33,12 @@ s.writeJSON("launch.cache.json", launchCache); } let apps = launchCache.apps; - let page = (Bangle.dtHandlePagePersist&&Bangle.dtHandlePagePersist()) ?? (parseInt(s.read("dtlaunch.page")) ?? 0); - for (let i = page*4; i < Math.min(page*4+4, apps.length); i++) { // Initially only load icons for the current page. + let page = (global.dtlaunch&&dtlaunch.handlePagePersist()) ?? + (parseInt(s.read("dtlaunch.page")) ?? 0); + + const INIT_PAGE_APP_ZEROTH = page*4; + const INIT_PAGE_APP_LAST = Math.min(page*4+3, apps.length-1); + for (let i = INIT_PAGE_APP_ZEROTH; i <= INIT_PAGE_APP_LAST; i++) { // Initially only load icons for the current page. if (apps[i].icon) apps[i].icon = s.read(apps[i].icon); // should just be a link to a memory area } @@ -48,7 +52,7 @@ const YOFF = 30; let drawIcon= function(p,n,selected) { - let x = (n%2)*72+XOFF; + 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); @@ -102,13 +106,14 @@ drawPage(page); for (let i = 0; i < apps.length; i++) { // Load the rest of the app icons that were not initially. - if (i >= page*4 && i < Math.min(page*4+4, apps.length)) continue; + if (i >= INIT_PAGE_APP_ZEROTH && i <= INIT_PAGE_APP_LAST) continue; if (apps[i].icon) apps[i].icon = s.read(apps[i].icon); // should just be a link to a memory area } - if (!Bangle.dtHandlePagePersist) { - Bangle.dtHandlePagePersist = (page) => { + if (!global.dtlaunch) { + global.dtlaunch = {}; + dtlaunch.handlePagePersist = function(page) { // Function for persisting the active page when leaving dtlaunch. if (page===undefined) {return this.page||0;} @@ -121,7 +126,7 @@ this.page = page; }; - Bangle.dtHandlePagePersist(page); + dtlaunch.handlePagePersist(page); } let swipeListenerDt = function(dirLeftRight, dirUpDown){ @@ -160,7 +165,7 @@ drawIcon(page,selected,false); } else { buzzLong(); - Bangle.dtHandlePagePersist(page); + dtlaunch.handlePagePersist(page); load(apps[page*4+i].src); } } @@ -183,7 +188,7 @@ touch : touchListenerDt, remove : ()=>{ if (timeoutToClock) {clearTimeout(timeoutToClock);} - Bangle.dtHandlePagePersist(page); + dtlaunch.handlePagePersist(page); } }); @@ -193,7 +198,7 @@ if (settings.timeOut!="Off"){ let time=parseInt(settings.timeOut); //the "s" will be trimmed by the parseInt if (timeoutToClock) clearTimeout(timeoutToClock); - timeoutToClock = setTimeout(Bangle.showClock,time*1000); + timeoutToClock = setTimeout(Bangle.showClock,time*1000); } }; updateTimeoutToClock(); From 7e637130a294d04876e04b2175e9cac8288509e3 Mon Sep 17 00:00:00 2001 From: thyttan <6uuxstm66@mozmail.com⁩> Date: Sun, 10 Nov 2024 09:32:23 +0100 Subject: [PATCH 3/6] dtlaunch: FIXME comments --- apps/dtlaunch/app-b2.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/dtlaunch/app-b2.js b/apps/dtlaunch/app-b2.js index c1244d4f0..cd1901041 100644 --- a/apps/dtlaunch/app-b2.js +++ b/apps/dtlaunch/app-b2.js @@ -37,14 +37,14 @@ (parseInt(s.read("dtlaunch.page")) ?? 0); const INIT_PAGE_APP_ZEROTH = page*4; - const INIT_PAGE_APP_LAST = Math.min(page*4+3, apps.length-1); + const INIT_PAGE_APP_LAST = (page*4+3 Date: Mon, 11 Nov 2024 20:09:51 +0100 Subject: [PATCH 4/6] dtlaunch: remember page becomes a setting --- apps/dtlaunch/ChangeLog | 2 +- apps/dtlaunch/app-b2.js | 18 ++++++++++++------ apps/dtlaunch/settings-b2.js | 8 ++++++++ 3 files changed, 21 insertions(+), 7 deletions(-) diff --git a/apps/dtlaunch/ChangeLog b/apps/dtlaunch/ChangeLog index 69177e716..aac1c30bd 100644 --- a/apps/dtlaunch/ChangeLog +++ b/apps/dtlaunch/ChangeLog @@ -31,4 +31,4 @@ when moving pages. Add caching for faster startups. 0.24: Add buzz-on-interaction setting 0.25: Minor code improvements 0.26: Bangle 2: Postpone loading icons that are not needed initially. -0.27: Bangle 2: Remember and present the last open page between instances of dtlaunch. +0.27: Bangle 2: Add setting to remember and present the last open page between instances of dtlaunch. diff --git a/apps/dtlaunch/app-b2.js b/apps/dtlaunch/app-b2.js index cd1901041..6f1fddce8 100644 --- a/apps/dtlaunch/app-b2.js +++ b/apps/dtlaunch/app-b2.js @@ -11,6 +11,7 @@ swipeExit: false, timeOut: "Off", interactionBuzz: false, + rememberPage: false, }, require('Storage').readJSON("dtlaunch.json", true) || {}); let s = require("Storage"); @@ -33,12 +34,17 @@ s.writeJSON("launch.cache.json", launchCache); } let apps = launchCache.apps; - let page = (global.dtlaunch&&dtlaunch.handlePagePersist()) ?? - (parseInt(s.read("dtlaunch.page")) ?? 0); + let page = 0; + let initPageAppZeroth = 0; + let initPageAppLast = 3; + if (settings.rememberPage) { + page = (global.dtlaunch&&dtlaunch.handlePagePersist()) ?? + (parseInt(s.read("dtlaunch.page")) ?? 0); + initPageAppZeroth = page*4; + initPageAppLast = (page*4+3= INIT_PAGE_APP_ZEROTH && i <= INIT_PAGE_APP_LAST) continue; + if (i >= initPageAppZeroth && i <= initPageAppLast) continue; if (apps[i].icon) apps[i].icon = s.read(apps[i].icon); // should just be a link to a memory area } diff --git a/apps/dtlaunch/settings-b2.js b/apps/dtlaunch/settings-b2.js index f6894e289..dcad03a65 100644 --- a/apps/dtlaunch/settings-b2.js +++ b/apps/dtlaunch/settings-b2.js @@ -8,6 +8,7 @@ swipeExit: false, timeOut: "Off", interactionBuzz: false, + rememberPage: false, }, require('Storage').readJSON(FILE, true) || {}); function writeSettings() { @@ -64,5 +65,12 @@ writeSettings(); } }, + /*LANG*/'Remember Page': { + value: settings.rememberPage, + onchange: v => { + settings.rememberPage = v; + writeSettings(); + } + }, }); }) From 483d34e61f2ab361bdd9e7c25d863e6b914cf135 Mon Sep 17 00:00:00 2001 From: thyttan <6uuxstm66@mozmail.com⁩> Date: Tue, 19 Nov 2024 00:22:33 +0100 Subject: [PATCH 5/6] dtlaunch: land on using `Math.ceil/min` --- apps/dtlaunch/app-b2.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/dtlaunch/app-b2.js b/apps/dtlaunch/app-b2.js index 6f1fddce8..d52b98b77 100644 --- a/apps/dtlaunch/app-b2.js +++ b/apps/dtlaunch/app-b2.js @@ -41,7 +41,7 @@ page = (global.dtlaunch&&dtlaunch.handlePagePersist()) ?? (parseInt(s.read("dtlaunch.page")) ?? 0); initPageAppZeroth = page*4; - initPageAppLast = (page*4+3 Date: Fri, 29 Nov 2024 22:13:16 +0100 Subject: [PATCH 6/6] dtlaunch: fix no-undef lint error --- apps/dtlaunch/app-b2.js | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/apps/dtlaunch/app-b2.js b/apps/dtlaunch/app-b2.js index d52b98b77..ea163c57e 100644 --- a/apps/dtlaunch/app-b2.js +++ b/apps/dtlaunch/app-b2.js @@ -38,7 +38,7 @@ let initPageAppZeroth = 0; let initPageAppLast = 3; if (settings.rememberPage) { - page = (global.dtlaunch&&dtlaunch.handlePagePersist()) ?? + page = (global.dtlaunch&&global.dtlaunch.handlePagePersist()) ?? (parseInt(s.read("dtlaunch.page")) ?? 0); initPageAppZeroth = page*4; initPageAppLast = Math.min(page*4+3, apps.length-1); @@ -119,7 +119,7 @@ if (!global.dtlaunch) { global.dtlaunch = {}; - dtlaunch.handlePagePersist = function(page) { + global.dtlaunch.handlePagePersist = function(page) { // Function for persisting the active page when leaving dtlaunch. if (page===undefined) {return this.page||0;} @@ -132,7 +132,7 @@ this.page = page; }; - dtlaunch.handlePagePersist(page); + global.dtlaunch.handlePagePersist(page); } let swipeListenerDt = function(dirLeftRight, dirUpDown){ @@ -171,7 +171,7 @@ drawIcon(page,selected,false); } else { buzzLong(); - dtlaunch.handlePagePersist(page); + global.dtlaunch.handlePagePersist(page); load(apps[page*4+i].src); } } @@ -194,7 +194,7 @@ touch : touchListenerDt, remove : ()=>{ if (timeoutToClock) {clearTimeout(timeoutToClock);} - dtlaunch.handlePagePersist(page); + global.dtlaunch.handlePagePersist(page); } });