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] 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",