diff --git a/selfdrive/ui/layouts/settings/starpilot/system_settings.py b/selfdrive/ui/layouts/settings/starpilot/system_settings.py index 52c4498a6..d29585970 100644 --- a/selfdrive/ui/layouts/settings/starpilot/system_settings.py +++ b/selfdrive/ui/layouts/settings/starpilot/system_settings.py @@ -21,7 +21,7 @@ from openpilot.system.ui.widgets.keyboard import Keyboard from openpilot.system.ui.widgets.option_dialog import MultiOptionDialog from openpilot.system.ui.widgets.label import gui_label -from openpilot.selfdrive.ui.ui_state import ui_state +from openpilot.selfdrive.ui.ui_state import device, ui_state from openpilot.selfdrive.ui.layouts.settings.starpilot.panel import _SettingsPage from openpilot.selfdrive.ui.layouts.settings.starpilot.aethergrid import ( AETHER_LIST_METRICS, @@ -154,8 +154,8 @@ class SystemSettingsManagerView(AetherInteractiveMixin, Widget): "step": 5, "live": False, "presets": [5, 15, 30, 60], - "get": lambda: float(self._controller._params.get_int("ScreenTimeout")), - "set": lambda v: self._controller._params.put_int("ScreenTimeout", int(v)), + "get": lambda: float(self._controller._params.get_int("ScreenTimeout", return_default=True)), + "set": lambda v: self._set_timeout("ScreenTimeout", v), }, "ScreenTimeoutOnroad": { "title": tr("Onroad Screen Timeout"), @@ -167,8 +167,8 @@ class SystemSettingsManagerView(AetherInteractiveMixin, Widget): "step": 5, "live": False, "presets": [5, 15, 30, 60], - "get": lambda: float(self._controller._params.get_int("ScreenTimeoutOnroad")), - "set": lambda v: self._controller._params.put_int("ScreenTimeoutOnroad", int(v)), + "get": lambda: float(self._controller._params.get_int("ScreenTimeoutOnroad", return_default=True)), + "set": lambda v: self._set_timeout("ScreenTimeoutOnroad", v), }, "DeviceShutdown": { "title": tr("Shutdown Delay"), @@ -409,6 +409,10 @@ class SystemSettingsManagerView(AetherInteractiveMixin, Widget): self._active_adjustor_key = None self._ensure_visible_key = None + def _set_timeout(self, key: str, value: float): + self._controller._params.put_int(key, int(value)) + device.reset_interactive_timeout() + def _get_drive_mode_index(self): state = self._controller._get_force_drive_state() if state == tr("Default"): return 0 diff --git a/selfdrive/ui/ui_state.py b/selfdrive/ui/ui_state.py index 6acde4e72..f7bdc60ea 100644 --- a/selfdrive/ui/ui_state.py +++ b/selfdrive/ui/ui_state.py @@ -251,6 +251,7 @@ class Device: self._interactive_timeout_callbacks: list[Callable] = [] self._prev_timed_out = False self._awake: bool = True + self._params = Params() self._offroad_brightness: int = BACKLIGHT_OFFROAD self._last_brightness: int = 0 @@ -271,12 +272,22 @@ class Device: if self._override_interactive_timeout is not None: return self._override_interactive_timeout - ignition_timeout = 10 if gui_app.big_ui() else 5 - return ignition_timeout if ui_state.ignition else 30 + timeout_onroad = self._params.get_int("ScreenTimeoutOnroad") + timeout_offroad = self._params.get_int("ScreenTimeout") + + if timeout_onroad <= 0: + timeout_onroad = 10 if gui_app.big_ui() else 5 + if timeout_offroad <= 0: + timeout_offroad = 30 + + return int(timeout_onroad if ui_state.ignition else timeout_offroad) def _reset_interactive_timeout(self) -> None: self._interaction_time = time.monotonic() + self.interactive_timeout + def reset_interactive_timeout(self) -> None: + self._reset_interactive_timeout() + def add_interactive_timeout_callback(self, callback: Callable): self._interactive_timeout_callbacks.append(callback)