ui: add confirmation circle button (#37586)

* try this

* clean up and use it

* clean up

* simpler

* do this later

* do onboarding & reset

* do setup

* temp

* Revert "temp"

This reverts commit 22fbbf5c813b4915e784b9ee235ed3bde2229048.

* simpler again

* missing size

* fix

* Revert "fix"

This reverts commit 53c4e29e614181029dc8e9a2baea7694957dc8fb.

* nl
This commit is contained in:
Shane Smiskol
2026-03-06 22:38:00 -08:00
committed by GitHub
parent 793f8fee32
commit 0557283e3d
4 changed files with 37 additions and 61 deletions
+8 -20
View File
@@ -11,8 +11,7 @@ from openpilot.system.ui.lib.application import gui_app
from openpilot.system.ui.widgets.scroller import Scroller
from openpilot.system.ui.widgets.nav_widget import NavWidget
from openpilot.system.ui.mici_setup import GreyBigButton, FailedPage
from openpilot.selfdrive.ui.mici.widgets.dialog import BigConfirmationDialog
from openpilot.selfdrive.ui.mici.widgets.button import BigCircleButton
from openpilot.selfdrive.ui.mici.widgets.dialog import BigConfirmationCircleButton
USERDATA = "/dev/disk/by-partlabel/userdata"
TIMEOUT = 3*60
@@ -70,37 +69,26 @@ class Reset(Scroller):
self._resetting_page = ResettingPage()
self._reset_failed_page = ResetFailedPage()
def show_confirm_dialog():
dialog = BigConfirmationDialog("erase\ndevice", "icons_mici/settings/device/uninstall.png", self.start_reset, red=True)
gui_app.push_widget(dialog)
self._reset_button = BigConfirmationCircleButton("erase\ndevice", "icons_mici/settings/device/uninstall.png", self.start_reset, red=True)
self._cancel_button = BigConfirmationCircleButton("normal\nstartup", "icons_mici/settings/device/reboot.png", gui_app.request_close, exit_on_confirm=False)
self._reboot_button = BigConfirmationCircleButton("reboot\ndevice", "icons_mici/settings/device/reboot.png", HARDWARE.reboot, exit_on_confirm=False)
def show_cancel_dialog():
dialog = BigConfirmationDialog("normal\nstartup", "icons_mici/settings/device/reboot.png", gui_app.request_close, exit_on_confirm=False)
gui_app.push_widget(dialog)
def show_reboot_dialog():
dialog = BigConfirmationDialog("reboot\ndevice", "icons_mici/settings/device/reboot.png", HARDWARE.reboot, exit_on_confirm=False)
gui_app.push_widget(dialog)
self._reset_button = BigCircleButton("icons_mici/settings/device/uninstall.png", red=True)
self._reset_button.set_click_callback(show_confirm_dialog)
self._cancel_button = BigCircleButton("icons_mici/settings/device/reboot.png")
self._cancel_button.set_click_callback(show_cancel_dialog)
# show reboot button if in recover mode
self._cancel_button.set_visible(mode != ResetMode.RECOVER)
self._reboot_button.set_visible(mode == ResetMode.RECOVER)
main_card = GreyBigButton("factory reset", "all content and\nsettings will be erased",
gui_app.texture("icons_mici/setup/factory_reset.png", 64, 64))
# cancel button becomes reboot button
if mode == ResetMode.RECOVER:
main_card.set_text("unable to mount\ndata partition")
main_card.set_value("it may be corrupted")
self._cancel_button.set_click_callback(show_reboot_dialog)
self._scroller.add_widgets([
main_card,
self._reset_button,
self._cancel_button,
self._reboot_button,
])
def _do_erase(self):
+4 -10
View File
@@ -28,8 +28,8 @@ from openpilot.system.ui.widgets.scroller import Scroller, NavScroller, ITEM_SPA
from openpilot.system.ui.widgets.slider import LargerSlider
from openpilot.selfdrive.ui.mici.layouts.settings.network import WifiNetworkButton
from openpilot.selfdrive.ui.mici.layouts.settings.network.wifi_ui import WifiUIMici
from openpilot.selfdrive.ui.mici.widgets.dialog import BigInputDialog, BigConfirmationDialog
from openpilot.selfdrive.ui.mici.widgets.button import BigCircleButton, BigButton
from openpilot.selfdrive.ui.mici.widgets.dialog import BigInputDialog, BigConfirmationCircleButton
from openpilot.selfdrive.ui.mici.widgets.button import BigButton
NetworkType = log.DeviceState.NetworkType
@@ -247,13 +247,6 @@ class FailedPage(NavScroller):
super().__init__()
self.set_back_callback(retry_callback)
def show_reboot_dialog():
dialog = BigConfirmationDialog("slide to reboot", "icons_mici/settings/device/reboot.png", HARDWARE.reboot, exit_on_confirm=False)
gui_app.push_widget(dialog)
reboot_button = BigCircleButton("icons_mici/settings/device/reboot.png", red=False, icon_size=(64, 70))
reboot_button.set_click_callback(show_reboot_dialog)
self._reason_card = GreyBigButton("", "")
self._reason_card.set_visible(False)
@@ -261,7 +254,8 @@ class FailedPage(NavScroller):
GreyBigButton(title, description or "swipe down to go\nback and try again",
gui_app.texture(icon, 64, 58)),
self._reason_card,
reboot_button,
BigConfirmationCircleButton("slide to reboot", "icons_mici/settings/device/reboot.png",
HARDWARE.reboot, exit_on_confirm=False, icon_size=(64, 70)),
])
def set_reason(self, reason: str):