Files
StarPilot/openpilot/starpilot/ui/onroad_jetlink_layer.py
T

38 lines
1.3 KiB
Python

"""Keeps Jetlink's status polled for the native large screen only while its widget is showing."""
from openpilot.starpilot.models.jetlink_status import JetlinkStatusFeed
from openpilot.starpilot.ui.onroad_customization import JETLINK_WIDGET
from openpilot.system.ui.lib.application import gui_app
class NativeJetlinkLayer:
def __init__(self, widget, ui_state):
self.widget, self.ui = widget, ui_state
self.feed = JetlinkStatusFeed()
self.pending = None
gui_app.add_render_prepare(self.prepare, self.close)
@staticmethod
def placement(state):
placed = state.customization["layouts"]["large"].get(JETLINK_WIDGET)
return placed if placed is not None and placed["enabled"] else None
def prepare(self):
# The preceding rendered frame asks for the next poll; hidden pages stop asking.
state, self.pending = self.pending, None
self.feed.set_enabled(state is not None and bool(self.ui.started) and self.placement(state) is not None)
def render(self, state):
if self.placement(state) is None:
self.pending = None
return
self.pending = state
self.widget.status = self.feed.snapshot()
self.widget.render(state)
def close(self):
gui_app.remove_render_prepare(self.prepare)
self.pending = None
self.feed.set_enabled(False)
self.feed.close()