# Copyright 2020 The Chromium OS Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

# This file is the source of truth for both generic (locale-independent)
# strings, localized strings and sprite bitmaps (image assets).

locales: [ ar, bg, ca, cs, da, de, el, en, es, es-419, et, fa, fi, fil, fr,
           he, hi, hr, hu, id, it, ja, ko, lt, lv, ms, nl, nb, pl, pt-BR,
           pt-PT, ro, ru, sk, sl, sr, sv, th, tr, uk, vi, zh-CN, zh-TW,
           bn, gu, kn, ml, mr, ta, te ]

# Generic strings
# Key is the string name (see strings/*.txt); value is the category of the
# string.
generic_files:
  rec_url: footer  # see strings/rec_url.txt

# Localized strings
# Key is the name in firmware_strings.grd; value is the category of the string.
localized_files:
  # pre-generated
  language: language
  # firmware sync
  firmware_sync_title: title
  firmware_sync_desc: desc
  # broken screen
  broken_title: title
  broken_desc: desc
  broken_desc_phyrec: desc
  broken_desc_detach: desc
  # advanced options
  adv_options_title: title
  btn_dev_mode: primary_button
  btn_debug_info: primary_button
  btn_firmware_log: primary_button
  # debug info and firmware log
  debug_info_title: title
  firmware_log_title: title
  # recovery screen
  rec_sel_title: title
  rec_sel_desc0: desc
  rec_sel_desc1: desc
  rec_sel_desc1_no_sd: desc
  rec_sel_desc1_no_phone: desc
  rec_sel_desc1_no_phone_no_sd: desc
  btn_rec_by_phone: primary_button
  btn_rec_by_disk: primary_button
  # recovery - common
  rec_step1_title: title
  rec_step1_desc2: desc
  rec_step1_desc2_low_bat: desc
  # recovery - phone
  rec_phone_step1_desc0: desc
  rec_phone_step1_desc1: desc
  rec_phone_step2_title: title
  rec_phone_step2_desc: rec_phone_step2_desc
  # recovery - disk
  rec_disk_step1_desc0: desc
  rec_disk_step1_desc0_no_sd: desc
  rec_disk_step1_desc1: desc
  rec_disk_step2_title: title
  rec_disk_step2_desc0: desc
  rec_disk_step2_desc1: desc
  rec_disk_step2_desc2: desc
  rec_disk_step3_title: title
  rec_disk_step3_desc0: desc
  # recovery - error
  rec_invalid_title: title
  rec_invalid_desc: desc
  rec_invalid_disk_desc: desc
  # to-dev screen
  rec_to_dev_title: title
  rec_to_dev_desc0: desc
  rec_to_dev_desc1: desc
  rec_to_dev_desc1_phyrec: desc
  rec_to_dev_desc1_power: desc
  # developer screen
  dev_title: title
  dev_desc0: desc
  dev_desc1: desc
  btn_secure_mode: primary_button
  btn_int_disk: primary_button
  btn_ext_disk: primary_button
  btn_alt_bootloader: primary_button
  # to-norm screen
  dev_to_norm_title: title
  dev_to_norm_desc0: desc
  dev_to_norm_desc1: desc
  # developer: boot from external disk
  dev_boot_ext_title: title
  dev_boot_ext_desc0: desc
  dev_invalid_disk_title: title
  dev_invalid_disk_desc0: desc
  # developer: select bootloader
  dev_select_bootloader_title: title
  # generic buttons
  btn_next: primary_button
  btn_back: primary_button
  btn_confirm: primary_button
  btn_cancel: primary_button
  btn_adv_options: secondary_button
  btn_power_off: secondary_button
  # log screen
  btn_page_up: primary_button
  btn_page_down: primary_button
  page_up_disabled_help: help
  page_down_disabled_help: help
  # footer
  model: footer
  help_center: footer
  navigate0: footer_nav
  navigate1: footer_nav
  navigate0_tablet: footer_nav
  navigate1_tablet: footer_nav

diagnostic_files:
  # diagnostic tools - menu
  btn_launch_diag: secondary_button
  diag_menu_title: title
  diag_menu_desc0: desc
  btn_diag_storage: primary_button
  btn_diag_memory_quick: primary_button
  btn_diag_memory_full: primary_button
  # diagnostic tools - storage
  diag_storage_title: title
  # diagnostic tools - memory
  diag_memory_quick_title: title
  diag_memory_full_title: title
  btn_diag_cancel: primary_button

