fix(l2): the GPS switch no longer jumps

UiCore::setGpsEnabled() wrote the prefs to flash at once, which stalled
the loop mid-animation. It takes save = false now (default true, the L1
unchanged); the L2 marks the prefs changed and writes them on leaving
the screen, as its other switches.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
Jakub
2026-09-30 23:23:04 +02:00
co-authored by Claude Opus 5.5
parent b53b0e1349
commit 2f3b95adb4
2 changed files with 6 additions and 3 deletions
+4 -2
View File
@@ -133,11 +133,13 @@ public:
return i >= 0 && strcmp(_sensors->getSettingValue(i), "1") == 0;
}
// False when the board has no GPS.
bool setGpsEnabled(bool on) {
// save = false: the caller has the prefs written later (the L2 on leaving
// the screen -- a flash write mid-tap stalls the switch's animation).
bool setGpsEnabled(bool on, bool save = true) {
if (gpsSettingIndex() < 0) return false;
_sensors->setSettingValue("gps", on ? "1" : "0");
if (_prefs) _prefs->gps_enabled = on ? 1 : 0;
the_mesh.savePrefs();
if (save) the_mesh.savePrefs();
return true;
}
+2 -1
View File
@@ -1965,7 +1965,8 @@ void UITask::refreshStatusBar() {
}
void UITask::setGps(bool on) {
if (!_core->setGpsEnabled(on)) { showToast("No GPS on this device"); return; }
if (!_core->setGpsEnabled(on, false)) { showToast("No GPS on this device"); return; }
prefsSave(); // written on leaving the screen, as the other switches
refreshStatusBar();
}