@@ -42,7 +42,7 @@ def __init__(self):
4242 self ._onroad_layout ,
4343 ], spacing = 0 , pad_start = 0 , pad_end = 0 )
4444 self ._scroller .set_reset_scroll_at_show (False )
45- self ._scroller .set_enabled (lambda : self .enabled )
45+ self ._scroller .set_enabled (lambda : self .enabled ) # for nav stack
4646
4747 # Disable scrolling when onroad is interacting with bookmark
4848 self ._scroller .set_scrolling_enabled (lambda : not self ._onroad_layout .is_swiping_left ())
@@ -60,7 +60,7 @@ def __init__(self):
6060 def _setup_callbacks (self ):
6161 self ._home_layout .set_callbacks (on_settings = lambda : gui_app .push_widget (self ._settings_layout ))
6262 self ._onroad_layout .set_click_callback (lambda : self ._scroll_to (self ._home_layout ))
63- device .add_interactive_timeout_callback (self ._set_mode_for_started )
63+ device .add_interactive_timeout_callback (self ._on_interactive_timeout )
6464
6565 def _scroll_to (self , layout : Widget ):
6666 layout_x = int (layout .rect .x )
@@ -77,43 +77,51 @@ def _render(self, _):
7777 # Render
7878 self ._scroller .render (self ._rect )
7979
80- # If not in background stack
81- if self .enabled :
82- self ._handle_transitions ()
80+ self ._handle_transitions ()
8381
8482 def _handle_transitions (self ):
83+ # Don't pop if onboarding
84+ if gui_app .get_active_widget () == self ._onboarding_window :
85+ return
86+
8587 if ui_state .started != self ._prev_onroad :
8688 self ._prev_onroad = ui_state .started
8789
90+ # onroad: after delay, pop nav stack and scroll to onroad
91+ # offroad: immediately scroll to home, but don't pop nav stack (can stay in settings)
8892 if ui_state .started :
8993 self ._onroad_time_delay = rl .get_time ()
9094 else :
91- self ._set_mode_for_started ( True )
95+ self ._scroll_to ( self . _home_layout )
9296
93- # delay so we show home for a bit after starting
9497 if self ._onroad_time_delay is not None and rl .get_time () - self ._onroad_time_delay >= ONROAD_DELAY :
95- self ._set_mode_for_started (True )
98+ gui_app .pop_widgets_to (self )
99+ self ._scroll_to (self ._onroad_layout )
96100 self ._onroad_time_delay = None
97101
102+ # when car leaves standstill, pop nav stack and scroll to onroad
98103 CS = ui_state .sm ["carState" ]
99104 if not CS .standstill and self ._prev_standstill :
100105 gui_app .pop_widgets_to (self )
101106 self ._scroll_to (self ._onroad_layout )
102107 self ._prev_standstill = CS .standstill
103108
104- def _set_mode_for_started (self , onroad_transition : bool = False ):
105- print (f'_set_mode_for_started, { ui_state .started = } , { onroad_transition = } ' )
109+ def _on_interactive_timeout (self ):
110+ print (f'_on_interactive_timeout, { ui_state .started = } ' )
111+
112+ # Don't pop if onboarding
113+ print ('get active' , gui_app .get_active_widget (), self ._onboarding_window .completed )
114+ if gui_app .get_active_widget () == self ._onboarding_window :
115+ return
116+
106117 if ui_state .started :
107- CS = ui_state .sm ["carState" ]
108- # Only go onroad if car starts or is not at a standstill
109- if not CS .standstill or onroad_transition :
118+ # Don't pop if at standstill
119+ if not ui_state .sm ["carState" ].standstill :
110120 gui_app .pop_widgets_to (self )
111121 self ._scroll_to (self ._onroad_layout )
112122 else :
113- # Stay in settings if car turns off while in settings
114- if not onroad_transition or gui_app .get_active_widget () != self :
115- gui_app .pop_widgets_to (self )
116- self ._scroll_to (self ._home_layout )
123+ gui_app .pop_widgets_to (self )
124+ self ._scroll_to (self ._home_layout )
117125
118126 def _on_bookmark_clicked (self ):
119127 user_bookmark = messaging .new_message ('bookmarkButton' )
0 commit comments