from alarms.alarm_manager import AlarmManager from ui.alarm_view_model import AlarmViewModel from ui.dashboard_view_model import DashboardViewModel class PicoDashboardApp: def __init__( self, app_state, communication_service, screen_manager, touch_router, display, dashboard_renderer, buzzer, alarm_manager=None, ): self.state = app_state self.comms = communication_service self.screen_manager = screen_manager self.touch_router = touch_router self.display = display self.dashboard_renderer = dashboard_renderer self.buzzer = buzzer self.alarm_manager = alarm_manager or AlarmManager() self.alarms = [] def tick(self, touch_event=None): self.comms.poll() self.comms.auto_select_transport() if touch_event: self.touch_router.handle_touch(touch_event) self.alarms = self.alarm_manager.evaluate(self.state) alarm_view = AlarmViewModel(self.alarms) self.buzzer.update_from_alarm_view(alarm_view) self.render() def render(self): if self.screen_manager.current_screen == "dashboard": vm = DashboardViewModel(self.state, self.alarms) self.dashboard_renderer.render(vm) self.display.flush()