mirror of
https://github.com/meshtastic/firmware.git
synced 2025-08-13 00:35:16 +00:00
Move bluetooth to system menu and add confirmation for canned messages
This commit is contained in:
parent
4c901033b2
commit
22470bca9a
@ -14,7 +14,9 @@
|
|||||||
#include "modules/AdminModule.h"
|
#include "modules/AdminModule.h"
|
||||||
#include "modules/CannedMessageModule.h"
|
#include "modules/CannedMessageModule.h"
|
||||||
#include "modules/KeyVerificationModule.h"
|
#include "modules/KeyVerificationModule.h"
|
||||||
|
|
||||||
#include "modules/TraceRouteModule.h"
|
#include "modules/TraceRouteModule.h"
|
||||||
|
#include <functional>
|
||||||
|
|
||||||
extern uint16_t TFT_MESH;
|
extern uint16_t TFT_MESH;
|
||||||
|
|
||||||
@ -25,6 +27,7 @@ bool test_enabled = false;
|
|||||||
uint8_t test_count = 0;
|
uint8_t test_count = 0;
|
||||||
|
|
||||||
void menuHandler::LoraRegionPicker(uint32_t duration)
|
void menuHandler::LoraRegionPicker(uint32_t duration)
|
||||||
|
// ...existing code...
|
||||||
{
|
{
|
||||||
static const char *optionsArray[] = {"Back",
|
static const char *optionsArray[] = {"Back",
|
||||||
"US",
|
"US",
|
||||||
@ -118,6 +121,22 @@ void menuHandler::TwelveHourPicker()
|
|||||||
screen->showOverlayBanner(bannerOptions);
|
screen->showOverlayBanner(bannerOptions);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Reusable confirmation prompt function
|
||||||
|
void menuHandler::showConfirmationBanner(const char *message, std::function<void()> onConfirm)
|
||||||
|
{
|
||||||
|
static const char *confirmOptions[] = {"No", "Yes"};
|
||||||
|
BannerOverlayOptions confirmBanner;
|
||||||
|
confirmBanner.message = message;
|
||||||
|
confirmBanner.optionsArrayPtr = confirmOptions;
|
||||||
|
confirmBanner.optionsCount = 2;
|
||||||
|
confirmBanner.bannerCallback = [onConfirm](int confirmSelected) -> void {
|
||||||
|
if (confirmSelected == 1) {
|
||||||
|
onConfirm();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
screen->showOverlayBanner(confirmBanner);
|
||||||
|
}
|
||||||
|
|
||||||
void menuHandler::ClockFacePicker()
|
void menuHandler::ClockFacePicker()
|
||||||
{
|
{
|
||||||
static const char *optionsArray[] = {"Back", "Digital", "Analog"};
|
static const char *optionsArray[] = {"Back", "Digital", "Analog"};
|
||||||
@ -294,7 +313,7 @@ void menuHandler::messageResponseMenu()
|
|||||||
|
|
||||||
void menuHandler::homeBaseMenu()
|
void menuHandler::homeBaseMenu()
|
||||||
{
|
{
|
||||||
enum optionsNumbers { Back, Backlight, Position, Preset, Freetext, Bluetooth, Sleep, enumEnd };
|
enum optionsNumbers { Back, Backlight, Position, Preset, Freetext, Sleep, enumEnd };
|
||||||
|
|
||||||
static const char *optionsArray[enumEnd] = {"Back"};
|
static const char *optionsArray[enumEnd] = {"Back"};
|
||||||
static int optionsEnumArray[enumEnd] = {Back};
|
static int optionsEnumArray[enumEnd] = {Back};
|
||||||
@ -316,8 +335,6 @@ void menuHandler::homeBaseMenu()
|
|||||||
optionsArray[options] = "New Freetext Msg";
|
optionsArray[options] = "New Freetext Msg";
|
||||||
optionsEnumArray[options++] = Freetext;
|
optionsEnumArray[options++] = Freetext;
|
||||||
}
|
}
|
||||||
optionsArray[options] = "Bluetooth Toggle";
|
|
||||||
optionsEnumArray[options++] = Bluetooth;
|
|
||||||
|
|
||||||
BannerOverlayOptions bannerOptions;
|
BannerOverlayOptions bannerOptions;
|
||||||
bannerOptions.message = "Home Action";
|
bannerOptions.message = "Home Action";
|
||||||
@ -339,12 +356,13 @@ void menuHandler::homeBaseMenu()
|
|||||||
InputEvent event = {.inputEvent = (input_broker_event)INPUT_BROKER_SEND_PING, .kbchar = 0, .touchX = 0, .touchY = 0};
|
InputEvent event = {.inputEvent = (input_broker_event)INPUT_BROKER_SEND_PING, .kbchar = 0, .touchX = 0, .touchY = 0};
|
||||||
inputBroker->injectInputEvent(&event);
|
inputBroker->injectInputEvent(&event);
|
||||||
} else if (selected == Preset) {
|
} else if (selected == Preset) {
|
||||||
|
#if CANNED_MESSAGE_ADD_CONFIRMATION
|
||||||
|
showConfirmationBanner("Send message?", [] { cannedMessageModule->LaunchWithDestination(NODENUM_BROADCAST); });
|
||||||
|
#else
|
||||||
cannedMessageModule->LaunchWithDestination(NODENUM_BROADCAST);
|
cannedMessageModule->LaunchWithDestination(NODENUM_BROADCAST);
|
||||||
|
#endif
|
||||||
} else if (selected == Freetext) {
|
} else if (selected == Freetext) {
|
||||||
cannedMessageModule->LaunchFreetextWithDestination(NODENUM_BROADCAST);
|
cannedMessageModule->LaunchFreetextWithDestination(NODENUM_BROADCAST);
|
||||||
} else if (selected == Bluetooth) {
|
|
||||||
menuQueue = bluetooth_toggle_menu;
|
|
||||||
screen->runNow();
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
screen->showOverlayBanner(bannerOptions);
|
screen->showOverlayBanner(bannerOptions);
|
||||||
@ -371,7 +389,11 @@ void menuHandler::textMessageBaseMenu()
|
|||||||
bannerOptions.optionsCount = options;
|
bannerOptions.optionsCount = options;
|
||||||
bannerOptions.bannerCallback = [](int selected) -> void {
|
bannerOptions.bannerCallback = [](int selected) -> void {
|
||||||
if (selected == Preset) {
|
if (selected == Preset) {
|
||||||
|
#if CANNED_MESSAGE_ADD_CONFIRMATION
|
||||||
|
showConfirmationBanner("Send message?", [] { cannedMessageModule->LaunchWithDestination(NODENUM_BROADCAST); });
|
||||||
|
#else
|
||||||
cannedMessageModule->LaunchWithDestination(NODENUM_BROADCAST);
|
cannedMessageModule->LaunchWithDestination(NODENUM_BROADCAST);
|
||||||
|
#endif
|
||||||
} else if (selected == Freetext) {
|
} else if (selected == Freetext) {
|
||||||
cannedMessageModule->LaunchFreetextWithDestination(NODENUM_BROADCAST);
|
cannedMessageModule->LaunchFreetextWithDestination(NODENUM_BROADCAST);
|
||||||
}
|
}
|
||||||
@ -381,7 +403,7 @@ void menuHandler::textMessageBaseMenu()
|
|||||||
|
|
||||||
void menuHandler::systemBaseMenu()
|
void menuHandler::systemBaseMenu()
|
||||||
{
|
{
|
||||||
enum optionsNumbers { Back, Notifications, ScreenOptions, PowerMenu, Test, enumEnd };
|
enum optionsNumbers { Back, Notifications, ScreenOptions, Bluetooth, PowerMenu, Test, enumEnd };
|
||||||
static const char *optionsArray[enumEnd] = {"Back"};
|
static const char *optionsArray[enumEnd] = {"Back"};
|
||||||
static int optionsEnumArray[enumEnd] = {Back};
|
static int optionsEnumArray[enumEnd] = {Back};
|
||||||
int options = 1;
|
int options = 1;
|
||||||
@ -394,6 +416,9 @@ void menuHandler::systemBaseMenu()
|
|||||||
optionsEnumArray[options++] = ScreenOptions;
|
optionsEnumArray[options++] = ScreenOptions;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
optionsArray[options] = "Bluetooth Toggle";
|
||||||
|
optionsEnumArray[options++] = Bluetooth;
|
||||||
|
|
||||||
optionsArray[options] = "Reboot/Shutdown";
|
optionsArray[options] = "Reboot/Shutdown";
|
||||||
optionsEnumArray[options++] = PowerMenu;
|
optionsEnumArray[options++] = PowerMenu;
|
||||||
|
|
||||||
@ -420,6 +445,9 @@ void menuHandler::systemBaseMenu()
|
|||||||
} else if (selected == Test) {
|
} else if (selected == Test) {
|
||||||
menuHandler::menuQueue = menuHandler::test_menu;
|
menuHandler::menuQueue = menuHandler::test_menu;
|
||||||
screen->runNow();
|
screen->runNow();
|
||||||
|
} else if (selected == Bluetooth) {
|
||||||
|
menuQueue = bluetooth_toggle_menu;
|
||||||
|
screen->runNow();
|
||||||
} else if (selected == Back && !test_enabled) {
|
} else if (selected == Back && !test_enabled) {
|
||||||
test_count++;
|
test_count++;
|
||||||
if (test_count > 4) {
|
if (test_count > 4) {
|
||||||
|
@ -43,6 +43,7 @@ class menuHandler
|
|||||||
|
|
||||||
static void LoraRegionPicker(uint32_t duration = 30000);
|
static void LoraRegionPicker(uint32_t duration = 30000);
|
||||||
static void handleMenuSwitch(OLEDDisplay *display);
|
static void handleMenuSwitch(OLEDDisplay *display);
|
||||||
|
static void showConfirmationBanner(const char *message, std::function<void()> onConfirm);
|
||||||
static void clockMenu();
|
static void clockMenu();
|
||||||
static void TZPicker();
|
static void TZPicker();
|
||||||
static void TwelveHourPicker();
|
static void TwelveHourPicker();
|
||||||
|
@ -595,8 +595,12 @@ bool CannedMessageModule::handleMessageSelectorInput(const InputEvent *event, bo
|
|||||||
// Normal canned message selection
|
// Normal canned message selection
|
||||||
if (runState == CANNED_MESSAGE_RUN_STATE_INACTIVE || runState == CANNED_MESSAGE_RUN_STATE_DISABLED) {
|
if (runState == CANNED_MESSAGE_RUN_STATE_INACTIVE || runState == CANNED_MESSAGE_RUN_STATE_DISABLED) {
|
||||||
} else {
|
} else {
|
||||||
payload = runState;
|
// Show confirmation dialog before sending canned message
|
||||||
runState = CANNED_MESSAGE_RUN_STATE_ACTION_SELECT;
|
NodeNum destNode = dest;
|
||||||
|
ChannelIndex chan = channel;
|
||||||
|
graphics::menuHandler::showConfirmationBanner(
|
||||||
|
"Send preset message?", [this, destNode, chan, current]() { this->sendText(destNode, chan, current, false); });
|
||||||
|
// Do not immediately set runState; wait for confirmation
|
||||||
handled = true;
|
handled = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -162,6 +162,8 @@ static const uint8_t SCL = PIN_WIRE_SCL;
|
|||||||
|
|
||||||
#define CANNED_MESSAGE_MODULE_ENABLE 1
|
#define CANNED_MESSAGE_MODULE_ENABLE 1
|
||||||
|
|
||||||
|
#define CANNED_MESSAGE_ADD_CONFIRMATION 1
|
||||||
|
|
||||||
// trackball
|
// trackball
|
||||||
#define HAS_TRACKBALL 1
|
#define HAS_TRACKBALL 1
|
||||||
#define TB_UP 25
|
#define TB_UP 25
|
||||||
|
Loading…
Reference in New Issue
Block a user