You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							63 lines
						
					
					
						
							2.4 KiB
						
					
					
				
			
		
		
	
	
							63 lines
						
					
					
						
							2.4 KiB
						
					
					
				import pyray as rl
 | 
						|
 | 
						|
from openpilot.selfdrive.ui.ui_state import ui_state
 | 
						|
from openpilot.system.ui.lib.application import gui_app, FontWeight
 | 
						|
from openpilot.system.ui.lib.multilang import tr
 | 
						|
from openpilot.system.ui.lib.text_measure import measure_text_cached
 | 
						|
from openpilot.system.ui.lib.wrap_text import wrap_text
 | 
						|
from openpilot.system.ui.widgets import Widget
 | 
						|
from openpilot.system.ui.widgets.label import gui_label
 | 
						|
 | 
						|
 | 
						|
class PrimeWidget(Widget):
 | 
						|
  """Widget for displaying comma prime subscription status"""
 | 
						|
 | 
						|
  PRIME_BG_COLOR = rl.Color(51, 51, 51, 255)
 | 
						|
 | 
						|
  def _render(self, rect):
 | 
						|
    if ui_state.prime_state.is_prime():
 | 
						|
      self._render_for_prime_user(rect)
 | 
						|
    else:
 | 
						|
      self._render_for_non_prime_users(rect)
 | 
						|
 | 
						|
  def _render_for_non_prime_users(self, rect: rl.Rectangle):
 | 
						|
    """Renders the advertisement for non-Prime users."""
 | 
						|
 | 
						|
    rl.draw_rectangle_rounded(rect, 0.025, 10, self.PRIME_BG_COLOR)
 | 
						|
 | 
						|
    # Layout
 | 
						|
    x, y = rect.x + 80, rect.y + 90
 | 
						|
    w = rect.width - 160
 | 
						|
 | 
						|
    # Title
 | 
						|
    gui_label(rl.Rectangle(x, y, w, 90), tr("Upgrade Now"), 75, font_weight=FontWeight.BOLD)
 | 
						|
 | 
						|
    # Description with wrapping
 | 
						|
    desc_y = y + 140
 | 
						|
    font = gui_app.font(FontWeight.LIGHT)
 | 
						|
    wrapped_text = "\n".join(wrap_text(font, tr("Become a comma prime member at connect.comma.ai"), 56, int(w)))
 | 
						|
    text_size = measure_text_cached(font, wrapped_text, 56)
 | 
						|
    rl.draw_text_ex(font, wrapped_text, rl.Vector2(x, desc_y), 56, 0, rl.WHITE)
 | 
						|
 | 
						|
    # Features section
 | 
						|
    features_y = desc_y + text_size.y + 50
 | 
						|
    gui_label(rl.Rectangle(x, features_y, w, 50), tr("PRIME FEATURES:"), 41, font_weight=FontWeight.BOLD)
 | 
						|
 | 
						|
    # Feature list
 | 
						|
    features = [tr("Remote access"), tr("24/7 LTE connectivity"), tr("1 year of drive storage"), tr("Remote snapshots")]
 | 
						|
    for i, feature in enumerate(features):
 | 
						|
      item_y = features_y + 80 + i * 65
 | 
						|
      gui_label(rl.Rectangle(x, item_y, 100, 60), "✓", 50, color=rl.Color(70, 91, 234, 255))
 | 
						|
      gui_label(rl.Rectangle(x + 60, item_y, w - 60, 60), feature, 50)
 | 
						|
 | 
						|
  def _render_for_prime_user(self, rect: rl.Rectangle):
 | 
						|
    """Renders the prime user widget with subscription status."""
 | 
						|
 | 
						|
    rl.draw_rectangle_rounded(rl.Rectangle(rect.x, rect.y, rect.width, 230), 0.1, 10, self.PRIME_BG_COLOR)
 | 
						|
 | 
						|
    x = rect.x + 56
 | 
						|
    y = rect.y + 40
 | 
						|
 | 
						|
    font = gui_app.font(FontWeight.BOLD)
 | 
						|
    rl.draw_text_ex(font, tr("✓ SUBSCRIBED"), rl.Vector2(x, y), 41, 0, rl.Color(134, 255, 78, 255))
 | 
						|
    rl.draw_text_ex(font, tr("comma prime"), rl.Vector2(x, y + 61), 75, 0, rl.WHITE)
 | 
						|
 |