mirror of
https://github.com/meshtastic/firmware.git
synced 2025-12-22 10:42:49 +00:00
Message menu cleanup
This commit is contained in:
@@ -409,7 +409,7 @@ void menuHandler::clockMenu()
|
|||||||
}
|
}
|
||||||
void menuHandler::messageResponseMenu()
|
void menuHandler::messageResponseMenu()
|
||||||
{
|
{
|
||||||
enum optionsNumbers { Back = 0, ViewMode, DeleteAll, DeleteOldest, Preset, Freetext, Aloud, enumEnd };
|
enum optionsNumbers { Back = 0, ViewMode, DeleteAll, DeleteOldest, ReplyMenu, Aloud, enumEnd };
|
||||||
|
|
||||||
static const char *optionsArray[enumEnd];
|
static const char *optionsArray[enumEnd];
|
||||||
static int optionsEnumArray[enumEnd];
|
static int optionsEnumArray[enumEnd];
|
||||||
@@ -420,17 +420,9 @@ void menuHandler::messageResponseMenu()
|
|||||||
optionsArray[options] = "Back";
|
optionsArray[options] = "Back";
|
||||||
optionsEnumArray[options++] = Back;
|
optionsEnumArray[options++] = Back;
|
||||||
|
|
||||||
#if defined(M5STACK_UNITC6L)
|
// New Reply submenu (replaces Preset and Freetext directly in this menu)
|
||||||
optionsArray[options] = "Respond Preset";
|
optionsArray[options] = "Reply";
|
||||||
#else
|
optionsEnumArray[options++] = ReplyMenu;
|
||||||
optionsArray[options] = "Respond via Preset";
|
|
||||||
#endif
|
|
||||||
optionsEnumArray[options++] = Preset;
|
|
||||||
|
|
||||||
if (kb_found) {
|
|
||||||
optionsArray[options] = "Respond via Freetext";
|
|
||||||
optionsEnumArray[options++] = Freetext;
|
|
||||||
}
|
|
||||||
|
|
||||||
optionsArray[options] = "View Chats";
|
optionsArray[options] = "View Chats";
|
||||||
optionsEnumArray[options++] = ViewMode;
|
optionsEnumArray[options++] = ViewMode;
|
||||||
@@ -466,6 +458,11 @@ void menuHandler::messageResponseMenu()
|
|||||||
menuHandler::menuQueue = menuHandler::message_viewmode_menu;
|
menuHandler::menuQueue = menuHandler::message_viewmode_menu;
|
||||||
screen->runNow();
|
screen->runNow();
|
||||||
|
|
||||||
|
// Reply submenu
|
||||||
|
} else if (selected == ReplyMenu) {
|
||||||
|
menuHandler::menuQueue = menuHandler::reply_menu;
|
||||||
|
screen->runNow();
|
||||||
|
|
||||||
// Delete submenu
|
// Delete submenu
|
||||||
} else if (selected == 900) {
|
} else if (selected == 900) {
|
||||||
menuHandler::menuQueue = menuHandler::delete_messages_menu;
|
menuHandler::menuQueue = menuHandler::delete_messages_menu;
|
||||||
@@ -494,34 +491,6 @@ void menuHandler::messageResponseMenu()
|
|||||||
graphics::MessageRenderer::clearThreadRegistries();
|
graphics::MessageRenderer::clearThreadRegistries();
|
||||||
graphics::MessageRenderer::clearMessageCache();
|
graphics::MessageRenderer::clearMessageCache();
|
||||||
|
|
||||||
} else if (selected == Preset || selected == Freetext) {
|
|
||||||
if (mode == graphics::MessageRenderer::ThreadMode::CHANNEL) {
|
|
||||||
LOG_DEBUG("Replying to CHANNEL %d", ch);
|
|
||||||
if (selected == Preset)
|
|
||||||
cannedMessageModule->LaunchWithDestination(NODENUM_BROADCAST, ch);
|
|
||||||
else
|
|
||||||
cannedMessageModule->LaunchFreetextWithDestination(NODENUM_BROADCAST, ch);
|
|
||||||
} else if (mode == graphics::MessageRenderer::ThreadMode::DIRECT) {
|
|
||||||
LOG_DEBUG("Replying to DIRECT peer=0x%08x", peer);
|
|
||||||
if (selected == Preset)
|
|
||||||
cannedMessageModule->LaunchWithDestination(peer);
|
|
||||||
else
|
|
||||||
cannedMessageModule->LaunchFreetextWithDestination(peer);
|
|
||||||
} else {
|
|
||||||
LOG_DEBUG("Fallback reply using last rx_text_message");
|
|
||||||
if (devicestate.rx_text_message.to == NODENUM_BROADCAST) {
|
|
||||||
if (selected == Preset)
|
|
||||||
cannedMessageModule->LaunchWithDestination(NODENUM_BROADCAST, devicestate.rx_text_message.channel);
|
|
||||||
else
|
|
||||||
cannedMessageModule->LaunchFreetextWithDestination(NODENUM_BROADCAST,
|
|
||||||
devicestate.rx_text_message.channel);
|
|
||||||
} else {
|
|
||||||
if (selected == Preset)
|
|
||||||
cannedMessageModule->LaunchWithDestination(devicestate.rx_text_message.from);
|
|
||||||
else
|
|
||||||
cannedMessageModule->LaunchFreetextWithDestination(devicestate.rx_text_message.from);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#ifdef HAS_I2S
|
#ifdef HAS_I2S
|
||||||
} else if (selected == Aloud) {
|
} else if (selected == Aloud) {
|
||||||
const meshtastic_MeshPacket &mp = devicestate.rx_text_message;
|
const meshtastic_MeshPacket &mp = devicestate.rx_text_message;
|
||||||
@@ -532,6 +501,118 @@ void menuHandler::messageResponseMenu()
|
|||||||
};
|
};
|
||||||
screen->showOverlayBanner(bannerOptions);
|
screen->showOverlayBanner(bannerOptions);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void menuHandler::replyMenu()
|
||||||
|
{
|
||||||
|
enum replyOptions { Back = 0, ReplyPreset, ReplyFreetext, enumEnd };
|
||||||
|
|
||||||
|
static const char *optionsArray[enumEnd];
|
||||||
|
static int optionsEnumArray[enumEnd];
|
||||||
|
int options = 0;
|
||||||
|
|
||||||
|
// Back
|
||||||
|
optionsArray[options] = "Back";
|
||||||
|
optionsEnumArray[options++] = Back;
|
||||||
|
|
||||||
|
// Preset reply
|
||||||
|
#if defined(M5STACK_UNITC6L)
|
||||||
|
optionsArray[options] = "With Preset";
|
||||||
|
#else
|
||||||
|
optionsArray[options] = "With Preset";
|
||||||
|
#endif
|
||||||
|
optionsEnumArray[options++] = ReplyPreset;
|
||||||
|
|
||||||
|
// Freetext reply (only when keyboard exists)
|
||||||
|
if (kb_found) {
|
||||||
|
optionsArray[options] = "With Freetext";
|
||||||
|
optionsEnumArray[options++] = ReplyFreetext;
|
||||||
|
}
|
||||||
|
|
||||||
|
BannerOverlayOptions bannerOptions;
|
||||||
|
|
||||||
|
// Dynamic title based on thread mode
|
||||||
|
auto mode = graphics::MessageRenderer::getThreadMode();
|
||||||
|
if (mode == graphics::MessageRenderer::ThreadMode::CHANNEL) {
|
||||||
|
bannerOptions.message = "Reply to Channel";
|
||||||
|
}
|
||||||
|
else if (mode == graphics::MessageRenderer::ThreadMode::DIRECT) {
|
||||||
|
bannerOptions.message = "Reply to DM";
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
// View All
|
||||||
|
bannerOptions.message = "Reply to Last Msg";
|
||||||
|
}
|
||||||
|
|
||||||
|
bannerOptions.optionsArrayPtr = optionsArray;
|
||||||
|
bannerOptions.optionsEnumPtr = optionsEnumArray;
|
||||||
|
bannerOptions.optionsCount = options;
|
||||||
|
|
||||||
|
bannerOptions.bannerCallback = [](int selected) -> void {
|
||||||
|
|
||||||
|
auto mode = graphics::MessageRenderer::getThreadMode();
|
||||||
|
int ch = graphics::MessageRenderer::getThreadChannel();
|
||||||
|
uint32_t peer = graphics::MessageRenderer::getThreadPeer();
|
||||||
|
|
||||||
|
if (selected == Back) {
|
||||||
|
menuHandler::menuQueue = menuHandler::message_response_menu;
|
||||||
|
screen->runNow();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Preset reply
|
||||||
|
if (selected == ReplyPreset) {
|
||||||
|
|
||||||
|
if (mode == graphics::MessageRenderer::ThreadMode::CHANNEL) {
|
||||||
|
cannedMessageModule->LaunchWithDestination(NODENUM_BROADCAST, ch);
|
||||||
|
|
||||||
|
} else if (mode == graphics::MessageRenderer::ThreadMode::DIRECT) {
|
||||||
|
cannedMessageModule->LaunchWithDestination(peer);
|
||||||
|
|
||||||
|
} else {
|
||||||
|
// Fallback for last received message
|
||||||
|
if (devicestate.rx_text_message.to == NODENUM_BROADCAST) {
|
||||||
|
cannedMessageModule->LaunchWithDestination(
|
||||||
|
NODENUM_BROADCAST,
|
||||||
|
devicestate.rx_text_message.channel
|
||||||
|
);
|
||||||
|
} else {
|
||||||
|
cannedMessageModule->LaunchWithDestination(
|
||||||
|
devicestate.rx_text_message.from
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Freetext reply
|
||||||
|
if (selected == ReplyFreetext) {
|
||||||
|
|
||||||
|
if (mode == graphics::MessageRenderer::ThreadMode::CHANNEL) {
|
||||||
|
cannedMessageModule->LaunchFreetextWithDestination(NODENUM_BROADCAST, ch);
|
||||||
|
|
||||||
|
} else if (mode == graphics::MessageRenderer::ThreadMode::DIRECT) {
|
||||||
|
cannedMessageModule->LaunchFreetextWithDestination(peer);
|
||||||
|
|
||||||
|
} else {
|
||||||
|
// Fallback for last received message
|
||||||
|
if (devicestate.rx_text_message.to == NODENUM_BROADCAST) {
|
||||||
|
cannedMessageModule->LaunchFreetextWithDestination(
|
||||||
|
NODENUM_BROADCAST,
|
||||||
|
devicestate.rx_text_message.channel
|
||||||
|
);
|
||||||
|
} else {
|
||||||
|
cannedMessageModule->LaunchFreetextWithDestination(
|
||||||
|
devicestate.rx_text_message.from
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
screen->showOverlayBanner(bannerOptions);
|
||||||
|
}
|
||||||
void menuHandler::deleteMessagesMenu()
|
void menuHandler::deleteMessagesMenu()
|
||||||
{
|
{
|
||||||
enum optionsNumbers { Back = 0, DeleteOldest, DeleteThis, DeleteAll, enumEnd };
|
enum optionsNumbers { Back = 0, DeleteOldest, DeleteThis, DeleteAll, enumEnd };
|
||||||
@@ -2070,6 +2151,9 @@ void menuHandler::handleMenuSwitch(OLEDDisplay *display)
|
|||||||
case message_response_menu:
|
case message_response_menu:
|
||||||
messageResponseMenu();
|
messageResponseMenu();
|
||||||
break;
|
break;
|
||||||
|
case reply_menu:
|
||||||
|
replyMenu();
|
||||||
|
break;
|
||||||
case delete_messages_menu:
|
case delete_messages_menu:
|
||||||
deleteMessagesMenu();
|
deleteMessagesMenu();
|
||||||
break;
|
break;
|
||||||
|
|||||||
@@ -45,6 +45,7 @@ class menuHandler
|
|||||||
throttle_message,
|
throttle_message,
|
||||||
message_response_menu,
|
message_response_menu,
|
||||||
message_viewmode_menu,
|
message_viewmode_menu,
|
||||||
|
reply_menu,
|
||||||
delete_messages_menu,
|
delete_messages_menu,
|
||||||
node_name_length_menu,
|
node_name_length_menu,
|
||||||
FrameToggles,
|
FrameToggles,
|
||||||
@@ -65,6 +66,7 @@ class menuHandler
|
|||||||
static void ClockFacePicker();
|
static void ClockFacePicker();
|
||||||
static void messageResponseMenu();
|
static void messageResponseMenu();
|
||||||
static void messageViewModeMenu();
|
static void messageViewModeMenu();
|
||||||
|
static void replyMenu();
|
||||||
static void deleteMessagesMenu();
|
static void deleteMessagesMenu();
|
||||||
static void homeBaseMenu();
|
static void homeBaseMenu();
|
||||||
static void textMessageBaseMenu();
|
static void textMessageBaseMenu();
|
||||||
|
|||||||
Reference in New Issue
Block a user