1
0
Fork 0

messagesoverlay - Fix leaking memory

master
Martin Boonk 2023-02-26 15:53:00 +01:00
parent c16a9b1103
commit 3ef8ede109
1 changed files with 17 additions and 20 deletions

View File

@ -76,12 +76,11 @@ let manageEvent = function(ovr, event) {
next(ovr); next(ovr);
else { else {
let neweventQueue = []; eventQueue.length = 0; // empty existing queue
eventQueue.forEach(element => { eventQueue.forEach(element => {
if (element.id != event.id) if (element.id != event.id)
neweventQueue.push(element); neweventQueue.push(element);
}); });
eventQueue = neweventQueue;
} }
break; break;
@ -143,7 +142,6 @@ let showMessage = function(ovr, msg) {
LOG("showMessage"); LOG("showMessage");
ovr.setBgColor(settings.colBg); ovr.setBgColor(settings.colBg);
if (typeof msg.CanscrollDown === "undefined") if (typeof msg.CanscrollDown === "undefined")
msg.CanscrollDown = false; msg.CanscrollDown = false;
if (typeof msg.CanscrollUp === "undefined") if (typeof msg.CanscrollUp === "undefined")
@ -214,6 +212,7 @@ let showCall = function(ovr, msg) {
if (!settings.quiet) { if (!settings.quiet) {
if (msg.new) { if (msg.new) {
msg.new = false; msg.new = false;
if (callBuzzTimer) clearInterval(callBuzzTimer);
callBuzzTimer = setInterval(function() { callBuzzTimer = setInterval(function() {
Bangle.buzz(500); Bangle.buzz(500);
}, 1000); }, 1000);
@ -252,7 +251,7 @@ let callBuzzTimer = null;
let stopCallBuzz = function() { let stopCallBuzz = function() {
if (callBuzzTimer) { if (callBuzzTimer) {
clearInterval(callBuzzTimer); clearInterval(callBuzzTimer);
callBuzzTimer = null; callBuzzTimer = undefined;
} }
}; };
@ -357,14 +356,6 @@ let drawMessage = function(ovr, msg) {
Bangle.setLCDOverlay(ovr,ovrx,ovry); Bangle.setLCDOverlay(ovr,ovrx,ovry);
}; };
let doubleTapUnlock = function(data) {
if (data.double)
{
Bangle.setLocked(false);
Bangle.setLCDPower(1);
}
};
let getSwipeHandler = function(ovr){ let getSwipeHandler = function(ovr){
return (lr, ud) => { return (lr, ud) => {
if (ud == 1) { if (ud == 1) {
@ -394,6 +385,7 @@ let restoreHandler = function(event){
}; };
let backupHandler = function(event){ let backupHandler = function(event){
if (eventQueue.length > 1 && ovr) return; // do not backup, overlay is already up
backup[event] = Bangle["#on" + event]; backup[event] = Bangle["#on" + event];
Bangle.removeAllListeners(event); Bangle.removeAllListeners(event);
}; };
@ -407,9 +399,14 @@ let cleanup = function(){
restoreHandler("swipe"); restoreHandler("swipe");
restoreHandler("drag"); restoreHandler("drag");
Bangle.removeListener("tap", doubleTapUnlock); if (touchHandler) {
if (touchHandler) Bangle.removeListener("touch", touchHandler); Bangle.removeListener("touch", touchHandler);
if (swipeHandler) Bangle.removeListener("swipe", swipeHandler); touchHandler = undefined;
}
if (swipeHandler) {
Bangle.removeListener("swipe", swipeHandler);
swipeHandler = undefined;
}
Bangle.setLCDOverlay(); Bangle.setLCDOverlay();
ovr = undefined; ovr = undefined;
}; };
@ -418,18 +415,17 @@ let backup = {};
let main = function(ovr, event) { let main = function(ovr, event) {
LOG("Main", event, settings); LOG("Main", event, settings);
if (!lockListener) { if (!lockListener) {
lockListener = function (){ lockListener = function (){
drawBorder(ovr); drawBorder(ovr);
}; };
Bangle.on('lock', lockListener); Bangle.on('lock', lockListener);
} }
backupHandler("touch"); backupHandler("touch");
backupHandler("swipe"); backupHandler("swipe");
backupHandler("drag"); backupHandler("drag");
Bangle.on('tap', doubleTapUnlock);
if (touchHandler) Bangle.removeListener("touch",touchHandler); if (touchHandler) Bangle.removeListener("touch",touchHandler);
if (swipeHandler) Bangle.removeListener("swipe",swipeHandler); if (swipeHandler) Bangle.removeListener("swipe",swipeHandler);
touchHandler = getTouchHandler(ovr); touchHandler = getTouchHandler(ovr);
@ -441,7 +437,10 @@ let main = function(ovr, event) {
manageEvent(ovr, event); manageEvent(ovr, event);
Bangle.setLCDPower(1); Bangle.setLCDPower(1);
drawBorder(ovr); drawBorder(ovr);
Bangle.setLCDOverlay(ovr,10,10); if (eventQueue.length>=1)
Bangle.setLCDOverlay(ovr,10,10);
else
Bangle.setLCDOverlay();
} else { } else {
LOG("No event given"); LOG("No event given");
cleanup(); cleanup();
@ -465,9 +464,7 @@ exports.pushMessage = function(event) {
g = ovr; g = ovr;
ovr.theme = g.theme; ovr.theme = g.theme;
if(event.t=="remove") return;
main(ovr, event); main(ovr, event);
Bangle.setLCDOverlay(ovr, 10, 10);
g = _g; g = _g;
}; };