Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 1 addition & 2 deletions selfdrive/ui/mici/layouts/main.py
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,7 @@ def __init__(self):
# Set callbacks
self._setup_callbacks()

gui_app.add_nav_stack_tick(self._handle_transitions)
gui_app.push_widget(self)

# Start onboarding if terms or training not completed, make sure to push after self
Expand Down Expand Up @@ -76,8 +77,6 @@ def _render(self, _):
# Render
super()._render(self._rect)

self._handle_transitions()

def _handle_transitions(self):
# Don't pop if onboarding
if gui_app.get_active_widget() == self._onboarding_window:
Expand Down
4 changes: 2 additions & 2 deletions selfdrive/ui/mici/layouts/settings/network/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -166,13 +166,13 @@ def show_event(self):
self._wifi_manager.set_active(True)

# Process wifi callbacks while at any point in the nav stack
gui_app.set_nav_stack_tick(self._wifi_manager.process_callbacks)
gui_app.add_nav_stack_tick(self._wifi_manager.process_callbacks)

def hide_event(self):
super().hide_event()
self._wifi_manager.set_active(False)

gui_app.set_nav_stack_tick(None)
gui_app.remove_nav_stack_tick(self._wifi_manager.process_callbacks)

def _toggle_roaming(self, checked: bool):
self._wifi_manager.update_gsm_settings(checked, ui_state.params.get("GsmApn") or "", ui_state.params.get_bool("GsmMetered"))
Expand Down
15 changes: 10 additions & 5 deletions system/ui/lib/application.py
Original file line number Diff line number Diff line change
Expand Up @@ -220,7 +220,7 @@ def __init__(self, width: int | None = None, height: int | None = None):
self._frame = 0
self._window_close_requested = False
self._nav_stack: list[object] = []
self._nav_stack_tick: Callable[[], None] | None = None
self._nav_stack_ticks: list[Callable[[], None]] = []
self._nav_stack_widgets_to_render = 1 if self.big_ui() else 2

self._mouse = MouseState(self._scale)
Expand Down Expand Up @@ -411,8 +411,13 @@ def get_active_widget(self):
return self._nav_stack[-1]
return None

def set_nav_stack_tick(self, tick_function: Callable | None):
self._nav_stack_tick = tick_function
def add_nav_stack_tick(self, tick_function: Callable[[], None]):
if tick_function not in self._nav_stack_ticks:
self._nav_stack_ticks.append(tick_function)

def remove_nav_stack_tick(self, tick_function: Callable[[], None]):
if tick_function in self._nav_stack_ticks:
self._nav_stack_ticks.remove(tick_function)

def set_should_render(self, should_render: bool):
self._should_render = should_render
Expand Down Expand Up @@ -561,8 +566,8 @@ def render(self):
rl.clear_background(rl.BLACK)

# Allow a Widget to still run a function regardless of the stack depth
if self._nav_stack_tick is not None:
self._nav_stack_tick()
for tick in self._nav_stack_ticks:
tick()

# Only render top widgets
for widget in self._nav_stack[-self._nav_stack_widgets_to_render:]:
Expand Down
2 changes: 1 addition & 1 deletion system/ui/mici_setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -508,7 +508,7 @@ def __init__(self):
self._network_monitor = NetworkConnectivityMonitor()
self._network_monitor.start()
self._prev_has_internet = False
gui_app.set_nav_stack_tick(self._nav_stack_tick)
gui_app.add_nav_stack_tick(self._nav_stack_tick)

self._start_page = StartPage()
self._start_page.set_click_callback(self._getting_started_button_callback)
Expand Down