From 11e31f4bbec74111ce5778257490ff86f8477a37 Mon Sep 17 00:00:00 2001 From: Martin Boonk Date: Sat, 25 Feb 2023 15:00:57 +0100 Subject: [PATCH] messagesoverlay - Initial fork of messages_light with drawing to overlay --- apps/messagesoverlay/ChangeLog | 1 + apps/messagesoverlay/README.md | 11 + apps/messagesoverlay/app-icon.js | 1 + apps/messagesoverlay/app-icon.png | Bin 0 -> 2841 bytes apps/messagesoverlay/app.png | Bin 0 -> 2300 bytes apps/messagesoverlay/boot.js | 7 + apps/messagesoverlay/lib.js | 438 +++++++++++++++++++++++++++++ apps/messagesoverlay/metadata.json | 18 ++ apps/messagesoverlay/settings.js | 1 + 9 files changed, 477 insertions(+) create mode 100644 apps/messagesoverlay/ChangeLog create mode 100644 apps/messagesoverlay/README.md create mode 100644 apps/messagesoverlay/app-icon.js create mode 100644 apps/messagesoverlay/app-icon.png create mode 100644 apps/messagesoverlay/app.png create mode 100644 apps/messagesoverlay/boot.js create mode 100644 apps/messagesoverlay/lib.js create mode 100644 apps/messagesoverlay/metadata.json create mode 100644 apps/messagesoverlay/settings.js diff --git a/apps/messagesoverlay/ChangeLog b/apps/messagesoverlay/ChangeLog new file mode 100644 index 000000000..da98bfbce --- /dev/null +++ b/apps/messagesoverlay/ChangeLog @@ -0,0 +1 @@ +0.01: Initial fork from messages_light \ No newline at end of file diff --git a/apps/messagesoverlay/README.md b/apps/messagesoverlay/README.md new file mode 100644 index 000000000..00fe39bd0 --- /dev/null +++ b/apps/messagesoverlay/README.md @@ -0,0 +1,11 @@ +# Messages app + +This app handles the display of messages and message notifications. + +It is a GUI replacement for the `messages` apps. + + +## Creator + +Rarder44 + diff --git a/apps/messagesoverlay/app-icon.js b/apps/messagesoverlay/app-icon.js new file mode 100644 index 000000000..7d1da35c9 --- /dev/null +++ b/apps/messagesoverlay/app-icon.js @@ -0,0 +1 @@ +require("heatshrink").decompress(atob("mEw4UA/4ACBIMQwhL/ABMBqoAEoALDioLFqgLDBQoABERIkEBZcFBY9QBYVe1QAB1YLGrSlC/YLGrYHCr4Lrr9drpLC1oLEAAN5rxKB/ILHEYV5EY4LIHYoLorRaBqoPCBYlfUoXrBYwGBrdeDIILIvXVBZFa1I+CBY/5BZIHBBwOq1ILGrXVvf//oLGq+trLLFBYVVvQxCBY9XJIQLCgILDHoVVoALHAAQLCgALHBQUAioKFqgLDEgwiDAH4AGA")) \ No newline at end of file diff --git a/apps/messagesoverlay/app-icon.png b/apps/messagesoverlay/app-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..c9b4b62ac2eadee63a98380856f9337d0050578a GIT binary patch literal 2841 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 literal 0 HcmV?d00001 diff --git a/apps/messagesoverlay/boot.js b/apps/messagesoverlay/boot.js new file mode 100644 index 000000000..7731d608a --- /dev/null +++ b/apps/messagesoverlay/boot.js @@ -0,0 +1,7 @@ +//override require to filter require("message") +global.require_real=global.require; +global.require = (_require => file => { + if (file==="messages") file = "messagesoverlay"; + return _require(file); +})(require); + diff --git a/apps/messagesoverlay/lib.js b/apps/messagesoverlay/lib.js new file mode 100644 index 000000000..167d68134 --- /dev/null +++ b/apps/messagesoverlay/lib.js @@ -0,0 +1,438 @@ +/* MESSAGES is a list of: + {id:int, + src, + title, + subject, + body, + sender, + tel:string, + new:true // not read yet + } +*/ + + +let lockListener; + +let LOG = function() { + print.apply(null, arguments); +}; + +let settings = (() => { + let tmp = {}; + tmp.NewEventFileName = "messagesoverlay.NewEvent.json"; + + tmp.fontSmall = "6x8"; + tmp.fontMedium = g.getFonts().includes("Vector") ? "Vector:16" : "6x8:2"; + tmp.fontBig = g.getFonts().includes("12x20") ? "12x20" : "6x8:2"; + tmp.fontLarge = g.getFonts().includes("6x15") ? "6x15:2" : "6x8:4"; + + tmp.colLock = g.theme.dark ? "#ff0000" : "#ff0000"; + + tmp.quiet = ((require('Storage').readJSON('settings.json', 1) || {}).quiet); + + return tmp; +})(); +let EventQueue = []; +let callInProgress = false; + + +let manageEvent = function(ovr, event) { + event.new = true; + + LOG("manageEvent"); + if (event.id == "call") { + showCall(ovr, event); + return; + } + switch (event.t) { + case "add": + EventQueue.unshift(event); + + if (!callInProgress) + showMessage(ovr, event); + break; + + case "modify": + let find = false; + EventQueue.forEach(element => { + if (element.id == event.id) { + find = true; + Object.assign(element, event); + } + }); + if (!find) + EventQueue.unshift(event); + + if (!callInProgress) + showMessage(ovr, event); + break; + + case "remove": + if (EventQueue.length == 0 && !callInProgress) + next(ovr); + + if (!callInProgress && EventQueue[0] !== undefined && EventQueue[0].id == event.id) + next(ovr); + + else { + let newEventQueue = []; + EventQueue.forEach(element => { + if (element.id != event.id) + newEventQueue.push(element); + }); + EventQueue = newEventQueue; + } + + break; + case "musicstate": + case "musicinfo": + + break; + } +}; + +let drawScreen = function(ovr, title, titleFont, src, iconcolor, icon){ + ovr.setBgColor(ovr.theme.bg2); + ovr.clearRect(0,0,ovr.getWidth(),40); + + ovr.setColor(ovr.theme.fg2); + ovr.setFont(settings.fontSmall); + ovr.setFontAlign(0,-1); + ovr.drawString(src, ovr.getWidth()/2, 2); + + ovr.setFont(titleFont); + ovr.drawString(title, ovr.getWidth()/2, 12); + + let x = 150; + let y = 5; + let w = 22; + let h = 30; + 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.setColor(ovr.theme.fg2); + ovr.drawPoly(poly,true); + ovr.drawString("X",160,10); + + ovr.setColor(iconcolor); + ovr.setBgColor("#fff"); + ovr.drawImage(icon,10,10); +}; + +let showMessage = function(ovr, msg) { + LOG("showMessage"); + LOG(msg); + ovr.setBgColor(settings.colBg); + + + if (typeof msg.CanScrollDown === "undefined") + msg.CanScrollDown = false; + if (typeof msg.CanScrollUp === "undefined") + msg.CanScrollUp = false; + + // Normal text message display + let title = msg.title, + titleFont = settings.fontLarge, + lines; + if (title) { + let w = ovr.getWidth() - 48; + 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)); + + if (!settings.quiet && msg.new) { + msg.new = false; + Bangle.buzz(); + } + + PrintMessageStrings(ovr, msg); +}; + +let DrawLock = function(ovr) { + if (Bangle.isLocked()) + ovr.setColor(settings.colLock); + else + ovr.setColor(ovr.theme.bg2); + ovr.drawRect(0,0,ovr.getWidth()-1,ovr.getHeight()-1); + ovr.drawRect(1,1,ovr.getWidth()-2,ovr.getHeight()-2); + Bangle.setLCDOverlay(ovr,0,0); +}; + +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) { + let w = ovr.getWidth() - 48; + 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)); + + StopBuzzCall(); + if (!settings.quiet) { + if (msg.new) { + msg.new = false; + CallBuzzTimer = setInterval(function() { + Bangle.buzz(500); + }, 1000); + + Bangle.buzz(500); + } + } + PrintMessageStrings(ovr, msg); +}; + +let next = function(ovr) { + LOG("next"); + StopBuzzCall(); + + if (!callInProgress) + EventQueue.shift(); + + callInProgress = false; + if (EventQueue.length == 0) { + LOG("no element in queue - closing"); + cleanup(); + return; + } + + showMessage(ovr, EventQueue[0]); +}; + +let showMapMessage = function(ovr, msg) { + ovr.clearRect(Bangle.appRect); + PrintMessageStrings(ovr, { + body: "Not implemented!" + }); +}; + +let CallBuzzTimer = null; +let StopBuzzCall = function() { + if (CallBuzzTimer) { + clearInterval(CallBuzzTimer); + CallBuzzTimer = null; + } +}; + +let DrawTriangleUp = function(ovr) { + ovr.reset(); + ovr.fillPoly([169, 46, 164, 56, 174, 56]); +}; + +let DrawTriangleDown = function(ovr) { + ovr.reset(); + ovr.fillPoly([169, 170, 164, 160, 174, 160]); +}; + +let ScrollUp = function(ovr, msg) { + msg = EventQueue[0]; + + if (typeof msg.FirstLine === "undefined") + msg.FirstLine = 0; + if (typeof msg.CanScrollUp === "undefined") + msg.CanScrollUp = false; + + if (!msg.CanScrollUp) return; + + msg.FirstLine = msg.FirstLine > 0 ? msg.FirstLine - 1 : 0; + + PrintMessageStrings(ovr, msg); +}; + +let ScrollDown = function(ovr, msg) { + msg = EventQueue[0]; + if (typeof msg.FirstLine === "undefined") + msg.FirstLine = 0; + if (typeof msg.CanScrollDown === "undefined") + msg.CanScrollDown = false; + + if (!msg.CanScrollDown) return; + + msg.FirstLine = msg.FirstLine + 1; + PrintMessageStrings(ovr, msg); +}; + +let PrintMessageStrings = function(ovr, msg) { + 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; + let Padding = 2; + 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; + } + } + + let NumLines = 9; + let linesToPrint = (msg.lines.length > NumLines) ? msg.lines.slice(msg.FirstLine, msg.FirstLine + NumLines) : msg.lines; + + + let yText = 40; + + ovr.setBgColor(ovr.theme.bg); + ovr.clearRect(0, yText, 176, 176); + let xText = Padding; + yText += Padding; + ovr.setFont(bodyFont); + let HText = ovr.getFontHeight(); + + yText = ((176 - yText) / 2) - (linesToPrint.length * HText / 2) + yText; + + if (linesToPrint.length <= 2) { + 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) { + msg.CanScrollUp = true; + DrawTriangleUp(ovr); + } else + msg.CanScrollUp = false; + + if (msg.FirstLine + linesToPrint.length < msg.lines.length) { + msg.CanScrollDown = true; + DrawTriangleDown(ovr); + } else + msg.CanScrollDown = false; +}; + +let doubleTapUnlock = function(data) { + if (data.double) + { + Bangle.setLocked(false); + Bangle.setLCDPower(1); + } +}; + +let getTouchHandler = function(ovr){ + return (button, xy) => { + if (xy.y < 40){ + next(ovr); + } else if (xy.y < (ovr.getHeight() - 40)/2) { + ScrollUp(ovr); + } else { + ScrollDown(ovr); + } + }; +}; + +let touchHandler; + +let cleanup = function(){ + if (lockListener) { + Bangle.removeListener("lock", lockListener); + lockListener = undefined; + } + if (touchBack){ + Bangle["#ontouch"]=touchBack; + LOG("Restored touch handlers:", touchBack); + touchBack = undefined; + } + + Bangle.removeListener("tap", doubleTapUnlock); + if (touchHandler) Bangle.removeListener("touch", touchHandler); + Bangle.setLCDOverlay(); +}; + +let touchBack; + +let main = function(ovr, event) { + LOG("Main", event, settings); + if (!lockListener) { + lockListener = function (){ + DrawLock(ovr); + }; + Bangle.on('lock', lockListener); + } + + touchBack = Bangle["#ontouch"]; + Bangle.removeAllListeners("touch"); + + Bangle.on('tap', doubleTapUnlock); + if (touchHandler) Bangle.removeListener("touch",touchHandler); + touchHandler = getTouchHandler(ovr); + Bangle.on('touch', touchHandler); + + if (event !== undefined){ + manageEvent(ovr, event); + Bangle.setLCDPower(1); + DrawLock(ovr); + Bangle.setLCDOverlay(ovr,0,0); + } else { + LOG("No event given"); + cleanup(); + } +}; + +exports.pushMessage = function(event) { + if( event.id=="music") return require_real("messages").pushMessage(event); + + let ovr = Graphics.createArrayBuffer(g.getWidth(), g.getHeight(), 4, { + msb: true + }); + + let _g = g; + g = ovr; + + ovr.theme = g.theme; + if(event.t=="remove") return; + main(ovr, event); + Bangle.setLCDOverlay(ovr, 0, 0); + + g = _g; +}; + + +//Call original message library +exports.clearAll = function() { return require_real("messages").clearAll();}; +exports.getMessages = function() { return require_real("messages").getMessages();}; +exports.status = function() { return require_real("messages").status();}; +exports.buzz = function() { return require_real("messages").buzz(msgSrc);}; +exports.stopBuzz = function() { return require_real("messages").stopBuzz();}; \ No newline at end of file diff --git a/apps/messagesoverlay/metadata.json b/apps/messagesoverlay/metadata.json new file mode 100644 index 000000000..c1dc97bd9 --- /dev/null +++ b/apps/messagesoverlay/metadata.json @@ -0,0 +1,18 @@ +{ + "id": "messagesoverlay", + "name": "Messages Overlay", + "version": "0.01", + "description": "An overlay based implementation of a messages UI (display notifications from iOS and Gadgetbridge/Android)", + "icon": "app.png", + "type": "app", + "tags": "tool,system", + "supports": ["BANGLEJS2"], + "dependencies" : { "messageicons":"module","messages":"app" }, + "readme": "README.md", + "storage": [ + {"name":"messagesoverlay.settings.js","url":"settings.js"}, + {"name":"messagesoverlay.img","url":"app-icon.js","evaluate":true}, + {"name":"messagesoverlay","url":"lib.js"}, + {"name":"messagesoverlay.boot.js","url":"boot.js"} + ] +} diff --git a/apps/messagesoverlay/settings.js b/apps/messagesoverlay/settings.js new file mode 100644 index 000000000..b7197c70a --- /dev/null +++ b/apps/messagesoverlay/settings.js @@ -0,0 +1 @@ +eval(require("Storage").read("messages.settings.js"));