sprite_files:
  # language menu
  ic_globe: ic_globe
  ic_dropdown: ic_dropdown
  # icons
  ic_info: icon
  ic_error: icon
  ic_dev_mode: icon
  ic_restart: icon
  ic_1: icon_step
  ic_1-done: icon_step
  ic_2: icon_step
  ic_2-done: icon_step
  ic_3: icon_step
  ic_3-done: icon_step
  ic_done: icon_step
  # button icons
  ic_search: button_icon
  ic_search_focus: button_icon
  ic_settings: button_icon
  ic_settings_focus: button_icon
  ic_power: button_icon
  ic_power_focus: button_icon
  ic_dropleft: button_arrow
  ic_dropleft_focus: button_arrow
  ic_dropright: button_arrow
  ic_dropright_focus: button_arrow
  # QR code
  qr_rec: qr_rec
  qr_rec_phone: qr_rec_phone
  # navigation instructions
  nav-key_up: nav_icon
  nav-key_down: nav_icon
  nav-key_enter: nav_icon
  nav-button_volume_up: nav_icon
  nav-button_volume_down: nav_icon
  nav-button_power: nav_icon

# Google material colors
# See https://carbon.googleplex.com/cros-ux/pages/color/overview.
color_aliases:
  - &grey_900 '#202124'
  - &grey_500 '#9aa0a6'
  - &grey_200 '#e8eaed'

# Style of each category
styles:
  _DEFAULT_:
    # The colors of these bitmaps will be adjusted at runtime.
    bgcolor: '#000000'
    fgcolor: '#ffffff'
    # Height of the generated bitmap relative to the screen resolution specified
    # in boards.yaml, using 1000 as a base. For example, "height: 200" means the
    # image will be scaled to 20% of the screen height. These scale-related
    # numbers are supposed to be kept in sync with the those set in depthcharge,
    # to ensure the size of the generated bitmap will be proportional to the
    # size that it is displayed at.
    height: 24
    # Maximum width of the bitmap for wrapping lines. Unit is the same as the
    # "height" option.
    max_width: null
  language:
    height: 26
  title:
    bgcolor: *grey_900
    fgcolor: *grey_200
    height: 42
    # UI_SCALE = 1000
    # UI_MARGIN_H = 50
    # UI_SCALE - UI_MARGIN_H * 2
    max_width: 900
  desc:
    bgcolor: *grey_900
    fgcolor: *grey_200
    # UI_SCALE - UI_MARGIN_H * 2
    max_width: 900
  rec_phone_step2_desc:
    bgcolor: *grey_900
    fgcolor: *grey_200
    # UI_REC_QR_SIZE = 228
    # UI_REC_QR_MARGIN_H = 24
    # UI_SCALE - UI_MARGIN_H * 2 - UI_REC_QR_SIZE - UI_REC_QR_MARGIN_H * 2
    max_width: 624
  primary_button:
    height: 20
  secondary_button:
    height: 20
  footer:
    bgcolor: *grey_900
    fgcolor: *grey_500
    height: 20
  footer_nav:
    bgcolor: *grey_900
    fgcolor: *grey_500
    height: 20
    # UI_FOOTER_HEIGHT = 128
    # UI_FOOTER_COL1_MARGIN_RIGHT = 20
    # width of rec_url.bmp = 282
    # UI_FOOTER_COL2_MARGIN_RIGHT = 40
    # UI_FOOTER_COL3_MARGIN_LEFT = 40
    # UI_SCALE - UI_MARGIN_H * 2 - UI_FOOTER_HEIGHT
    # - UI_FOOTER_COL1_MARGIN_RIGHT - 282
    # - UI_FOOTER_COL2_MARGIN_RIGHT - UI_FOOTER_COL3_MARGIN_LEFT
    max_width: 390
  # sprite bitmaps
  ic_globe:
    height: 20
  ic_dropdown:
    height: 24
  icon:
    height: 45
  icon_step:
    height: 28
  button_icon:
    height: 24
  button_arrow:
    height: 20
  qr_rec:
    height: 128
  qr_rec_phone:
    height: 228
  nav_icon:
    height: 30

# Font of each locale
fonts:
  _DEFAULT_: 'Roboto'
  # The following contains all the locales 'Roboto' doesn't support. All
  # the supported locales can be found by
  #   fc-match -f "%{lang}\n" "Roboto"
  ar:     'Noto Sans Arabic UI'
  bn:     'Noto Sans Bengali UI'
  fa:     'Noto Sans Arabic UI'
  gu:     'Noto Sans Gujarati UI'
  he:     'Noto Sans Hebrew'
  hi:     'Noto Sans Devanagari UI'
  ja:     'Noto Sans CJK JP'
  kn:     'Noto Sans Kannada UI'
  ko:     'Noto Sans CJK KR'
  ml:     'Noto Sans Malayalam UI'
  mr:     'Noto Sans Devanagari UI'
  ta:     'Noto Sans Tamil UI'
  te:     'Noto Sans Telugu UI'
  th:     'Noto Sans Thai UI'
  zh-CN:  'Noto Sans CJK SC'
  zh-TW:  'Noto Sans CJK TC'
