From 2a7059c86ebea89dabe625c9b87fc8f9f3ca0e6c Mon Sep 17 00:00:00 2001 From: HarukiToreda <116696711+HarukiToreda@users.noreply.github.com> Date: Thu, 8 May 2025 23:12:05 -0400 Subject: [PATCH] Alert Message banner --- src/graphics/Screen.cpp | 28 +++++++++++++++++++++++----- 1 file changed, 23 insertions(+), 5 deletions(-) diff --git a/src/graphics/Screen.cpp b/src/graphics/Screen.cpp index 0029ed787..2a83c4653 100644 --- a/src/graphics/Screen.cpp +++ b/src/graphics/Screen.cpp @@ -4226,20 +4226,38 @@ int Screen::handleTextMessage(const meshtastic_MeshPacket *packet) devicestate.has_rx_text_message = true; // Needed to include the message frame hasUnreadMessage = true; // Enables mail icon in the header setFrames(FOCUS_PRESERVE); // Refresh frame list without switching view - forceDisplay(); // Forces screen redraw (this works in your codebase) + forceDisplay(); // Forces screen redraw - // === Show banner: "New Message" followed by name on second line === + // === Prepare banner content === const meshtastic_NodeInfoLite *node = nodeDB->getMeshNode(packet->from); - if (node && node->has_user && node->user.long_name[0]) { - String name = String(node->user.long_name); - screen->showOverlayBanner("New Message\nfrom " + name, 3000); // Multiline banner + const char *longName = (node && node->has_user) ? node->user.long_name : nullptr; + + const char *msgRaw = reinterpret_cast(packet->decoded.payload.bytes); + String msg = String(msgRaw); + msg.trim(); // Remove leading/trailing whitespace/newlines + + String banner; + + // Match bell character or exact alert text + if (msg == "\x07" || msg.indexOf("Alert Bell Character") != -1) { + banner = "Alert Received"; + } else { + banner = "New Message"; } + + if (longName && longName[0]) { + banner += "\nfrom "; + banner += longName; + } + + screen->showOverlayBanner(banner, 3000); } } return 0; } + // Triggered by MeshModules int Screen::handleUIFrameEvent(const UIFrameEvent *event) {