2023-02-26 08:51:45 +00:00
|
|
|
const ovrx = 10;
|
|
|
|
const ovry = 10;
|
|
|
|
const ovrw = g.getWidth()-2*ovrx;
|
|
|
|
const ovrh = g.getHeight()-2*ovry;
|
2023-02-26 20:17:58 +00:00
|
|
|
let _g = g;
|
2023-02-25 14:00:57 +00:00
|
|
|
|
|
|
|
let lockListener;
|
2023-02-26 18:22:11 +00:00
|
|
|
let quiet;
|
2023-02-25 14:00:57 +00:00
|
|
|
|
|
|
|
let LOG = function() {
|
2023-02-26 10:03:25 +00:00
|
|
|
//print.apply(null, arguments);
|
2023-02-25 14:00:57 +00:00
|
|
|
};
|
|
|
|
|
2023-02-26 17:51:23 +00:00
|
|
|
let isQuiet = function(){
|
2023-02-26 18:22:11 +00:00
|
|
|
if (quiet == undefined) quiet = (require('Storage').readJSON('setting.json', 1) || {}).quiet;
|
|
|
|
return quiet;
|
2023-02-26 17:51:23 +00:00
|
|
|
};
|
|
|
|
|
2023-02-26 19:02:20 +00:00
|
|
|
let settings = {
|
|
|
|
fontSmall:"6x8",
|
|
|
|
fontMedium:"Vector:14",
|
|
|
|
fontBig:"Vector:20",
|
|
|
|
fontLarge:"Vector:30",
|
|
|
|
};
|
2023-02-25 14:00:57 +00:00
|
|
|
|
2023-02-26 10:03:25 +00:00
|
|
|
let eventQueue = [];
|
|
|
|
let callInProgress = false;
|
2023-02-25 14:00:57 +00:00
|
|
|
|
2023-02-26 20:17:58 +00:00
|
|
|
let show = function(ovr){
|
|
|
|
let img = ovr;
|
|
|
|
if (ovr.getBPP() == 1) {
|
|
|
|
img = ovr.asImage();
|
|
|
|
img.palette = new Uint16Array([_g.theme.fg,_g.theme.bg]);
|
|
|
|
}
|
|
|
|
Bangle.setLCDOverlay(img, ovrx, ovry);
|
|
|
|
};
|
|
|
|
|
2023-02-25 14:00:57 +00:00
|
|
|
let manageEvent = function(ovr, event) {
|
|
|
|
event.new = true;
|
|
|
|
|
|
|
|
LOG("manageEvent");
|
|
|
|
if (event.id == "call") {
|
|
|
|
showCall(ovr, event);
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
switch (event.t) {
|
|
|
|
case "add":
|
2023-02-26 10:03:25 +00:00
|
|
|
eventQueue.unshift(event);
|
2023-02-25 14:00:57 +00:00
|
|
|
|
|
|
|
if (!callInProgress)
|
|
|
|
showMessage(ovr, event);
|
|
|
|
break;
|
|
|
|
|
|
|
|
case "modify":
|
|
|
|
let find = false;
|
2023-02-26 10:03:25 +00:00
|
|
|
eventQueue.forEach(element => {
|
2023-02-25 14:00:57 +00:00
|
|
|
if (element.id == event.id) {
|
|
|
|
find = true;
|
|
|
|
Object.assign(element, event);
|
|
|
|
}
|
|
|
|
});
|
|
|
|
if (!find)
|
2023-02-26 10:03:25 +00:00
|
|
|
eventQueue.unshift(event);
|
2023-02-25 14:00:57 +00:00
|
|
|
|
|
|
|
if (!callInProgress)
|
|
|
|
showMessage(ovr, event);
|
|
|
|
break;
|
|
|
|
|
|
|
|
case "remove":
|
2023-02-26 10:03:25 +00:00
|
|
|
if (eventQueue.length == 0 && !callInProgress)
|
2023-02-25 14:00:57 +00:00
|
|
|
next(ovr);
|
|
|
|
|
2023-02-26 10:03:25 +00:00
|
|
|
if (!callInProgress && eventQueue[0] !== undefined && eventQueue[0].id == event.id)
|
2023-02-25 14:00:57 +00:00
|
|
|
next(ovr);
|
2023-07-12 17:59:04 +00:00
|
|
|
else
|
|
|
|
eventQueue = [];
|
2023-02-25 14:00:57 +00:00
|
|
|
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
};
|
|
|
|
|
2023-02-26 08:51:45 +00:00
|
|
|
let roundedRect = function(ovr, x,y,w,h,filled){
|
2023-02-25 14:00:57 +00:00
|
|
|
var poly = [
|
|
|
|
x,y+4,
|
|
|
|
x+4,y,
|
|
|
|
x+w-5,y,
|
|
|
|
x+w-1,y+4,
|
|
|
|
x+w-1,y+h-5,
|
|
|
|
x+w-5,y+h-1,
|
|
|
|
x+4,y+h-1,
|
|
|
|
x,y+h-5,
|
|
|
|
x,y+4
|
|
|
|
];
|
|
|
|
ovr.drawPoly(poly,true);
|
2023-02-26 08:51:45 +00:00
|
|
|
if (filled) ovr.fillPoly(poly,true);
|
|
|
|
};
|
|
|
|
|
|
|
|
let drawScreen = function(ovr, title, titleFont, src, iconcolor, icon){
|
|
|
|
ovr.setBgColor(ovr.theme.bg2);
|
2023-02-26 16:00:48 +00:00
|
|
|
ovr.clearRect(2,2,ovr.getWidth()-3,37);
|
2023-02-26 08:51:45 +00:00
|
|
|
|
|
|
|
ovr.setColor(ovr.theme.fg2);
|
|
|
|
ovr.setFont(settings.fontSmall);
|
|
|
|
ovr.setFontAlign(0,-1);
|
2023-02-26 12:47:39 +00:00
|
|
|
|
|
|
|
let textCenter = (ovr.getWidth()+35-26)/2;
|
|
|
|
|
|
|
|
if (src) {
|
2023-02-26 19:03:35 +00:00
|
|
|
let shortened = src;
|
|
|
|
while (ovr.stringWidth(shortened) > ovr.getWidth()-80) shortened = shortened.substring(0,shortened.length-2);
|
|
|
|
if (shortened.length != src.length) shortened += "...";
|
|
|
|
ovr.drawString(shortened, textCenter, 2);
|
2023-02-26 12:47:39 +00:00
|
|
|
}
|
2023-02-26 08:51:45 +00:00
|
|
|
|
2023-02-26 12:09:36 +00:00
|
|
|
ovr.setFontAlign(0,0);
|
2023-02-26 08:51:45 +00:00
|
|
|
ovr.setFont(titleFont);
|
2023-02-26 18:22:11 +00:00
|
|
|
if (title) ovr.drawString(title, textCenter, 38/2 + 5);
|
2023-02-26 08:51:45 +00:00
|
|
|
|
|
|
|
ovr.setColor(ovr.theme.fg2);
|
2023-02-26 12:09:36 +00:00
|
|
|
|
|
|
|
ovr.setFont(settings.fontMedium);
|
2023-02-26 08:51:45 +00:00
|
|
|
roundedRect(ovr, ovr.getWidth()-26,5,22,30,false);
|
2023-02-26 18:22:11 +00:00
|
|
|
ovr.setFont("Vector:16");
|
2023-02-26 12:09:36 +00:00
|
|
|
ovr.drawString("X",ovr.getWidth()-14,21);
|
2023-02-25 14:00:57 +00:00
|
|
|
|
2023-02-26 12:09:36 +00:00
|
|
|
ovr.setColor("#888");
|
|
|
|
roundedRect(ovr, 5,5,30,30,true);
|
2023-02-26 20:17:58 +00:00
|
|
|
ovr.setColor(ovr.getBPP() != 1 ? iconcolor : ovr.theme.bg2);
|
2023-02-26 08:51:45 +00:00
|
|
|
ovr.drawImage(icon,8,8);
|
2023-02-25 14:00:57 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
let showMessage = function(ovr, msg) {
|
|
|
|
LOG("showMessage");
|
2023-02-26 19:02:20 +00:00
|
|
|
ovr.setBgColor(ovr.theme.bg);
|
2023-02-25 14:00:57 +00:00
|
|
|
|
2023-02-26 10:03:25 +00:00
|
|
|
if (typeof msg.CanscrollDown === "undefined")
|
|
|
|
msg.CanscrollDown = false;
|
|
|
|
if (typeof msg.CanscrollUp === "undefined")
|
|
|
|
msg.CanscrollUp = false;
|
2023-02-25 14:00:57 +00:00
|
|
|
|
|
|
|
// Normal text message display
|
|
|
|
let title = msg.title,
|
|
|
|
titleFont = settings.fontLarge,
|
|
|
|
lines;
|
|
|
|
if (title) {
|
2023-02-26 12:09:36 +00:00
|
|
|
let w = ovr.getWidth() - 35 - 26;
|
2023-02-25 14:00:57 +00:00
|
|
|
if (ovr.setFont(titleFont).stringWidth(title) > w)
|
|
|
|
titleFont = settings.fontMedium;
|
|
|
|
if (ovr.setFont(titleFont).stringWidth(title) > w) {
|
|
|
|
lines = ovr.wrapString(title, w);
|
|
|
|
title = (lines.length > 2) ? lines.slice(0, 2).join("\n") + "..." : lines.join("\n");
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
drawScreen(ovr, title, titleFont, msg.src || /*LANG*/ "Message", require("messageicons").getColor(msg), require("messageicons").getImage(msg));
|
|
|
|
|
2023-02-26 17:51:23 +00:00
|
|
|
if (!isQuiet() && msg.new) {
|
2023-02-25 14:00:57 +00:00
|
|
|
msg.new = false;
|
|
|
|
Bangle.buzz();
|
|
|
|
}
|
|
|
|
|
2023-02-26 10:03:25 +00:00
|
|
|
drawMessage(ovr, msg);
|
2023-02-25 14:00:57 +00:00
|
|
|
};
|
|
|
|
|
2023-02-26 10:03:25 +00:00
|
|
|
let drawBorder = function(ovr) {
|
2023-07-15 13:04:32 +00:00
|
|
|
LOG("drawBorder", isQuiet());
|
2023-02-25 14:00:57 +00:00
|
|
|
if (Bangle.isLocked())
|
2023-02-26 09:43:46 +00:00
|
|
|
ovr.setColor(ovr.theme.fgH);
|
2023-02-25 14:00:57 +00:00
|
|
|
else
|
2023-02-26 09:43:46 +00:00
|
|
|
ovr.setColor(ovr.theme.fg);
|
2023-02-25 14:00:57 +00:00
|
|
|
ovr.drawRect(0,0,ovr.getWidth()-1,ovr.getHeight()-1);
|
|
|
|
ovr.drawRect(1,1,ovr.getWidth()-2,ovr.getHeight()-2);
|
2023-02-26 20:17:58 +00:00
|
|
|
show(ovr);
|
2023-02-25 14:00:57 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
let showCall = function(ovr, msg) {
|
|
|
|
LOG("showCall");
|
|
|
|
LOG(msg);
|
|
|
|
|
|
|
|
if (msg.t == "remove") {
|
|
|
|
LOG("hide call screen");
|
|
|
|
next(ovr); //dont shift
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
callInProgress = true;
|
|
|
|
|
|
|
|
let title = msg.title,
|
|
|
|
titleFont = settings.fontLarge,
|
|
|
|
lines;
|
|
|
|
if (title) {
|
2023-02-26 12:09:36 +00:00
|
|
|
let w = ovr.getWidth() - 35 -26;
|
2023-02-25 14:00:57 +00:00
|
|
|
if (ovr.setFont(titleFont).stringWidth(title) > w)
|
|
|
|
titleFont = settings.fontMedium;
|
|
|
|
if (ovr.setFont(titleFont).stringWidth(title) > w) {
|
|
|
|
lines = ovr.wrapString(title, w);
|
|
|
|
title = (lines.length > 2) ? lines.slice(0, 2).join("\n") + "..." : lines.join("\n");
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
drawScreen(ovr, title, titleFont, msg.src || /*LANG*/ "Message", require("messageicons").getColor(msg), require("messageicons").getImage(msg));
|
|
|
|
|
2023-02-26 10:03:25 +00:00
|
|
|
stopCallBuzz();
|
2023-02-26 17:51:23 +00:00
|
|
|
if (!isQuiet()) {
|
2023-02-25 14:00:57 +00:00
|
|
|
if (msg.new) {
|
|
|
|
msg.new = false;
|
2023-02-26 14:53:00 +00:00
|
|
|
if (callBuzzTimer) clearInterval(callBuzzTimer);
|
2023-02-26 10:03:25 +00:00
|
|
|
callBuzzTimer = setInterval(function() {
|
2023-02-25 14:00:57 +00:00
|
|
|
Bangle.buzz(500);
|
|
|
|
}, 1000);
|
|
|
|
|
|
|
|
Bangle.buzz(500);
|
|
|
|
}
|
|
|
|
}
|
2023-02-26 10:03:25 +00:00
|
|
|
drawMessage(ovr, msg);
|
2023-02-25 14:00:57 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
let next = function(ovr) {
|
|
|
|
LOG("next");
|
2023-02-26 10:03:25 +00:00
|
|
|
stopCallBuzz();
|
2023-02-25 14:00:57 +00:00
|
|
|
|
|
|
|
if (!callInProgress)
|
2023-02-26 10:03:25 +00:00
|
|
|
eventQueue.shift();
|
2023-02-25 14:00:57 +00:00
|
|
|
|
|
|
|
callInProgress = false;
|
2023-02-26 10:03:25 +00:00
|
|
|
if (eventQueue.length == 0) {
|
2023-02-25 14:00:57 +00:00
|
|
|
LOG("no element in queue - closing");
|
|
|
|
cleanup();
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
2023-02-26 10:03:25 +00:00
|
|
|
showMessage(ovr, eventQueue[0]);
|
2023-02-25 14:00:57 +00:00
|
|
|
};
|
|
|
|
|
2023-02-26 10:03:25 +00:00
|
|
|
let callBuzzTimer = null;
|
|
|
|
let stopCallBuzz = function() {
|
|
|
|
if (callBuzzTimer) {
|
|
|
|
clearInterval(callBuzzTimer);
|
2023-02-26 14:53:00 +00:00
|
|
|
callBuzzTimer = undefined;
|
2023-02-25 14:00:57 +00:00
|
|
|
}
|
|
|
|
};
|
|
|
|
|
2023-02-26 10:03:25 +00:00
|
|
|
let drawTriangleUp = function(ovr) {
|
2023-02-25 14:00:57 +00:00
|
|
|
ovr.reset();
|
2023-02-26 10:03:25 +00:00
|
|
|
ovr.fillPoly([ovr.getWidth()-9, 46,ovr.getWidth()-14, 56,ovr.getWidth()-4, 56]);
|
2023-02-25 14:00:57 +00:00
|
|
|
};
|
|
|
|
|
2023-02-26 10:03:25 +00:00
|
|
|
let drawTriangleDown = function(ovr) {
|
2023-02-25 14:00:57 +00:00
|
|
|
ovr.reset();
|
2023-02-26 10:03:25 +00:00
|
|
|
ovr.fillPoly([ovr.getWidth()-9, ovr.getHeight()-6, ovr.getWidth()-14, ovr.getHeight()-16, ovr.getWidth()-4, ovr.getHeight()-16]);
|
2023-02-25 14:00:57 +00:00
|
|
|
};
|
|
|
|
|
2023-02-28 19:02:47 +00:00
|
|
|
let linesScroll = 6;
|
|
|
|
|
2023-02-26 10:03:25 +00:00
|
|
|
let scrollUp = function(ovr) {
|
|
|
|
msg = eventQueue[0];
|
|
|
|
LOG("up", msg);
|
2023-02-25 14:00:57 +00:00
|
|
|
if (typeof msg.FirstLine === "undefined")
|
|
|
|
msg.FirstLine = 0;
|
2023-02-26 10:03:25 +00:00
|
|
|
if (typeof msg.CanscrollUp === "undefined")
|
|
|
|
msg.CanscrollUp = false;
|
2023-02-25 14:00:57 +00:00
|
|
|
|
2023-02-26 10:03:25 +00:00
|
|
|
if (!msg.CanscrollUp) return;
|
2023-02-25 14:00:57 +00:00
|
|
|
|
2023-02-28 19:02:47 +00:00
|
|
|
msg.FirstLine = msg.FirstLine > 0 ? msg.FirstLine - linesScroll : 0;
|
2023-02-25 14:00:57 +00:00
|
|
|
|
2023-02-26 10:03:25 +00:00
|
|
|
drawMessage(ovr, msg);
|
2023-02-25 14:00:57 +00:00
|
|
|
};
|
|
|
|
|
2023-02-26 10:03:25 +00:00
|
|
|
let scrollDown = function(ovr) {
|
|
|
|
msg = eventQueue[0];
|
|
|
|
LOG("down", msg);
|
2023-02-25 14:00:57 +00:00
|
|
|
if (typeof msg.FirstLine === "undefined")
|
|
|
|
msg.FirstLine = 0;
|
2023-02-26 10:03:25 +00:00
|
|
|
if (typeof msg.CanscrollDown === "undefined")
|
|
|
|
msg.CanscrollDown = false;
|
2023-02-25 14:00:57 +00:00
|
|
|
|
2023-02-26 10:03:25 +00:00
|
|
|
if (!msg.CanscrollDown) return;
|
2023-02-25 14:00:57 +00:00
|
|
|
|
2023-02-28 19:02:47 +00:00
|
|
|
msg.FirstLine = msg.FirstLine + linesScroll;
|
2023-02-26 10:03:25 +00:00
|
|
|
drawMessage(ovr, msg);
|
2023-02-25 14:00:57 +00:00
|
|
|
};
|
|
|
|
|
2023-02-26 10:03:25 +00:00
|
|
|
let drawMessage = function(ovr, msg) {
|
2023-02-25 14:00:57 +00:00
|
|
|
let MyWrapString = function(str, maxWidth) {
|
|
|
|
str = str.replace("\r\n", "\n").replace("\r", "\n");
|
|
|
|
return ovr.wrapString(str, maxWidth);
|
|
|
|
};
|
|
|
|
|
|
|
|
if (typeof msg.FirstLine === "undefined") msg.FirstLine = 0;
|
|
|
|
|
|
|
|
let bodyFont = typeof msg.bodyFont === "undefined" ? settings.fontMedium : msg.bodyFont;
|
2023-02-26 10:03:25 +00:00
|
|
|
let Padding = 3;
|
2023-02-25 14:00:57 +00:00
|
|
|
if (typeof msg.lines === "undefined") {
|
|
|
|
ovr.setFont(bodyFont);
|
|
|
|
msg.lines = MyWrapString(msg.body, ovr.getWidth() - (Padding * 2));
|
|
|
|
if (msg.lines.length <= 2) {
|
|
|
|
bodyFont = ovr.getFonts().includes("Vector") ? "Vector:20" : "6x8:3";
|
|
|
|
ovr.setFont(bodyFont);
|
|
|
|
msg.lines = MyWrapString(msg.body, ovr.getWidth() - (Padding * 2));
|
|
|
|
msg.bodyFont = bodyFont;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2023-02-26 08:51:45 +00:00
|
|
|
let NumLines = 7;
|
2023-02-25 14:00:57 +00:00
|
|
|
|
2023-02-26 10:03:25 +00:00
|
|
|
let linesToPrint = (msg.lines.length > NumLines) ? msg.lines.slice(msg.FirstLine, msg.FirstLine + NumLines) : msg.lines;
|
2023-02-25 14:00:57 +00:00
|
|
|
|
|
|
|
let yText = 40;
|
|
|
|
|
|
|
|
ovr.setBgColor(ovr.theme.bg);
|
2023-02-26 12:09:36 +00:00
|
|
|
ovr.setColor(ovr.theme.fg);
|
2023-02-26 18:22:11 +00:00
|
|
|
ovr.clearRect(2, yText, ovrw-3, ovrh-3);
|
2023-02-25 14:00:57 +00:00
|
|
|
let xText = Padding;
|
|
|
|
yText += Padding;
|
|
|
|
ovr.setFont(bodyFont);
|
|
|
|
let HText = ovr.getFontHeight();
|
|
|
|
|
2023-02-26 08:51:45 +00:00
|
|
|
yText = ((ovrh - yText) / 2) - (linesToPrint.length * HText / 2) + yText;
|
2023-02-25 14:00:57 +00:00
|
|
|
|
2023-02-26 12:09:36 +00:00
|
|
|
if (linesToPrint.length <= 3) {
|
2023-02-25 14:00:57 +00:00
|
|
|
ovr.setFontAlign(0, -1);
|
|
|
|
xText = ovr.getWidth() / 2;
|
|
|
|
} else
|
|
|
|
ovr.setFontAlign(-1, -1);
|
|
|
|
|
|
|
|
|
|
|
|
linesToPrint.forEach((line, i) => {
|
|
|
|
ovr.drawString(line, xText, yText + HText * i);
|
|
|
|
});
|
|
|
|
|
|
|
|
if (msg.FirstLine != 0) {
|
2023-02-26 10:03:25 +00:00
|
|
|
msg.CanscrollUp = true;
|
|
|
|
drawTriangleUp(ovr);
|
2023-02-25 14:00:57 +00:00
|
|
|
} else
|
2023-02-26 10:03:25 +00:00
|
|
|
msg.CanscrollUp = false;
|
2023-02-25 14:00:57 +00:00
|
|
|
|
|
|
|
if (msg.FirstLine + linesToPrint.length < msg.lines.length) {
|
2023-02-26 10:03:25 +00:00
|
|
|
msg.CanscrollDown = true;
|
|
|
|
drawTriangleDown(ovr);
|
2023-02-25 14:00:57 +00:00
|
|
|
} else
|
2023-02-26 10:03:25 +00:00
|
|
|
msg.CanscrollDown = false;
|
2023-02-26 20:17:58 +00:00
|
|
|
show(ovr);
|
2023-02-26 18:09:21 +00:00
|
|
|
if (!isQuiet()) Bangle.setLCDPower(1);
|
2023-02-25 14:00:57 +00:00
|
|
|
};
|
|
|
|
|
2023-02-26 10:03:25 +00:00
|
|
|
let getSwipeHandler = function(ovr){
|
|
|
|
return (lr, ud) => {
|
|
|
|
if (ud == 1) {
|
|
|
|
scrollUp(ovr);
|
|
|
|
} else if (ud == -1){
|
|
|
|
scrollDown(ovr);
|
|
|
|
}
|
|
|
|
};
|
|
|
|
};
|
|
|
|
|
2023-02-25 14:00:57 +00:00
|
|
|
let getTouchHandler = function(ovr){
|
2023-02-26 10:03:25 +00:00
|
|
|
return (_, xy) => {
|
2023-02-26 08:51:45 +00:00
|
|
|
if (xy.y < ovry + 40){
|
2023-02-25 14:00:57 +00:00
|
|
|
next(ovr);
|
|
|
|
}
|
|
|
|
};
|
|
|
|
};
|
|
|
|
|
2023-02-26 09:25:29 +00:00
|
|
|
let restoreHandler = function(event){
|
2023-02-27 22:31:10 +00:00
|
|
|
LOG("Restore", event, backup[event]);
|
|
|
|
Bangle.removeAllListeners(event);
|
|
|
|
Bangle["#on" + event]=backup[event];
|
|
|
|
backup[event] = undefined;
|
2023-02-26 09:25:29 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
let backupHandler = function(event){
|
2023-02-27 22:31:10 +00:00
|
|
|
if (backupDone) return; // do not backup, overlay is already up
|
2023-02-26 09:25:29 +00:00
|
|
|
backup[event] = Bangle["#on" + event];
|
2023-02-27 22:31:10 +00:00
|
|
|
LOG("Backed up", backup[event]);
|
2023-02-26 09:25:29 +00:00
|
|
|
Bangle.removeAllListeners(event);
|
|
|
|
};
|
|
|
|
|
2023-02-25 14:00:57 +00:00
|
|
|
let cleanup = function(){
|
|
|
|
if (lockListener) {
|
|
|
|
Bangle.removeListener("lock", lockListener);
|
|
|
|
lockListener = undefined;
|
|
|
|
}
|
2023-02-26 09:25:29 +00:00
|
|
|
restoreHandler("touch");
|
|
|
|
restoreHandler("swipe");
|
|
|
|
restoreHandler("drag");
|
2023-02-25 14:00:57 +00:00
|
|
|
|
|
|
|
Bangle.setLCDOverlay();
|
2023-02-27 22:31:10 +00:00
|
|
|
backupDone = false;
|
2023-02-26 14:23:41 +00:00
|
|
|
ovr = undefined;
|
2023-02-26 18:22:11 +00:00
|
|
|
quiet = undefined;
|
2023-02-25 14:00:57 +00:00
|
|
|
};
|
|
|
|
|
2023-02-26 09:25:29 +00:00
|
|
|
let backup = {};
|
2023-02-25 14:00:57 +00:00
|
|
|
|
2023-02-27 22:31:10 +00:00
|
|
|
let backupDone = false;
|
|
|
|
|
2023-02-25 14:00:57 +00:00
|
|
|
let main = function(ovr, event) {
|
|
|
|
LOG("Main", event, settings);
|
2023-02-26 14:53:00 +00:00
|
|
|
|
2023-02-25 14:00:57 +00:00
|
|
|
if (!lockListener) {
|
|
|
|
lockListener = function (){
|
2023-02-26 10:03:25 +00:00
|
|
|
drawBorder(ovr);
|
2023-02-25 14:00:57 +00:00
|
|
|
};
|
|
|
|
Bangle.on('lock', lockListener);
|
|
|
|
}
|
2023-02-26 09:25:29 +00:00
|
|
|
backupHandler("touch");
|
|
|
|
backupHandler("swipe");
|
|
|
|
backupHandler("drag");
|
2023-02-28 06:57:06 +00:00
|
|
|
if (!backupDone){
|
|
|
|
Bangle.on('touch', getTouchHandler(ovr));
|
|
|
|
Bangle.on('swipe', getSwipeHandler(ovr));
|
|
|
|
}
|
2023-02-27 22:31:10 +00:00
|
|
|
backupDone=true;
|
2023-02-25 14:00:57 +00:00
|
|
|
|
|
|
|
if (event !== undefined){
|
2023-02-26 16:00:48 +00:00
|
|
|
drawBorder(ovr);
|
2023-02-25 14:00:57 +00:00
|
|
|
manageEvent(ovr, event);
|
|
|
|
} else {
|
|
|
|
LOG("No event given");
|
|
|
|
cleanup();
|
|
|
|
}
|
|
|
|
};
|
|
|
|
|
2023-02-26 14:23:41 +00:00
|
|
|
let ovr;
|
|
|
|
|
2023-07-12 17:59:04 +00:00
|
|
|
exports.message = function(type, event) {
|
2023-07-15 13:04:32 +00:00
|
|
|
LOG("Got message", type, event);
|
2023-07-12 17:59:04 +00:00
|
|
|
// only handle some event types
|
|
|
|
if(!(type=="text" || type == "call")) return;
|
2023-07-13 17:11:29 +00:00
|
|
|
if(type=="text" && event.id == "nav") return;
|
2023-07-12 17:59:04 +00:00
|
|
|
if(event.handled) return;
|
2023-02-25 14:00:57 +00:00
|
|
|
|
2023-02-26 20:17:58 +00:00
|
|
|
bpp = 4;
|
|
|
|
if (process.memory().free < 2000) bpp = 1;
|
|
|
|
|
2023-02-26 14:23:41 +00:00
|
|
|
if (!ovr) {
|
2023-02-26 20:17:58 +00:00
|
|
|
ovr = Graphics.createArrayBuffer(ovrw, ovrh, bpp, {
|
2023-02-26 14:23:41 +00:00
|
|
|
msb: true
|
|
|
|
});
|
|
|
|
} else {
|
|
|
|
ovr.clear();
|
|
|
|
}
|
2023-02-25 14:00:57 +00:00
|
|
|
|
|
|
|
g = ovr;
|
|
|
|
|
2023-02-26 20:17:58 +00:00
|
|
|
if (bpp == 4)
|
|
|
|
ovr.theme = g.theme;
|
|
|
|
else
|
|
|
|
ovr.theme = { fg:0, bg:1, fg2:1, bg2:0, fgH:1, bgH:0 };
|
|
|
|
|
2023-02-25 14:00:57 +00:00
|
|
|
main(ovr, event);
|
2023-07-15 13:04:32 +00:00
|
|
|
if (!isQuiet()) Bangle.setLCDPower(1);
|
2023-07-12 17:59:04 +00:00
|
|
|
event.handled = true;
|
2023-02-25 14:00:57 +00:00
|
|
|
g = _g;
|
|
|
|
};
|