From 311d7b2feed3fa9c9f7b5849e509a0c5f69f024f Mon Sep 17 00:00:00 2001 From: royjr Date: Sun, 6 Sep 2026 21:40:20 -0400 Subject: [PATCH] reboot --- .../ui/mici/layouts/settings/device.py | 31 +++++++++++++++--- .../ui/sunnypilot/mici/layouts/settings.py | 32 +++---------------- 2 files changed, 30 insertions(+), 33 deletions(-) diff --git a/openpilot/selfdrive/ui/mici/layouts/settings/device.py b/openpilot/selfdrive/ui/mici/layouts/settings/device.py index 6038ff7d35..4c8971c45c 100644 --- a/openpilot/selfdrive/ui/mici/layouts/settings/device.py +++ b/openpilot/selfdrive/ui/mici/layouts/settings/device.py @@ -62,7 +62,25 @@ class MiciFccModal(NavRawScrollPanel): rl.draw_texture_ex(self._fcc_logo, fcc_pos, 0.0, 1.0, rl.WHITE) -def _engaged_confirmation_click(callback: Callable, action_text: str, icon: rl.Texture, exit_on_confirm: bool = True, red: bool = False): +class DisengageDialog(BigDialog): + def __init__(self, title: str, description: str, disengaged_callback: Callable[[], None]): + super().__init__(title, description) + self._disengaged_callback = disengaged_callback + + def _update_state(self): + super()._update_state() + if not ui_state.engaged and not self.is_dismissing: + self.dismiss(self._disengaged_callback) + + +class EngagedConfirmationDialog(BigConfirmationDialog): + def _update_state(self): + super()._update_state() + if ui_state.engaged and not self.is_dismissing: + self.dismiss() + + +def engaged_confirmation_click(callback: Callable, action_text: str, icon: rl.Texture, exit_on_confirm: bool = True, red: bool = False): if not ui_state.engaged: def confirm_callback(): # Check engaged again in case it changed while the dialog was open @@ -70,23 +88,26 @@ def _engaged_confirmation_click(callback: Callable, action_text: str, icon: rl.T if not ui_state.engaged: callback() - gui_app.push_widget(BigConfirmationDialog(f"slide to\n{action_text.lower()}", icon, confirm_callback, exit_on_confirm=exit_on_confirm, red=red)) + gui_app.push_widget(EngagedConfirmationDialog(f"slide to\n{action_text.lower()}", icon, confirm_callback, + exit_on_confirm=exit_on_confirm, red=red)) else: - gui_app.push_widget(BigDialog("", f"Disengage to {action_text}")) + gui_app.push_widget(DisengageDialog("", f"Disengage to {action_text}", + lambda: engaged_confirmation_click(callback, action_text, icon, + exit_on_confirm=exit_on_confirm, red=red))) class EngagedConfirmationCircleButton(BigCircleButton): def __init__(self, title: str, icon: rl.Texture, callback: Callable[[], None], exit_on_confirm: bool = True, red: bool = False, icon_offset: tuple[int, int] = (0, 0)): super().__init__(icon, red, icon_offset) - self.set_click_callback(lambda: _engaged_confirmation_click(callback, title, icon, exit_on_confirm=exit_on_confirm, red=red)) + self.set_click_callback(lambda: engaged_confirmation_click(callback, title, icon, exit_on_confirm=exit_on_confirm, red=red)) class EngagedConfirmationButton(BigButton): def __init__(self, text: str, action_text: str, icon: rl.Texture, callback: Callable[[], None], exit_on_confirm: bool = True, red: bool = False): super().__init__(text, "", icon) - self.set_click_callback(lambda: _engaged_confirmation_click(callback, action_text, icon, exit_on_confirm=exit_on_confirm, red=red)) + self.set_click_callback(lambda: engaged_confirmation_click(callback, action_text, icon, exit_on_confirm=exit_on_confirm, red=red)) class DeviceInfoLayoutMici(Widget): diff --git a/openpilot/selfdrive/ui/sunnypilot/mici/layouts/settings.py b/openpilot/selfdrive/ui/sunnypilot/mici/layouts/settings.py index e3936e795f..93360dc7f0 100644 --- a/openpilot/selfdrive/ui/sunnypilot/mici/layouts/settings.py +++ b/openpilot/selfdrive/ui/sunnypilot/mici/layouts/settings.py @@ -4,13 +4,11 @@ Copyright (c) 2021-, Haibin Wen, sunnypilot, and a number of other contributors. This file is part of sunnypilot and is licensed under the MIT License. See the LICENSE.md file in the root directory for more details. """ -from collections.abc import Callable - from openpilot.selfdrive.ui.mici.layouts.settings import settings as OP from openpilot.selfdrive.ui.mici.layouts.settings.settings import SettingsBigButton -from openpilot.selfdrive.ui.mici.layouts.settings.device import DeviceLayoutMici +from openpilot.selfdrive.ui.mici.layouts.settings.device import DeviceLayoutMici, engaged_confirmation_click from openpilot.selfdrive.ui.mici.widgets.button import BigCircleButton -from openpilot.selfdrive.ui.mici.widgets.dialog import BigConfirmationDialog, BigDialog +from openpilot.selfdrive.ui.mici.widgets.dialog import BigConfirmationDialog from openpilot.selfdrive.ui.sunnypilot.mici.layouts.sunnylink import SunnylinkLayoutMici from openpilot.selfdrive.ui.sunnypilot.mici.layouts.models import ModelsLayoutMici from openpilot.selfdrive.ui.ui_state import ui_state @@ -31,24 +29,6 @@ class SunnylinkBigButton(SettingsBigButton): return 56 -class AlwaysOffroadDisengageDialog(BigDialog): - def __init__(self, callback: Callable[[], None]): - super().__init__(tr("disengage to enable always offroad"), "") - self._disengaged_callback = callback - - def _update_state(self): - super()._update_state() - if not ui_state.engaged and not self.is_dismissing: - self.dismiss(self._disengaged_callback) - - -class AlwaysOffroadConfirmationDialog(BigConfirmationDialog): - def _update_state(self): - super()._update_state() - if ui_state.engaged and not self.is_dismissing: - self.dismiss() - - class SettingsLayoutSP(OP.SettingsLayout): def __init__(self): OP.SettingsLayout.__init__(self) @@ -113,10 +93,6 @@ class SettingsLayoutSP(OP.SettingsLayout): dlg = BigConfirmationDialog(tr("slide to exit always offroad"), self.icon_offroad_slider, red=False, confirm_callback=lambda: _set_offroad_status(False)) else: - if ui_state.engaged: - gui_app.push_widget(AlwaysOffroadDisengageDialog(lambda: self._handle_always_offroad(True))) - return - - dlg = AlwaysOffroadConfirmationDialog(tr("slide to force offroad"), self.icon_offroad_slider, red=True, - confirm_callback=lambda: _set_offroad_status(True)) + engaged_confirmation_click(lambda: _set_offroad_status(True), "force offroad", self.icon_offroad_slider, red=True) + return gui_app.push_widget(dlg)