Dismiss Memory and wifi screen

This commit is contained in:
HarukiToreda 2025-05-06 01:07:29 -04:00
parent 3596ea20bc
commit 7bc473ed99
2 changed files with 43 additions and 22 deletions

View File

@ -3537,8 +3537,11 @@ void Screen::setFrames(FrameFocus focus)
normalFrames[numframes++] = drawLoRaFocused; normalFrames[numframes++] = drawLoRaFocused;
indicatorIcons.push_back(icon_radio); indicatorIcons.push_back(icon_radio);
if (!dismissedFrames.memory) {
fsi.positions.memory = numframes;
normalFrames[numframes++] = drawMemoryScreen; normalFrames[numframes++] = drawMemoryScreen;
indicatorIcons.push_back(icon_memory); indicatorIcons.push_back(icon_memory);
}
// then all the nodes // then all the nodes
// We only show a few nodes in our scrolling list - because meshes with many nodes would have too many screens // We only show a few nodes in our scrolling list - because meshes with many nodes would have too many screens
@ -3557,9 +3560,9 @@ void Screen::setFrames(FrameFocus focus)
// fsi.positions.settings = numframes; // fsi.positions.settings = numframes;
// normalFrames[numframes++] = &Screen::drawDebugInfoSettingsTrampoline; // normalFrames[numframes++] = &Screen::drawDebugInfoSettingsTrampoline;
fsi.positions.wifi = numframes;
#if HAS_WIFI && !defined(ARCH_PORTDUINO) #if HAS_WIFI && !defined(ARCH_PORTDUINO)
if (isWifiAvailable()) { if (!dismissedFrames.wifi && isWifiAvailable()) {
fsi.positions.wifi = numframes;
normalFrames[numframes++] = &Screen::drawDebugInfoWiFiTrampoline; normalFrames[numframes++] = &Screen::drawDebugInfoWiFiTrampoline;
indicatorIcons.push_back(icon_wifi); indicatorIcons.push_back(icon_wifi);
} }
@ -3627,25 +3630,35 @@ void Screen::dismissCurrentFrame()
uint8_t currentFrame = ui->getUiState()->currentFrame; uint8_t currentFrame = ui->getUiState()->currentFrame;
bool dismissed = false; bool dismissed = false;
// Only dismiss if the text message frame is currently valid and visible if (currentFrame == framesetInfo.positions.textMessage && devicestate.has_rx_text_message) {
if (framesetInfo.positions.textMessage != 255 && currentFrame == framesetInfo.positions.textMessage &&
devicestate.has_rx_text_message) {
LOG_INFO("Dismiss Text Message"); LOG_INFO("Dismiss Text Message");
devicestate.has_rx_text_message = false; devicestate.has_rx_text_message = false;
memset(&devicestate.rx_text_message, 0, sizeof(devicestate.rx_text_message)); // ✅ clear message memset(&devicestate.rx_text_message, 0, sizeof(devicestate.rx_text_message));
dismissedFrames.textMessage = true;
dismissed = true; dismissed = true;
} }
else if (currentFrame == framesetInfo.positions.waypoint && devicestate.has_rx_waypoint) { else if (currentFrame == framesetInfo.positions.waypoint && devicestate.has_rx_waypoint) {
LOG_DEBUG("Dismiss Waypoint"); LOG_DEBUG("Dismiss Waypoint");
devicestate.has_rx_waypoint = false; devicestate.has_rx_waypoint = false;
dismissedFrames.waypoint = true;
dismissed = true;
}
else if (currentFrame == framesetInfo.positions.wifi) {
LOG_DEBUG("Dismiss WiFi Screen");
dismissedFrames.wifi = true;
dismissed = true;
}
else if (currentFrame == framesetInfo.positions.memory) {
LOG_INFO("Dismiss Memory");
dismissedFrames.memory = true;
dismissed = true; dismissed = true;
} }
// If we did make changes to dismiss, we now need to regenerate the frameset if (dismissed) {
if (dismissed) setFrames(FOCUS_DEFAULT); // You could also use FOCUS_PRESERVE
setFrames();
} }
}
void Screen::handleStartFirmwareUpdateScreen() void Screen::handleStartFirmwareUpdateScreen()
{ {

View File

@ -601,19 +601,27 @@ class Screen : public concurrency::OSThread
// - Used to dismiss the currently shown frame (txt; waypoint) by CardKB combo // - Used to dismiss the currently shown frame (txt; waypoint) by CardKB combo
struct FramesetInfo { struct FramesetInfo {
struct FramePositions { struct FramePositions {
uint8_t fault = 0; uint8_t fault = 255;
uint8_t textMessage = 0; uint8_t textMessage = 255;
uint8_t waypoint = 0; uint8_t waypoint = 255;
uint8_t focusedModule = 0; uint8_t focusedModule = 255;
uint8_t log = 0; uint8_t log = 255;
uint8_t settings = 0; uint8_t settings = 255;
uint8_t wifi = 0; uint8_t wifi = 255;
uint8_t deviceFocused = 0; uint8_t deviceFocused = 255;
uint8_t memory = 255;
} positions; } positions;
uint8_t frameCount = 0; uint8_t frameCount = 0;
} framesetInfo; } framesetInfo;
struct DismissedFrames {
bool textMessage = false;
bool waypoint = false;
bool wifi = false;
bool memory = false;
} dismissedFrames;
// Which frame we want to be displayed, after we regen the frameset by calling setFrames // Which frame we want to be displayed, after we regen the frameset by calling setFrames
enum FrameFocus : uint8_t { enum FrameFocus : uint8_t {
FOCUS_DEFAULT, // No specific frame FOCUS_DEFAULT, // No specific frame