Add compact ui DisengageOnAccelerator

This commit is contained in:
firestarsdog
2026-10-30 02:17:36 -04:00
parent 890c30c3cb
commit 0114eb04bb
3 changed files with 29 additions and 1 deletions
@@ -40,6 +40,8 @@ class TogglesLayoutMici(NavScroller):
"Set speed is a maximum, not a target.\n" +
"These are alpha features. Expect mistakes.\n" +
"The path colors show acceleration and braking.")
disengage_on_accelerator = BigParamControl("disengage on accelerator", "DisengageOnAccelerator",
description="When enabled, pressing the accelerator pedal will disengage openpilot.")
self._initial_cruise_speed = InitialCruiseSpeedButton()
self._initial_cruise_speed.set_visible(lambda: ui_state.CP is not None and ui_state.has_longitudinal_control and not ui_state.CP.pcmCruise)
is_metric_toggle = BigToggle("use metric units", initial_state=ui_state.params.get_bool("IsMetric"),
@@ -64,6 +66,7 @@ class TogglesLayoutMici(NavScroller):
self._personality_toggle,
self._safe_mode_btn,
self._experimental_btn,
disengage_on_accelerator,
self._initial_cruise_speed,
is_metric_toggle,
ldw_toggle,
@@ -78,6 +81,7 @@ class TogglesLayoutMici(NavScroller):
self._refresh_toggles = (
("SafeMode", self._safe_mode_btn),
("ExperimentalMode", self._experimental_btn),
("DisengageOnAccelerator", disengage_on_accelerator),
("IsMetric", is_metric_toggle),
("IsLdwEnabled", ldw_toggle),
("AlwaysOnDM", always_on_dm_toggle),
@@ -42,6 +42,7 @@ def drawn(monkeypatch):
lambda: button.BigButton("long branch name that needs to scroll", "installed", scroll=True),
lambda: button.BigButton("network", "connected", SimpleNamespace(width=76, height=56)),
lambda: button.BigToggle("enable controls", "Off"),
lambda: button.BigToggle("disengage on accelerator"),
lambda: button.BigMultiToggle("controller", ["Default", "Custom"]),
lambda: button.GreyBigButton("saved settings", "unavailable while driving"),
lambda: button.GreyBigButton("", "A full explanation that must retain enough room for several lines of readable text."),
@@ -45,7 +45,7 @@ class TestC4SafeMode(unittest.TestCase):
panel._personality_toggle.set_value.assert_called_once_with("relaxed")
class TestC4AudioToggle(unittest.TestCase):
class TestC4Toggles(unittest.TestCase):
def setUp(self):
directory = tempfile.TemporaryDirectory()
self.addCleanup(directory.cleanup)
@@ -62,6 +62,29 @@ class TestC4AudioToggle(unittest.TestCase):
self.panel = toggles.TogglesLayoutMici()
self.audio = next(item for key, item in self.panel._refresh_toggles if key == "RecordAudio")
def test_accelerator_toggle_saves_shared_param_without_restart(self):
accelerator = dict(self.panel._refresh_toggles)["DisengageOnAccelerator"]
self.assertIn(accelerator, self.panel._scroller.items)
self.assertFalse(accelerator._checked)
for desired in (True, False):
with patch.object(self.params, "put_bool", wraps=self.params.put_bool) as save:
accelerator._handle_mouse_release(MousePos(0, 0))
save.assert_called_once_with("DisengageOnAccelerator", desired, block=True)
self.assertEqual(self.params.get_bool("DisengageOnAccelerator"), desired)
self.assertEqual(accelerator._checked, desired)
self.assertFalse(self.params.get_bool("OnroadCycleRequested"))
def test_accelerator_toggle_loads_and_refreshes_saved_value(self):
self.params.put_bool("DisengageOnAccelerator", True, block=True)
panel = toggles.TogglesLayoutMici()
accelerator = dict(panel._refresh_toggles)["DisengageOnAccelerator"]
self.assertTrue(accelerator._checked)
self.params.put_bool("DisengageOnAccelerator", False, block=True)
panel._update_toggles()
self.assertFalse(accelerator._checked)
self.ui.engaged = True
self.assertTrue(accelerator.enabled)
def test_rhd_control_saves_shared_param_and_rejects_open_preview(self):
from openpilot.starpilot.galaxy.localization_settings import LocalizationSettingsOwner
self.panel._localization = LocalizationSettingsOwner(self.params, lambda: True, lambda: True)