~aleteoryx/muditaos

e833690c8fe244bd215ac54667d924db1f012c1c — Paweł Joński 3 years ago 6f257d3
[MOS-288] Add community build

Add community build
Add targets for community fonts
45 files changed, 812 insertions(+), 285 deletions(-)

M CMakeLists.txt
M cmake/modules/ProjectConfig.cmake
M doc/ProjectConfig.md
A doc/fonts.md
M doc/quickstart.md
M image/CMakeLists.txt
M image/assets/certification_info/Deutsch/sar.txt
M image/assets/certification_info/English/sar.txt
M image/assets/certification_info/Espanol/sar.txt
M image/assets/certification_info/Polski/sar.txt
M image/assets/lang/Deutsch.json
M image/assets/lang/English.json
M image/assets/lang/Espanol.json
M image/assets/lang/Francais.json
M image/assets/lang/Polski.json
M image/assets/lang/Svenska.json
M image/assets/licenses/Deutsch/eula.txt
M image/assets/licenses/English/eula.txt
M image/assets/licenses/Espanol/eula.txt
M image/assets/licenses/Polski/eula.txt
M module-apps/application-settings/windows/advanced/UITestWindow.cpp
M module-gui/gui/core/Font.cpp
M module-gui/gui/core/Font.hpp
M module-gui/gui/core/FontManager.cpp
M module-gui/gui/core/FontManager.hpp
M module-gui/gui/widgets/Style.hpp
M module-gui/gui/widgets/status-bar/Style.hpp
M module-gui/test/test-catch-text/CMakeLists.txt
M module-gui/test/test-catch-text/test-gui-Font.cpp
M module-gui/test/test-catch-text/test-gui-Text.cpp
M module-utils/log/api/log/debug.hpp
M products/BellHybrid/CMakeLists.txt
M products/BellHybrid/apps/application-bell-settings/data/BellSettingsStyle.hpp
R products/BellHybrid/{assets_images => assets/assets_common}.json
A products/BellHybrid/assets/assets_community.json
R products/BellHybrid/{assets => assets/assets_proprietary}.json
A products/BellHybrid/assets/assets_rt1051.json
M products/PurePhone/CMakeLists.txt
R products/PurePhone/{assets_images => assets/assets_common}.json
A products/PurePhone/assets/assets_community.json
R products/PurePhone/{assets => assets/assets_proprietary}.json
A products/PurePhone/assets/assets_rt1051.json
M test/CMakeLists.txt
A test/assets/assets_community.json
R test/{assets => assets/assets_proprietary}.json
M CMakeLists.txt => CMakeLists.txt +1 -0
@@ 32,6 32,7 @@ message("Selected product: ${PRODUCT}")
message("Selected board:   ${BOARD}")
message("Board revision:   ${BOARD_REVISION}")
message("PROJECT_TARGET:   ${PROJECT_TARGET}")
message("Assets version:   ${ASSETS_TYPE}")
message("Version:          ${OS_VERSION_MAJOR}.${OS_VERSION_MINOR}.${OS_VERSION_PATCH}-${OS_VERSION_LABEL}")

string(REPLACE "TARGET_" "" PROJECT_TARGET_NAME ${PROJECT_TARGET})

M cmake/modules/ProjectConfig.cmake => cmake/modules/ProjectConfig.cmake +5 -0
@@ 5,6 5,11 @@ else()
    set (LOG_USE_COLOR 1 CACHE INTERNAL "")
endif()

set(ASSETS_TYPE "Proprietary" CACHE INTERNAL "")
if (NOT ${ASSETS_TYPE} STREQUAL "Proprietary" AND NOT ${ASSETS_TYPE} STREQUAL "Community")
    message(FATAL_ERROR " Unknown ASSETS_TYPE value: ${ASSETS_TYPE} - allowed values: Propertiary, Community")
endif()

# add LOG_SENSITIVE_DATA enable option
option(LOG_SENSITIVE_DATA "LOG_SENSITIVE_DATA" ON)
if (${LOG_SENSITIVE_DATA} STREQUAL "ON")

M doc/ProjectConfig.md => doc/ProjectConfig.md +6 -0
@@ 86,3 86,9 @@ Following configurations are for: [lwext4](third-party/lwext4/) - third party ex
    - `ENABLE_DEVELOPER_MODE_ENDPOINT_DEFAULT`
    - `LOG_SENSITIVE_DATA_ENABLED`
default: `OFF`

# Proprietary/Community build
- option `ASSETS_TYPE` default `Proprietary`

Setting to `Community` disables the download of proprietary files which are unaccessable for the community
and disables tests basing on those files

A doc/fonts.md => doc/fonts.md +43 -0
@@ 0,0 1,43 @@
# Fonts management

## Fonts format
MuditaOS uses its own fonts binary format with extension .mpf.
Fonts can be converted from popular formats (ie otf, ttf) to this format via converter tool: https://github.com/mudita/fontbuilder

Reasons to use specific binary format:
- reduce workload on CPU since it has no GPU unit
- reduce size of fonts both on disk and in RAM
## Fonts source
Fonts are assets which are downloaded from separate repositories using `download_assets.py` script (see more: [download assets documentation](../doc/download_assets.md)). Basing on configuration (Community/Proprietary) fonts will be downloaded from two different repositories.

## Fonts mapping
Regardless of the source, both assets packages contain file fontmap.json, mapping font files to font types used in MuditaOS code.

Full example can be found in public assets repo: https://github.com/mudita/MuditaOSPublicAssets/blob/master/image/assets/fonts/fontmap.json

Short example:
```
{
    "info" : {
        "default_font_name" :       "dejavu_sans_bold_27",
        "default_font_type_name" :  "dejavu_sans"
    },
    "style": {
        "mediumboldtitle":      "dejavu_sans/dejavu_sans_bold_27.mpf",
        ...
    }
}
```
There are two values in `info` part:
- `default_font_name` - fallback font in case of inability to load specified font
- `default_font_type_name` - default font family name used in methods which specify only size and weight of a font


Every key in `style` part defines font type to be used in fonts list in MuditaOS, which later can be used in `FontManager::getFont` method (ie `getFont("supersizemelight")`)

## Fonts usage in MuditaOS

FontManager loads all fonts based on `fontmap.json`. These can be later accessed in GUI methods, specifically via: 
- `getFont(std::string fontType)` -  returns font as `RawFont*` basing on font type (ie `verysmall`, `supersizemelight`)
- `getFontByName(std::string fontName)` -  returns font as `RawFont*` basing on font name from font descriptor (ie. `dejavu_sans_regular_20`, `dejavu_sans_light_90`)


M doc/quickstart.md => doc/quickstart.md +7 -1
@@ 102,13 102,13 @@ We are using J-Link driver in version J-Link v634f ([Ubuntu download](https://ww

#### Add GitHub token

We are storing assets on github pages and these are downloaded automatically before software images are built.
Please follow github token configuration here: [download assets documentation](../doc/download_asset.py)

#### Project configuration

To configure project we have helper script: `./configure.sh` which essentially passes through basic cmake configuration for each product for each platform.
We highly advise using `ninja` as it has proven better compilation times over make.
To build MuditaOS with no access to proprietary files, please specify cmake flag: `-DASSETS_TYPE=Community`

The script can be run with the following parameters:
```


@@ 138,6 138,12 @@ __Examples:__
./configure.sh bell linux debug "-G Ninja"
```

4. building bell for linux platform with ninja and only community assets

```
./configure.sh bell linux debug -DASSETS_TYPE=Community "-G Ninja"
```

#### Project build

Each run of `configure.sh` creates `build-{PRODUCT}-{PLATFORM}-{OPTMALIZAION}` folder, i.e.: `build-PurePhone-rt1051-RelWithDebInfo`

M image/CMakeLists.txt => image/CMakeLists.txt +16 -1
@@ 4,12 4,27 @@ include(Utils)
set(SYSROOT ${CMAKE_BINARY_DIR}/sysroot)
set(ASSETS_DEST_DIR ${SYSROOT}/sys)

set(ASSETS_DEPENDENCIES "json-common-target")

if (${ASSETS_TYPE} STREQUAL "Proprietary")
    list(APPEND ASSETS_DEPENDENCIES "json-proprietary-target")
endif()

if (${ASSETS_TYPE} STREQUAL "Community")
    list(APPEND ASSETS_DEPENDENCIES "json-community-target")
endif()

if (${PROJECT_TARGET} STREQUAL "TARGET_RT1051")
    list(APPEND ASSETS_DEPENDENCIES "json-json-rt1051-target")
endif()

add_assets_target(
    TARGET assets
    SOURCE_DIR ${ASSETS_SOURCE_DIR}
    DEST_DIR ${ASSETS_DEST_DIR}
    DEVEL ${WITH_DEVELOPMENT_FEATURES}
    DEPENDS json-target json-images-target
    DEPENDS
        ${ASSETS_DEPENDENCIES}
)

multicomp_install(

M image/assets/certification_info/Deutsch/sar.txt => image/assets/certification_info/Deutsch/sar.txt +8 -8
@@ 1,19 1,19 @@
<text font='gt_pressura' weight='regular' size='27' align='left'>
<text weight='regular' size='27' align='left'>
<p>THE EQUIPMENT MEETS INTERNATIONAL REQUIREMENTS FOR EXPOSURE TO RADIO WAVES. The mobile phone is a radio frequency receiver/transmitter.</p>
<br></br>
<p>Mudita Pure has been designed to minimize exposure to radio waves (radio frequency electromagnetic fields) as defined by international guidelines, while maintaining signal integrity. These guidelines have been developed by an independent scientific institution (ICNIRP) and provide a basic safety margin to ensure the safety of all users regardless of age or health.</p>
<br></br>
<p>Exposure to radio waves is expressed in a rate called Specific Absorption Rate (SAR).</p></text>
<br></br>
<text font='gt_pressura' weight='bold' size='32' align='left'><p>The maximum SAR value for Mudita Pure:</p></text>
<text font='gt_pressura' weight='bold' size='27' align='left'>1,6 W/kg </text><text font='gt_pressura' weight='regular' size='27' align='left'>(over 1 g) SAR Limit</text><br></br>
<text font='gt_pressura' weight='regular' size='27' align='left'><p>American Standard ANSI C95.1 (ANSI 1992)</p></text>
<text font='gt_pressura' weight='regular' size='27' align='left'><p>Head: 0,08</p>
<text weight='bold' size='32' align='left'><p>The maximum SAR value for Mudita Pure:</p></text>
<text weight='bold' size='27' align='left'>1,6 W/kg </text><text weight='regular' size='27' align='left'>(over 1 g) SAR Limit</text><br></br>
<text weight='regular' size='27' align='left'><p>American Standard ANSI C95.1 (ANSI 1992)</p></text>
<text weight='regular' size='27' align='left'><p>Head: 0,08</p>
<p>Body: 0,08</p></text>
<br></br>
<text font='gt_pressura' weight='bold' size='27' align='left'>2,0 W/kg</text> <text font='gt_pressura' weight='regular' size='27' align='left'>(over 10 g) SAR Limit</text><br></br>
<text font='gt_pressura' weight='regular' size='27' align='left'><p>ICNIRP Guidelines 1998 (ICNIRP 1998)</p></text>
<text font='gt_pressura' weight='regular' size='27' align='left'><p>Head: 0,08</p>
<text weight='bold' size='27' align='left'>2,0 W/kg</text> <text weight='regular' size='27' align='left'>(over 10 g) SAR Limit</text><br></br>
<text weight='regular' size='27' align='left'><p>ICNIRP Guidelines 1998 (ICNIRP 1998)</p></text>
<text weight='regular' size='27' align='left'><p>Head: 0,08</p>
<p>Body: 0,08</p>
<br></br>
<p>During use, the actual SAR values for this device are significantly lower than those given above, because the power consumption of the mobile phone is automatically reduced if full power is not required to make a call, due to system performance and minimized network interference. The lower the power consumption of this device, the lower the SAR value.</p>

M image/assets/certification_info/English/sar.txt => image/assets/certification_info/English/sar.txt +8 -8
@@ 1,19 1,19 @@
<text font='gt_pressura' weight='regular' size='27' align='left'>
<text weight='regular' size='27' align='left'>
<p>THE EQUIPMENT MEETS INTERNATIONAL REQUIREMENTS FOR EXPOSURE TO RADIO WAVES. The mobile phone is a radio frequency receiver/transmitter.</p>
<br></br>
<p>Mudita Pure has been designed to minimize exposure to radio waves (radio frequency electromagnetic fields) as defined by international guidelines, while maintaining signal integrity. These guidelines have been developed by an independent scientific institution (ICNIRP) and provide a basic safety margin to ensure the safety of all users regardless of age or health.</p>
<br></br>
<p>Exposure to radio waves is expressed in a rate called Specific Absorption Rate (SAR).</p></text>
<br></br>
<text font='gt_pressura' weight='bold' size='32' align='left'><p>The maximum SAR value for Mudita Pure:</p></text>
<text font='gt_pressura' weight='bold' size='27' align='left'>1,6 W/kg </text><text font='gt_pressura' weight='regular' size='27' align='left'>(over 1 g) SAR Limit</text><br></br>
<text font='gt_pressura' weight='regular' size='27' align='left'><p>American Standard ANSI C95.1 (ANSI 1992)</p></text>
<text font='gt_pressura' weight='regular' size='27' align='left'><p>Head: 0,08</p>
<text weight='bold' size='32' align='left'><p>The maximum SAR value for Mudita Pure:</p></text>
<text weight='bold' size='27' align='left'>1,6 W/kg </text><text weight='regular' size='27' align='left'>(over 1 g) SAR Limit</text><br></br>
<text weight='regular' size='27' align='left'><p>American Standard ANSI C95.1 (ANSI 1992)</p></text>
<text weight='regular' size='27' align='left'><p>Head: 0,08</p>
<p>Body: 0,08</p></text>
<br></br>
<text font='gt_pressura' weight='bold' size='27' align='left'>2,0 W/kg</text> <text font='gt_pressura' weight='regular' size='27' align='left'>(over 10 g) SAR Limit</text><br></br>
<text font='gt_pressura' weight='regular' size='27' align='left'><p>ICNIRP Guidelines 1998 (ICNIRP 1998)</p></text>
<text font='gt_pressura' weight='regular' size='27' align='left'><p>Head: 0,08</p>
<text weight='bold' size='27' align='left'>2,0 W/kg</text> <text weight='regular' size='27' align='left'>(over 10 g) SAR Limit</text><br></br>
<text weight='regular' size='27' align='left'><p>ICNIRP Guidelines 1998 (ICNIRP 1998)</p></text>
<text weight='regular' size='27' align='left'><p>Head: 0,08</p>
<p>Body: 0,08</p>
<br></br>
<p>During use, the actual SAR values for this device are significantly lower than those given above, because the power consumption of the mobile phone is automatically reduced if full power is not required to make a call, due to system performance and minimized network interference. The lower the power consumption of this device, the lower the SAR value.</p>

M image/assets/certification_info/Espanol/sar.txt => image/assets/certification_info/Espanol/sar.txt +8 -8
@@ 1,19 1,19 @@
<text font='gt_pressura' weight='regular' size='27' align='left'>
<text weight='regular' size='27' align='left'>
<p>THE EQUIPMENT MEETS INTERNATIONAL REQUIREMENTS FOR EXPOSURE TO RADIO WAVES. The mobile phone is a radio frequency receiver/transmitter.</p>
<br></br>
<p>Mudita Pure has been designed to minimize exposure to radio waves (radio frequency electromagnetic fields) as defined by international guidelines, while maintaining signal integrity. These guidelines have been developed by an independent scientific institution (ICNIRP) and provide a basic safety margin to ensure the safety of all users regardless of age or health.</p>
<br></br>
<p>Exposure to radio waves is expressed in a rate called Specific Absorption Rate (SAR).</p></text>
<br></br>
<text font='gt_pressura' weight='bold' size='32' align='left'><p>The maximum SAR value for Mudita Pure:</p></text>
<text font='gt_pressura' weight='bold' size='27' align='left'>1,6 W/kg </text><text font='gt_pressura' weight='regular' size='27' align='left'>(over 1 g) SAR Limit</text><br></br>
<text font='gt_pressura' weight='regular' size='27' align='left'><p>American Standard ANSI C95.1 (ANSI 1992)</p></text>
<text font='gt_pressura' weight='regular' size='27' align='left'><p>Head: 0,08</p>
<text weight='bold' size='32' align='left'><p>The maximum SAR value for Mudita Pure:</p></text>
<text weight='bold' size='27' align='left'>1,6 W/kg </text><text weight='regular' size='27' align='left'>(over 1 g) SAR Limit</text><br></br>
<text weight='regular' size='27' align='left'><p>American Standard ANSI C95.1 (ANSI 1992)</p></text>
<text weight='regular' size='27' align='left'><p>Head: 0,08</p>
<p>Body: 0,08</p></text>
<br></br>
<text font='gt_pressura' weight='bold' size='27' align='left'>2,0 W/kg</text> <text font='gt_pressura' weight='regular' size='27' align='left'>(over 10 g) SAR Limit</text><br></br>
<text font='gt_pressura' weight='regular' size='27' align='left'><p>ICNIRP Guidelines 1998 (ICNIRP 1998)</p></text>
<text font='gt_pressura' weight='regular' size='27' align='left'><p>Head: 0,08</p>
<text weight='bold' size='27' align='left'>2,0 W/kg</text> <text weight='regular' size='27' align='left'>(over 10 g) SAR Limit</text><br></br>
<text weight='regular' size='27' align='left'><p>ICNIRP Guidelines 1998 (ICNIRP 1998)</p></text>
<text weight='regular' size='27' align='left'><p>Head: 0,08</p>
<p>Body: 0,08</p>
<br></br>
<p>During use, the actual SAR values for this device are significantly lower than those given above, because the power consumption of the mobile phone is automatically reduced if full power is not required to make a call, due to system performance and minimized network interference. The lower the power consumption of this device, the lower the SAR value.</p>

M image/assets/certification_info/Polski/sar.txt => image/assets/certification_info/Polski/sar.txt +8 -8
@@ 1,19 1,19 @@
<text font='gt_pressura' weight='regular' size='27' align='left'>
<text weight='regular' size='27' align='left'>
<p>THE EQUIPMENT MEETS INTERNATIONAL REQUIREMENTS FOR EXPOSURE TO RADIO WAVES. The mobile phone is a radio frequency receiver/transmitter.</p>
<br></br>
<p>Mudita Pure has been designed to minimize exposure to radio waves (radio frequency electromagnetic fields) as defined by international guidelines, while maintaining signal integrity. These guidelines have been developed by an independent scientific institution (ICNIRP) and provide a basic safety margin to ensure the safety of all users regardless of age or health.</p>
<br></br>
<p>Exposure to radio waves is expressed in a rate called Specific Absorption Rate (SAR).</p></text>
<br></br>
<text font='gt_pressura' weight='bold' size='32' align='left'><p>The maximum SAR value for Mudita Pure:</p></text>
<text font='gt_pressura' weight='bold' size='27' align='left'>1,6 W/kg </text><text font='gt_pressura' weight='regular' size='27' align='left'>(over 1 g) SAR Limit</text><br></br>
<text font='gt_pressura' weight='regular' size='27' align='left'><p>American Standard ANSI C95.1 (ANSI 1992)</p></text>
<text font='gt_pressura' weight='regular' size='27' align='left'><p>Head: 0,08</p>
<text weight='bold' size='32' align='left'><p>The maximum SAR value for Mudita Pure:</p></text>
<text weight='bold' size='27' align='left'>1,6 W/kg </text><text weight='regular' size='27' align='left'>(over 1 g) SAR Limit</text><br></br>
<text weight='regular' size='27' align='left'><p>American Standard ANSI C95.1 (ANSI 1992)</p></text>
<text weight='regular' size='27' align='left'><p>Head: 0,08</p>
<p>Body: 0,08</p></text>
<br></br>
<text font='gt_pressura' weight='bold' size='27' align='left'>2,0 W/kg</text> <text font='gt_pressura' weight='regular' size='27' align='left'>(over 10 g) SAR Limit</text><br></br>
<text font='gt_pressura' weight='regular' size='27' align='left'><p>ICNIRP Guidelines 1998 (ICNIRP 1998)</p></text>
<text font='gt_pressura' weight='regular' size='27' align='left'><p>Head: 0,08</p>
<text weight='bold' size='27' align='left'>2,0 W/kg</text> <text weight='regular' size='27' align='left'>(over 10 g) SAR Limit</text><br></br>
<text weight='regular' size='27' align='left'><p>ICNIRP Guidelines 1998 (ICNIRP 1998)</p></text>
<text weight='regular' size='27' align='left'><p>Head: 0,08</p>
<p>Body: 0,08</p>
<br></br>
<p>During use, the actual SAR values for this device are significantly lower than those given above, because the power consumption of the mobile phone is automatically reduced if full power is not required to make a call, due to system performance and minimized network interference. The lower the power consumption of this device, the lower the SAR value.</p>

M image/assets/lang/Deutsch.json => image/assets/lang/Deutsch.json +12 -12
@@ 270,8 270,8 @@
  "sim_card_pin_enabled": "PIN für SIM-Karte aktiviert",
  "sim_card_cant_connect": "<text>Keine Verbindung mit <token>$SIM</token>-Karte möglich.<br></br>Bitte Karte einsetzen.</text>",
  "sim_card_not_ready": "<text>Warten auf Start des Modems.<br></br>Dies kann einen Moment dauern.</text>",
  "app_desktop_press_to_unlock": "<text font='gt_pressura' size='27'><b>Entsperren</b> drücken und dann <b>#</b></text>",
  "app_desktop_press_to_complete_unlock": "<text font='gt_pressura' size='27'>Drücke <b>#</b> zum Entsperren</text>",
  "app_desktop_press_to_unlock": "<text size='27'><b>Entsperren</b> drücken und dann <b>#</b></text>",
  "app_desktop_press_to_complete_unlock": "<text size='27'>Drücke <b>#</b> zum Entsperren</text>",
  "app_desktop_unread_messages": "<text>Ungelesene <b>Nachrichten</b></text>",
  "app_desktop_missed_calls": "<text>Verpasste <b>Anrufe</b></text>",
  "app_desktop_menu_phone": "ANRUFE",


@@ 335,7 335,7 @@
  "app_messages_thread_not_sent": "Nicht gesendet: ",
  "app_messages_thread_you": "Sie: ",
  "app_onboarding_title": "Einführung",
  "app_onboarding_start_configuration": "<text font='gt_pressura' weight='light' size='46'><p>Hallo!</p></text><br></br><text font='gt_pressura' weight='regular' size='27'>Konfigurieren wir gemeinsam Ihr <br></br> Mudita Pure.</text>",
  "app_onboarding_start_configuration": "<text weight='light' size='46'><p>Hallo!</p></text><br></br><text weight='regular' size='27'>Konfigurieren wir gemeinsam Ihr <br></br> Mudita Pure.</text>",
  "app_onboarding_eula_license": "Lizenzvereinbarung (EULA)",
  "app_onboarding_select_sim": "Aktive SIM auswählen",
  "app_onboarding_select_sim_description": "<text>Es kann immer nur eine SIM-Karte aktiv sein.<br></br>Sie können diese jetzt auswählen und bei Bedarf<br></br>in den Einstellungen wechseln.</text>",


@@ 346,7 346,7 @@
  "app_onboarding_skip_confirm": "<text>SIM-Einrichtung ist für die Netzwerkverbindung erforderlich. Einrichtung trotzdem überspringen? </text>",
  "app_onboarding_configuration_successful": "<text>Ihr Mudita Pure<br></br>ist jetzt einsatzbereit.</text>",
  "app_onboarding_no_configuration": "<text>Ihr Mudita Pure wurde noch nicht<br></br>konfiguriert. Sie können es in den<br></br>Einstellungen einrichten.</text>",
  "app_onboarding_update_info": "<text>Die aktuelle Version von MuditaOS ist<br></br><token>$VERSION</token>.<br></br>Updates mit neuen Funktionen und Fehlerbehebungen erfolgen häufig.<br></br>Um Ihr Telefon zu aktualisieren, besuchen Sie bitte:<br></br></text><text font='gt_pressura' weight='bold' size='27'>www.mudita.com/updateos</text><br></br><text>und folgen Sie den Anweisungen.</text>",
  "app_onboarding_update_info": "<text>Die aktuelle Version von MuditaOS ist<br></br><token>$VERSION</token>.<br></br>Updates mit neuen Funktionen und Fehlerbehebungen erfolgen häufig.<br></br>Um Ihr Telefon zu aktualisieren, besuchen Sie bitte:<br></br></text><text weight='bold' size='27'>www.mudita.com/updateos</text><br></br><text>und folgen Sie den Anweisungen.</text>",
  "app_settings_title_main": "Einstellungen",
  "app_settings_advanced": "Fortgeschritten",
  "app_settings_bt": "Bluetooth",


@@ 357,10 357,10 @@
  "app_settings_bluetooth_phone_name": "Name des Telefons",
  "app_settings_bluetooth_phone_visibility": "Sichtbarkeit des Telefons",
  "app_settings_bluetooth_enter_passkey": "Passkey eingeben:",
  "app_settings_bluetooth_init_error_message": "<text font='gt_pressura' weight='regular' size='27'>Bluetooth-Initialisierungsprozess fehlgeschlagen.</text>",
  "app_settings_bluetooth_pairing_error_message": "<text font='gt_pressura' weight='regular' size='27'> Kopplungsvorgang fehlgeschlagen.<br></br>Überprüfen Sie das Gerät und </text> <text font='gt_pressura' weight='bold' size='27'>versuchen Sie es erneut.</text>",
  "app_settings_bluetooth_unpairing_error_message": "<text font='gt_pressura' weight='regular' size='27'> Entkopplungsvorgang fehlgeschlagen.<br></br>Überprüfen Sie das Gerät und </text> <text font='gt_pressura' weight='bold' size='27'>versuchen Sie es erneut.</text>",
  "app_settings_bluetooth_connecting_error_message": "<text font='gt_pressura' weight='regular' size='27'> Verbindungsvorgang fehlgeschlagen.<br></br>Überprüfen Sie das Gerät und </text> <text font='gt_pressura' weight='bold' size='27'>versuchen Sie es erneut.</text>",
  "app_settings_bluetooth_init_error_message": "<text weight='regular' size='27'>Bluetooth-Initialisierungsprozess fehlgeschlagen.</text>",
  "app_settings_bluetooth_pairing_error_message": "<text weight='regular' size='27'> Kopplungsvorgang fehlgeschlagen.<br></br>Überprüfen Sie das Gerät und </text> <text weight='bold' size='27'>versuchen Sie es erneut.</text>",
  "app_settings_bluetooth_unpairing_error_message": "<text weight='regular' size='27'> Entkopplungsvorgang fehlgeschlagen.<br></br>Überprüfen Sie das Gerät und </text> <text weight='bold' size='27'>versuchen Sie es erneut.</text>",
  "app_settings_bluetooth_connecting_error_message": "<text weight='regular' size='27'> Verbindungsvorgang fehlgeschlagen.<br></br>Überprüfen Sie das Gerät und </text> <text weight='bold' size='27'>versuchen Sie es erneut.</text>",
  "app_settings_net": "Netzwerk",
  "app_settings_disp_key": "Display und Tastenfeld",
  "app_settings_display_display_light": "Displaylicht",


@@ 631,10 631,10 @@
  "app_bell_background_sounds_timer_title": "Timer",
  "app_bell_background_sounds_timer_off": "AUS",
  "app_bell_onboarding_welcome_message": "<text>Mudita Harmony<br/>ist ausgeschaltet</text>",
  "app_bell_onboarding_info_rotate": "<text font='gt_pressura' weight='regular' size='38'>Drehen </text><text font='gt_pressura' weight='light' size='38'> um auszuwählen</text>",
  "app_bell_onboarding_info_light_click": "<text font='gt_pressura' weight='regular' size='38'>Leichter Klick </text><text font='gt_pressura' weight='light' size='38'>um fortzufahren</text>",
  "app_bell_onboarding_info_deep_click_warning": "<text font='gt_pressura' weight='light' size='38'>Sie haben </text><text font='gt_pressura' weight='regular' size='38'>tief gedrückt</text>",
  "app_bell_onboarding_info_deep_click_correction": "<text font='gt_pressura' weight='light' size='38'>Seien Sie sanfter,<br></br>versuchen </text><text font='gt_pressura' weight='regular' size='38'>Sie diesmal </text><text font='gt_pressura' weight='light' size='38'>leicht klicken</text>",
  "app_bell_onboarding_info_rotate": "<text weight='regular' size='38'>Drehen </text><text weight='light' size='38'> um auszuwählen</text>",
  "app_bell_onboarding_info_light_click": "<text weight='regular' size='38'>Leichter Klick </text><text weight='light' size='38'>um fortzufahren</text>",
  "app_bell_onboarding_info_deep_click_warning": "<text weight='light' size='38'>Sie haben </text><text weight='regular' size='38'>tief gedrückt</text>",
  "app_bell_onboarding_info_deep_click_correction": "<text weight='light' size='38'>Seien Sie sanfter,<br></br>versuchen </text><text weight='regular' size='38'>Sie diesmal </text><text weight='light' size='38'>leicht klicken</text>",
  "app_bell_settings_home_view": "Startansicht",
  "app_bell_settings_alarm_settings": "Alarmeinstellungen",
  "app_bell_settings_alarm_settings_title": "Alarmeinstellungen",

M image/assets/lang/English.json => image/assets/lang/English.json +12 -12
@@ 236,8 236,8 @@
  "sim_card_pin_enabled": "SIM card pin enabled",
  "sim_card_cant_connect": "<text>Cannot connect to <token>$SIM</token> card.<br></br>Please insert card.</text>",
  "sim_card_not_ready": "<text>Waiting for Modem to start.<br></br>This may take a moment.</text>",
  "app_desktop_press_to_unlock": "<text font='gt_pressura' size='27'>Press <b>Unlock</b> and then <b>#</b></text>",
  "app_desktop_press_to_complete_unlock": "<text font='gt_pressura' size='27'>Press <b>#</b> to unlock</text>",
  "app_desktop_press_to_unlock": "<text size='27'>Press <b>Unlock</b> and then <b>#</b></text>",
  "app_desktop_press_to_complete_unlock": "<text size='27'>Press <b>#</b> to unlock</text>",
  "app_desktop_unread_messages": "<text>Unread <b>messages</b></text>",
  "app_desktop_missed_calls": "<text>Missed <b>calls</b></text>",
  "app_desktop_alarm_snooze": "<text>Snooze</text>",


@@ 305,7 305,7 @@
  "app_messages_thread_not_sent": "Not sent: ",
  "app_messages_thread_you": "You: ",
  "app_onboarding_title": "Onboarding",
  "app_onboarding_start_configuration": "<text font='gt_pressura' weight='light' size='46'><p>Hello!</p></text><br></br><text font='gt_pressura' weight='regular' size='27'>Let's configure your Mudita Pure.</text>",
  "app_onboarding_start_configuration": "<text weight='light' size='46'><p>Hello!</p></text><br></br><text weight='regular' size='27'>Let's configure your Mudita Pure.</text>",
  "app_onboarding_eula_license": "License agreement (EULA)",
  "app_onboarding_select_sim": "Choose active SIM",
  "app_onboarding_select_sim_description": "<text>Only one SIM can be active at a time.<br></br>You can choose it now and switch in<br></br>the Settings whenever needed.</text>",


@@ 316,7 316,7 @@
  "app_onboarding_skip_confirm": "<text>SIM setup is required for network connection. Skip the setup anyway? </text>",
  "app_onboarding_configuration_successful": "<text>Your Mudita Pure<br></br>is ready to use.</text>",
  "app_onboarding_no_configuration": "<text>Your Mudita Pure has not been<br></br>configured. You can go to<br></br>Settings to set it up.</text>",
  "app_onboarding_update_info": "<text>The current version of MuditaOS is<br></br><token>$VERSION</token><br></br> Updates with new features and fixes appear often.<br></br>To update your Phone please <br></br> visit: </text><text font='gt_pressura' weight='bold' size='27'>www.mudita.com/updateos</text><br></br><text>and follow the instructions.</text>",
  "app_onboarding_update_info": "<text>The current version of MuditaOS is<br></br><token>$VERSION</token><br></br> Updates with new features and fixes appear often.<br></br>To update your Phone please <br></br> visit: </text><text weight='bold' size='27'>www.mudita.com/updateos</text><br></br><text>and follow the instructions.</text>",
  "app_settings_title_main": "Settings",
  "app_settings_advanced": "Advanced",
  "app_settings_bt": "Bluetooth",


@@ 326,10 326,10 @@
  "app_settings_bluetooth_main": "Bluetooth",
  "app_settings_bluetooth_phone_name": "Phone name",
  "app_settings_bluetooth_phone_visibility": "Phone visibility",
  "app_settings_bluetooth_init_error_message": "<text font='gt_pressura' weight='regular' size='27'>Bluetooth initialization process has failed.</text>",
  "app_settings_bluetooth_pairing_error_message": "<text font='gt_pressura' weight='regular' size='27'>Pairing process has failed.<br></br>Check the device and </text> <text font='gt_pressura' weight='bold' size='27'>TRY AGAIN.</text>",
  "app_settings_bluetooth_unpairing_error_message": "<text font='gt_pressura' weight='regular' size='27'>Unpairing process has failed.<br></br>Check the device and </text> <text font='gt_pressura' weight='bold' size='27'>TRY AGAIN.</text>",
  "app_settings_bluetooth_connecting_error_message": "<text font='gt_pressura' weight='regular' size='27'>Connection process has failed.<br></br>Check the device and </text> <text font='gt_pressura' weight='bold' size='27'>TRY AGAIN.</text>",
  "app_settings_bluetooth_init_error_message": "<text weight='regular' size='27'>Bluetooth initialization process has failed.</text>",
  "app_settings_bluetooth_pairing_error_message": "<text weight='regular' size='27'>Pairing process has failed.<br></br>Check the device and </text> <text weight='bold' size='27'>TRY AGAIN.</text>",
  "app_settings_bluetooth_unpairing_error_message": "<text weight='regular' size='27'>Unpairing process has failed.<br></br>Check the device and </text> <text weight='bold' size='27'>TRY AGAIN.</text>",
  "app_settings_bluetooth_connecting_error_message": "<text weight='regular' size='27'>Connection process has failed.<br></br>Check the device and </text> <text weight='bold' size='27'>TRY AGAIN.</text>",
  "app_settings_net": "Network",
  "app_settings_disp_key": "Display and keypad",
  "app_settings_display_display_light": "Display light",


@@ 617,10 617,10 @@
  "app_bell_meditation_put_down_and_wait": "<text>Put down Mudita Harmony<br>and wait for the gong</text>",
  "app_bell_meditation_thank_you_for_session": "<text>Thank you for<br>the session</text>",
  "app_bell_onboarding_welcome_message": "<text>Mudita Harmony<br/>is switched OFF</text>",
  "app_bell_onboarding_info_rotate": "<text font='gt_pressura' weight='regular' size='38'>Rotate </text><text font='gt_pressura' weight='light' size='38'>to select</text>",
  "app_bell_onboarding_info_light_click": "<text font='gt_pressura' weight='regular' size='38'>Light click </text><text font='gt_pressura' weight='light' size='38'>to continue</text>",
  "app_bell_onboarding_info_deep_click_warning": "<text font='gt_pressura' weight='light' size='38'>You've </text><text font='gt_pressura' weight='regular' size='38'>deep pressed</text>",
  "app_bell_onboarding_info_deep_click_correction": "<text font='gt_pressura' weight='light' size='38'>Be more gentle,<br></br>try </text><text font='gt_pressura' weight='regular' size='38'>light click </text><text font='gt_pressura' weight='light' size='38'>this time</text>",
  "app_bell_onboarding_info_rotate": "<text weight='regular' size='38'>Rotate </text><text weight='light' size='38'>to select</text>",
  "app_bell_onboarding_info_light_click": "<text weight='regular' size='38'>Light click </text><text weight='light' size='38'>to continue</text>",
  "app_bell_onboarding_info_deep_click_warning": "<text weight='light' size='38'>You've </text><text weight='regular' size='38'>deep pressed</text>",
  "app_bell_onboarding_info_deep_click_correction": "<text weight='light' size='38'>Be more gentle,<br></br>try </text><text weight='regular' size='38'>light click </text><text weight='light' size='38'>this time</text>",
  "app_bell_onboarding_welcome": "Welcome",
  "app_bell_settings_advanced": "Advanced",
  "app_bell_settings_time_units": "Time",

M image/assets/lang/Espanol.json => image/assets/lang/Espanol.json +12 -12
@@ 270,8 270,8 @@
  "sim_card_pin_enabled": "PIN de la tarjeta SIM activado",
  "sim_card_cant_connect": "<text>No se puede conectar con la tarjeta <token>$SIM</token>.<br></br>Inserta la tarjeta.</text>",
  "sim_card_not_ready": "<text>Esperando a que el módem se encienda.<br></br>Esto puede tardar unos instantes.</text>",
  "app_desktop_press_to_unlock": "<text font='gt_pressura' size='27'>Pulsa <b>Desbloquear</b> y después <b>#</b></text>",
  "app_desktop_press_to_complete_unlock": "<text font='gt_pressura' size='27'>Presione <b>#</b> para desbloquear</text>",
  "app_desktop_press_to_unlock": "<text size='27'>Pulsa <b>Desbloquear</b> y después <b>#</b></text>",
  "app_desktop_press_to_complete_unlock": "<text size='27'>Presione <b>#</b> para desbloquear</text>",
  "app_desktop_unread_messages": "<text><b>Mensajes</b> no leídos</text>",
  "app_desktop_missed_calls": "<text><b>Llamadas</b> perdidas</text>",
  "app_desktop_menu_phone": "LLAMADAS",


@@ 335,7 335,7 @@
  "app_messages_thread_not_sent": "No enviado: ",
  "app_messages_thread_you": "Tú: ",
  "app_onboarding_title": "Primeros pasos",
  "app_onboarding_start_configuration": "<text font='gt_pressura' weight='light' size='46'><p>¡Hola!</p></text><br></br><text font='gt_pressura' weight='regular' size='27'>Vamos a configurar tu Mudita Pure.</text>",
  "app_onboarding_start_configuration": "<text weight='light' size='46'><p>¡Hola!</p></text><br></br><text weight='regular' size='27'>Vamos a configurar tu Mudita Pure.</text>",
  "app_onboarding_eula_license": "Acuerdo de licencia (ALUF)",
  "app_onboarding_select_sim": "Elegir SIM activa",
  "app_onboarding_select_sim_description": "<text>Solo puede haber una SIM activa a la vez.<br></br>Puedes elegirla ahora y cambiarla<br></br>en Ajustes siempre que quieras.</text>",


@@ 346,7 346,7 @@
  "app_onboarding_skip_confirm": "<text>Es necesario configurar la SIM para conectarse a la red. ¿Omitir la configuración? </text>",
  "app_onboarding_configuration_successful": "<text>Tu Mudita Pure<br></br>ya está listo.</text>",
  "app_onboarding_no_configuration": "<text>Tu Mudita Pure no está<br></br>configurado. Ve a<br></br>Ajustes para configurarlo.</text>",
  "app_onboarding_update_info": "<text>La versión actual del SO de Mudita es la<token>$VERSION</token><br></br>Las frecuentes actualizaciones incluyen nuevas funciones y correcciones.<br></br>Para actualizar tu teléfono,<br></br>visita: </text><text font='gt_pressura' weight='bold' size='27'>www.mudita.com/updateos</text><br></br><text>y sigue las instrucciones.</text>",
  "app_onboarding_update_info": "<text>La versión actual del SO de Mudita es la<token>$VERSION</token><br></br>Las frecuentes actualizaciones incluyen nuevas funciones y correcciones.<br></br>Para actualizar tu teléfono,<br></br>visita: </text><text weight='bold' size='27'>www.mudita.com/updateos</text><br></br><text>y sigue las instrucciones.</text>",
  "app_settings_title_main": "Ajustes",
  "app_settings_advanced": "Avanzados",
  "app_settings_bt": "Bluetooth",


@@ 357,10 357,10 @@
  "app_settings_bluetooth_phone_name": "Nombre del teléfono",
  "app_settings_bluetooth_phone_visibility": "Visibilidad del teléfono",
  "app_settings_bluetooth_enter_passkey": "Introducir clave de paso:",
  "app_settings_bluetooth_init_error_message": "<text font='gt_pressura' weight='regular' size='27'>Error en el proceso de inicialización de Bluetooth.</text>",
  "app_settings_bluetooth_pairing_error_message": "<text font='gt_pressura' weight='regular' size='27'>Error en el proceso de emparejamiento.<br></br>Comprueba el dispositivo e </text> <text font='gt_pressura' weight='bold' size='27'>INTÉNTALO DE NUEVO.</text>",
  "app_settings_bluetooth_unpairing_error_message": "<text font='gt_pressura' weight='regular' size='27'>Error en el proceso de desemparejamiento.<br></br>Comprueba el dispositivo e </text> <text font='gt_pressura' weight='bold' size='27'>INTÉNTALO DE NUEVO.</text>",
  "app_settings_bluetooth_connecting_error_message": "<text font='gt_pressura' weight='regular' size='27'>Error en el proceso de conexión.<br></br>Comprueba el dispositivo e </text> <text font='gt_pressura' weight='bold' size='27'>INTÉNTALO DE NUEVO.</text>",
  "app_settings_bluetooth_init_error_message": "<text weight='regular' size='27'>Error en el proceso de inicialización de Bluetooth.</text>",
  "app_settings_bluetooth_pairing_error_message": "<text weight='regular' size='27'>Error en el proceso de emparejamiento.<br></br>Comprueba el dispositivo e </text> <text weight='bold' size='27'>INTÉNTALO DE NUEVO.</text>",
  "app_settings_bluetooth_unpairing_error_message": "<text weight='regular' size='27'>Error en el proceso de desemparejamiento.<br></br>Comprueba el dispositivo e </text> <text weight='bold' size='27'>INTÉNTALO DE NUEVO.</text>",
  "app_settings_bluetooth_connecting_error_message": "<text weight='regular' size='27'>Error en el proceso de conexión.<br></br>Comprueba el dispositivo e </text> <text weight='bold' size='27'>INTÉNTALO DE NUEVO.</text>",
  "app_settings_net": "Red",
  "app_settings_disp_key": "Pantalla y teclado numérico",
  "app_settings_display_display_light": "Luz de pantalla",


@@ 620,10 620,10 @@
  "app_bell_settings_time_units_time_message": "Hora",
  "app_bell_settings_temp_scale": "Escala de temperatura",
  "app_bell_onboarding_welcome_message": "<text>Mudita Harmony<br/>está apagado</text>",
  "app_bell_onboarding_info_rotate": "<text font='gt_pressura' weight='regular' size='38'>Girar </text><text font='gt_pressura' weight='light' size='38'> para seleccionar</text>",
  "app_bell_onboarding_info_light_click": "<text font='gt_pressura' weight='regular' size='38'>Click ligeramente </text><text font='gt_pressura' weight='light' size='38'>para continuar</text>",
  "app_bell_onboarding_info_deep_click_warning": "<text font='gt_pressura' weight='light' size='38'>Has presionado </text><text font='gt_pressura' weight='regular' size='38'>muy profundo</text>",
  "app_bell_onboarding_info_deep_click_correction": "<text font='gt_pressura' weight='light' size='38'>Sé más suave, <br></br>intenta </text><text font='gt_pressura' weight='regular' size='38'>presionar ligeramente </text><text font='gt_pressura' weight='light' size='38'>esta vez</text>",
  "app_bell_onboarding_info_rotate": "<text weight='regular' size='38'>Girar </text><text weight='light' size='38'> para seleccionar</text>",
  "app_bell_onboarding_info_light_click": "<text weight='regular' size='38'>Click ligeramente </text><text weight='light' size='38'>para continuar</text>",
  "app_bell_onboarding_info_deep_click_warning": "<text weight='light' size='38'>Has presionado </text><text weight='regular' size='38'>muy profundo</text>",
  "app_bell_onboarding_info_deep_click_correction": "<text weight='light' size='38'>Sé más suave, <br></br>intenta </text><text weight='regular' size='38'>presionar ligeramente </text><text weight='light' size='38'>esta vez</text>",
  "app_bell_onboarding_welcome": "Bienvenido",
  "app_bellmain_home_screen_bottom_desc_dp": "Presionar a fondo para activar",
  "app_bellmain_alarm": "Alarma",

M image/assets/lang/Francais.json => image/assets/lang/Francais.json +12 -12
@@ 239,8 239,8 @@
  "sim_card_pin_enabled": "SIM card pin enabled",
  "sim_card_cant_connect": "<text>Cannot connect to <token>$SIM</token> card.<br></br>Please insert card.</text>",
  "sim_card_not_ready": "<text>Waiting for Modem to start.<br></br>This may take a moment.</text>",
  "app_desktop_press_to_unlock": "<text font='gt_pressura' size='27'>Press <b>Unlock</b> and then <b>#</b></text>",
  "app_desktop_press_to_complete_unlock": "<text font='gt_pressura' size='27'>Press <b>#</b> to unlock</text>",
  "app_desktop_press_to_unlock": "<text size='27'>Press <b>Unlock</b> and then <b>#</b></text>",
  "app_desktop_press_to_complete_unlock": "<text size='27'>Press <b>#</b> to unlock</text>",
  "app_desktop_unread_messages": "<text><b>Messages</b> non lus</text>",
  "app_desktop_missed_calls": "<text><b>Appels</b> manqués</text>",
  "app_desktop_menu_phone": "APPELS",


@@ 304,7 304,7 @@
  "app_messages_thread_not_sent": "Pas envoyé: ",
  "app_messages_thread_you": "Vous: ",
  "app_onboarding_title": "Onboarding",
  "app_onboarding_start_configuration": "<text font='gt_pressura' weight='light' size='46'><p>Bonjour !</p></text><br></br><text font='gt_pressura' weight='regular' size='27'>Configurons votre Mudita Pure.</text>",
  "app_onboarding_start_configuration": "<text weight='light' size='46'><p>Bonjour !</p></text><br></br><text weight='regular' size='27'>Configurons votre Mudita Pure.</text>",
  "app_onboarding_eula_license": "License agreement (EULA)",
  "app_onboarding_select_sim": "Choisissez la carte SIM active",
  "app_onboarding_select_sim_description": "<text>Une seule carte SIM peut être active à la fois.<br></br>Vous pouvez la choisir maintenant et activer<br></br>les paramètres à tout moment.</text>",


@@ 315,7 315,7 @@
  "app_onboarding_skip_confirm": "<text>La configuration de la carte SIM est requise pour la connexion réseau. Ignorer la configuration quand même? </text>",
  "app_onboarding_configuration_successful": "<text>Vous pouvez maintenant<br></br>utiliser votre Mudita Pure.</text>",
  "app_onboarding_no_configuration": "<text>Votre Mudita Pure n'a pas été<br></br>configuré. Vous pouvez le configurer<br></br>a partir des Options.</text>",
  "app_onboarding_update_info": "<text>La version actuelle de MuditaOS est<br></br><token>$VERSION</token>.<br></br>Des mises à jour avec de nouvelles fonctionnalités et correctifs apparaissent souvent. Pour mettre à jour votre téléphone, visite:<br></br></text><text font='gt_pressura' weight='bold' size='27'>www.mudita.com/updateos</text><br></br><text>et suivez les instructions.</text>",
  "app_onboarding_update_info": "<text>La version actuelle de MuditaOS est<br></br><token>$VERSION</token>.<br></br>Des mises à jour avec de nouvelles fonctionnalités et correctifs apparaissent souvent. Pour mettre à jour votre téléphone, visite:<br></br></text><text weight='bold' size='27'>www.mudita.com/updateos</text><br></br><text>et suivez les instructions.</text>",
  "app_settings_title_main": "Options",
  "app_settings_advanced": "Avancées",
  "app_settings_bt": "Bluetooth",


@@ 326,10 326,10 @@
  "app_settings_bluetooth_phone_name": "Nom du téléphone",
  "app_settings_bluetooth_phone_visibility": "Visibilité du téléphone",
  "app_settings_bluetooth_enter_passkey": "Entrez le code d'accès:",
  "app_settings_bluetooth_init_error_message": "<text font='gt_pressura' weight='regular' size='27'>Bluetooth initialization process has failed.</text>",
  "app_settings_bluetooth_pairing_error_message": "<text font='gt_pressura' weight='regular' size='27'>Pairing process has failed.<br></br>Check the device and </text> <text font='gt_pressura' weight='bold' size='27'>TRY AGAIN.</text>",
  "app_settings_bluetooth_unpairing_error_message": "<text font='gt_pressura' weight='regular' size='27'>Unpairing process has failed.<br></br>Check the device and </text> <text font='gt_pressura' weight='bold' size='27'>TRY AGAIN.</text>",
  "app_settings_bluetooth_connecting_error_message": "<text font='gt_pressura' weight='regular' size='27'>Connection process has failed.<br></br>Check the device and </text> <text font='gt_pressura' weight='bold' size='27'>TRY AGAIN.</text>",
  "app_settings_bluetooth_init_error_message": "<text weight='regular' size='27'>Bluetooth initialization process has failed.</text>",
  "app_settings_bluetooth_pairing_error_message": "<text weight='regular' size='27'>Pairing process has failed.<br></br>Check the device and </text> <text weight='bold' size='27'>TRY AGAIN.</text>",
  "app_settings_bluetooth_unpairing_error_message": "<text weight='regular' size='27'>Unpairing process has failed.<br></br>Check the device and </text> <text weight='bold' size='27'>TRY AGAIN.</text>",
  "app_settings_bluetooth_connecting_error_message": "<text weight='regular' size='27'>Connection process has failed.<br></br>Check the device and </text> <text weight='bold' size='27'>TRY AGAIN.</text>",
  "app_settings_net": "Réseau",
  "app_settings_disp_key": "Affichage et clavier",
  "app_settings_display_display_light": "Lumière d'affichage",


@@ 594,10 594,10 @@
  "app_bell_settings_time_units_time_message": "Heure",
  "app_bell_settings_temp_scale": "Échelle de température",
  "app_bell_onboarding_welcome_message": "<text>Mudita Harmony<br/>est désactivé</text>",
  "app_bell_onboarding_info_rotate": "<text font='gt_pressura' weight='regular' size='38'>Tourner </text><text font='gt_pressura' weight='light' size='38'>pour sélectionner</text>",
  "app_bell_onboarding_info_light_click": "<text font='gt_pressura' weight='regular' size='38'>Cliquer doucement </text><text font='gt_pressura' weight='light' size='38'>pour continuer</text>",
  "app_bell_onboarding_info_deep_click_warning": "<text font='gt_pressura' weight='light' size='38'>Vous avez </text><text font='gt_pressura' weight='regular' size='38'>appuyé fort</text>",
  "app_bell_onboarding_info_deep_click_correction": "<text font='gt_pressura' weight='light' size='38'>Soyez plus doux, <br></br>essayez </text><text font='gt_pressura' weight='regular' size='38'>de cliquer plus </text><text font='gt_pressura' weight='light' size='38'>légèrement cette fois</text>",
  "app_bell_onboarding_info_rotate": "<text weight='regular' size='38'>Tourner </text><text weight='light' size='38'>pour sélectionner</text>",
  "app_bell_onboarding_info_light_click": "<text weight='regular' size='38'>Cliquer doucement </text><text weight='light' size='38'>pour continuer</text>",
  "app_bell_onboarding_info_deep_click_warning": "<text weight='light' size='38'>Vous avez </text><text weight='regular' size='38'>appuyé fort</text>",
  "app_bell_onboarding_info_deep_click_correction": "<text weight='light' size='38'>Soyez plus doux, <br></br>essayez </text><text weight='regular' size='38'>de cliquer plus </text><text weight='light' size='38'>légèrement cette fois</text>",
  "app_bell_onboarding_welcome": "Bienvenu",
  "app_bellmain_home_screen_bottom_desc_dp": "Appuyer fort pour activer",
  "app_bellmain_alarm": "Alarme",

M image/assets/lang/Polski.json => image/assets/lang/Polski.json +12 -12
@@ 273,8 273,8 @@
  "sim_card_pin_enabled": "Kod PIN karty SIM włączony",
  "sim_card_cant_connect": "<text>Nie można połączyć się z kartą <token>$SIM</token>.<br></br>Włóż kartę.</text>",
  "sim_card_not_ready": "<text>Oczekiwanie na uruchomienie modemu.<br></br>To może chwilę potrwać.</text>",
  "app_desktop_press_to_unlock": "<text font='gt_pressura' size='27'>Wciśnij <b>Odblokuj</b>, a następnie <b>#</b></text>",
  "app_desktop_press_to_complete_unlock": "<text font='gt_pressura' size='27'>Naciśnij <b>#</b> by odblokować</text>",
  "app_desktop_press_to_unlock": "<text size='27'>Wciśnij <b>Odblokuj</b>, a następnie <b>#</b></text>",
  "app_desktop_press_to_complete_unlock": "<text size='27'>Naciśnij <b>#</b> by odblokować</text>",
  "app_desktop_unread_messages": "<text>Nowe <b>wiadomości</b></text>",
  "app_desktop_missed_calls": "<text>Nieodebrane <b>połączenia</b></text>",
  "app_desktop_menu_phone": "POŁĄCZENIA",


@@ 338,7 338,7 @@
  "app_messages_thread_not_sent": "Niewysłane: ",
  "app_messages_thread_you": "Ty: ",
  "app_onboarding_title": "Wprowadzenie",
  "app_onboarding_start_configuration": "<text font='gt_pressura' weight='light' size='46'><p>Witaj!</p></text><br></br><text font='gt_pressura' weight='regular' size='27'>Skonfigurujmy twój telefon <br></br> Mudita Pure.</text>",
  "app_onboarding_start_configuration": "<text weight='light' size='46'><p>Witaj!</p></text><br></br><text weight='regular' size='27'>Skonfigurujmy twój telefon <br></br> Mudita Pure.</text>",
  "app_onboarding_eula_license": "Umowa licencyjna (EULA)",
  "app_onboarding_select_sim": "Wybierz aktywną kartę SIM",
  "app_onboarding_select_sim_description": "<text>Tylko jedna karta SIM może być jednocześnie aktywna.<br></br>Możesz ją wybrać teraz i zmienić<br></br>w razie potrzeby w Ustawieniach.</text>",


@@ 349,7 349,7 @@
  "app_onboarding_skip_confirm": "<text>Do połączenia z siecią konieczna jest konfiguracja karty SIM. Pominąć konfigurację mimo to? </text>",
  "app_onboarding_configuration_successful": "<text>Twój telefon Mudita Pure<br></br>jest gotowy do użycia.</text>",
  "app_onboarding_no_configuration": "<text>Twój telefon Mudita Pure nie został<br></br>skonfigurowany. Możesz przejść do<br></br>Ustawień, by go skonfigurować.</text>",
  "app_onboarding_update_info": "<text>Aktualna wersja MuditaOS to<br></br><token>$VERSION</token>.<br></br>Aktualizacje z nowymi funkcjami i poprawkami pojawiają się regularnie.<br></br>Aby zaktualizować telefon, odwiedź stronę:<br></br></text><text font='gt_pressura' weight='bold' size='27'>www.mudita.com/updateos</text><br></br><text>i postępuj zgodnie ze wskazówkami.</text>",
  "app_onboarding_update_info": "<text>Aktualna wersja MuditaOS to<br></br><token>$VERSION</token>.<br></br>Aktualizacje z nowymi funkcjami i poprawkami pojawiają się regularnie.<br></br>Aby zaktualizować telefon, odwiedź stronę:<br></br></text><text weight='bold' size='27'>www.mudita.com/updateos</text><br></br><text>i postępuj zgodnie ze wskazówkami.</text>",
  "app_settings_title_main": "Ustawienia",
  "app_settings_advanced": "Zaawansowane",
  "app_settings_bt": "Bluetooth",


@@ 360,10 360,10 @@
  "app_settings_bluetooth_phone_name": "Nazwa telefonu",
  "app_settings_bluetooth_phone_visibility": "Widoczność telefonu",
  "app_settings_bluetooth_enter_passkey": "Wprowadź klucz dostępu:",
  "app_settings_bluetooth_init_error_message": "<text font='gt_pressura' weight='regular' size='27'>Proces inicjalizacji Bluetooth zakończony niepowodzeniem.</text>",
  "app_settings_bluetooth_pairing_error_message": "<text font='gt_pressura' weight='regular' size='27'>Proces parowania zakończony niepowodzeniem.<br></br>Sprawdź urządzenie i </text><text font='gt_pressura' weight='bold' size='27'>SPRÓBUJ PONOWNIE.</text>",
  "app_settings_bluetooth_unpairing_error_message": "<text font='gt_pressura' weight='regular' size='27'>Proces odłączania zakończony niepowodzeniem.<br></br>Sprawdź urządzenie i </text><text font='gt_pressura' weight='bold' size='27'>SPRÓBUJ PONOWNIE.</text>",
  "app_settings_bluetooth_connecting_error_message": "<text font='gt_pressura' weight='regular' size='27'>Proces łączenia zakończony niepowodzeniem.<br></br>Sprawdź urządzenie i </text><text font='gt_pressura' weight='bold' size='27'>SPRÓBUJ PONOWNIE.</text>",
  "app_settings_bluetooth_init_error_message": "<text weight='regular' size='27'>Proces inicjalizacji Bluetooth zakończony niepowodzeniem.</text>",
  "app_settings_bluetooth_pairing_error_message": "<text weight='regular' size='27'>Proces parowania zakończony niepowodzeniem.<br></br>Sprawdź urządzenie i </text><text weight='bold' size='27'>SPRÓBUJ PONOWNIE.</text>",
  "app_settings_bluetooth_unpairing_error_message": "<text weight='regular' size='27'>Proces odłączania zakończony niepowodzeniem.<br></br>Sprawdź urządzenie i </text><text weight='bold' size='27'>SPRÓBUJ PONOWNIE.</text>",
  "app_settings_bluetooth_connecting_error_message": "<text weight='regular' size='27'>Proces łączenia zakończony niepowodzeniem.<br></br>Sprawdź urządzenie i </text><text weight='bold' size='27'>SPRÓBUJ PONOWNIE.</text>",
  "app_settings_net": "Sieć",
  "app_settings_apps_alarm_clock_manual_volume": "Ręczna zmiana głośności",
  "app_settings_disp_key": "Ekran i klawiatura",


@@ 629,10 629,10 @@
  "app_bellmain_settings": "Ustawienia",
  "app_bellmain_main_window_title": "Mudita Harmony",
  "app_bell_onboarding_welcome_message": "<text>Mudita Harmony<br/>jest wyłączony</text>",
  "app_bell_onboarding_info_rotate": "<text font='gt_pressura' weight='regular' size='38'>Obróć, </text><text font='gt_pressura' weight='light' size='38'>aby wybrać</text>",
  "app_bell_onboarding_info_light_click": "<text font='gt_pressura' weight='regular' size='38'>Kliknij lekko, </text><text font='gt_pressura' weight='light' size='38'>aby kontynuować</text>",
  "app_bell_onboarding_info_deep_click_warning": "<text font='gt_pressura' weight='light' size='38'>Głęboko </text><text font='gt_pressura' weight='regular' size='38'>wciśnięty</text>",
  "app_bell_onboarding_info_deep_click_correction": "<text font='gt_pressura' weight='light' size='38'>Bądź bardziej delikatny,<br></br>spróbuj </text><text font='gt_pressura' weight='regular' size='38'>tym razem<br></br></text><text font='gt_pressura' weight='light' size='38'>lekko kliknąć</text>",
  "app_bell_onboarding_info_rotate": "<text weight='regular' size='38'>Obróć, </text><text weight='light' size='38'>aby wybrać</text>",
  "app_bell_onboarding_info_light_click": "<text weight='regular' size='38'>Kliknij lekko, </text><text weight='light' size='38'>aby kontynuować</text>",
  "app_bell_onboarding_info_deep_click_warning": "<text weight='light' size='38'>Głęboko </text><text weight='regular' size='38'>wciśnięty</text>",
  "app_bell_onboarding_info_deep_click_correction": "<text weight='light' size='38'>Bądź bardziej delikatny,<br></br>spróbuj </text><text weight='regular' size='38'>tym razem<br></br></text><text weight='light' size='38'>lekko kliknąć</text>",
  "app_bell_onboarding_welcome": "Witamy",
  "app_bell_settings_advanced": "Zaawansowane",
  "app_bell_settings_time_units": "Czas",

M image/assets/lang/Svenska.json => image/assets/lang/Svenska.json +3 -3
@@ 217,8 217,8 @@
  "sim_setup_wrong_puk": "<text>Fel PUK-kod.<br></br>Du har <token>$ATTEMPTS</token> försök kvar.</text>",
  "sim_setup_wrong_puk_last_attempt": "<text>Fel PUK-kod.<br></br>Du har 1 försök kvar.</text>",
  "sim_setup_wrong_puk_last_attempt_warning": "<text>Om koden är fel den här gången<br></br>kommer SIM-kortet låsas och du kommer<br></br>behöva kontakta operatören.</text>",
  "app_desktop_press_to_unlock": "<text font='gt_pressura' size='27'>Tryck <b>Lås upp</b> följt av <b>#</b></text>",
  "app_desktop_press_to_complete_unlock": "<text font='gt_pressura' size='27'>Tryck på <b>#</b> för att låsa upp</text>",
  "app_desktop_press_to_unlock": "<text size='27'>Tryck <b>Lås upp</b> följt av <b>#</b></text>",
  "app_desktop_press_to_complete_unlock": "<text size='27'>Tryck på <b>#</b> för att låsa upp</text>",
  "app_desktop_unread_messages": "<text>Olästa <b>meddelanden</b></text>",
  "app_desktop_missed_calls": "<text>Missade <b>samtal</b></text>",
  "app_desktop_menu_phone": "SAMTAL",


@@ 281,7 281,7 @@
  "app_onboarding_skip_confirm": "<text> SIM-installation krävs för nätverksanslutning. Hoppar du ändå över installationen? </text>",
  "app_onboarding_configuration_successful": "<text> Din Mudita Pure <br> </br> är klar att använda. </text>",
  "app_onboarding_no_configuration": "<text> Din Mudita Pure har inte konfigurerats. </br> Du kan gå till <br> </br> Inställningar för att konfigurera den. </text>",
  "app_onboarding_update_info": "<text> Den nuvarande versionen av MuditaOS är <br> </br> <token> $ VERSION </token>. Uppdateringar med nya <br> </br> funktioner och korrigeringar visas ofta. <br> </br> För att uppdatera din telefon vänligen <br> </br> besök: </text> <text font = 'gt_pressura' weight = 'bold' size = '27 '> www.mudita.com/updateos </text > <br> </br> <text> och följ instruktionerna. </text> ",
  "app_onboarding_update_info": "<text> Den nuvarande versionen av MuditaOS är <br> </br> <token> $ VERSION </token>. Uppdateringar med nya <br> </br> funktioner och korrigeringar visas ofta. <br> </br> För att uppdatera din telefon vänligen <br> </br> besök: </text> <text weight = 'bold' size = '27 '> www.mudita.com/updateos </text > <br> </br> <text> och följ instruktionerna. </text> ",
  "app_settings_title_main": "Inställningar",
  "app_settings_advanced": "Avancerad",
  "app_settings_bt": "Bluetooth",

M image/assets/licenses/Deutsch/eula.txt => image/assets/licenses/Deutsch/eula.txt +1 -1
@@ 1,1 1,1 @@
<text font='gt_pressura' weight='bold' size='32'><b>Mudita Pure Software-Lizenzvereinbarung</b></text><br></br><text font='gt_pressura' weight='regular' size='27'>ANMERKUNG: DURCH DIE VERWENDUNG VON MUDITA PURE AKZEPTIERT DER BENUTZER DIE FOLGENDE SOFTWARE-LIZENZVEREINBARUNG. DAS GERÄT KANN NUR ORDNUNGSGEMÄSS VERWENDET WERDEN, WENN DIE LIZENZ AKZEPTIERT WIRD.<br></br><br></br>DAHER SOLLTE DER BENUTZER DIE LIZENZ GRÜNDLICH LESEN, BEVOR ER MUDITA PURE VERWENDET ODER SOFTWARE-UPDATES HERUNTERLÄDT.<br></br><br></br>WENN DER BENUTZER DEN BEDINGUNGEN DIESER LIZENZ NICHT ZUSTIMMT, DÜRFEN DIE SOFTWARE ODER HERUNTERLADBARE UPDATES NICHT VERWENDET WERDEN.<br></br><br></br>Begriffsbestimmungen:<br></br>Software - Mudita Pure-Systemsoftware, Schnittstellen und deren Inhalt (einschließlich Schriftarten, Sounds, Dokumente und alle anderen auf dem Gerät gespeicherten Voreinstellungen);<br></br>Update - jegliche Software-Aktualisierung, einschließlich der Einführung zusätzlicher oder geänderter Funktionen oder anderer Software;<br></br>Mudita - Mudita sp. z o.o. [GmbH] mit Sitz in Warschau (Adresse: ul. Jana Czeczota 6, 02-607 Warschau, Polen) eingetragen im polnischen Handelsregister des nationalen Gerichtsregisters unter der KRS-Nummer: 0000467620, Ust.-Id.Nr.: 5252558282, Grundkapital in Höhe von 21.000,00 PLN;<br></br>Benutzer - jegliche Person, die rechtmäßig Eigentümer eines Mudita Pure-Geräts geworden ist, um es zu verwenden.<br></br><br></br>Lizenzbedingungen:<br></br>    1. Nach Zustimmung des Benutzers zu diesen Lizenzbedingungen gewährt Mudita dem Mudita Pure-Benutzer eine Softwarelizenz. Beim Herunterladen eines Updates wird auch eine Lizenz für ein solches Update erteilt. Unter dieser Lizenz erhält der Benutzer ein nicht-exklusives, territorial uneingeschränktes Recht zur Nutzung der Software oder des Updates auf einem einzelnen MUDITA PURE-Gerät, um:<br></br>    a) die Software und das Update auf dem Mudita Pure-Gerät zu speichern;<br></br>    b) eine einzelne Kopie der Software und des Updates außerhalb des Mudita Pure-Geräts zu speichern;<br></br>    c) die Software oder das Update auf dem Mudita Pure-Gerät zu starten, anzuzeigen und zu verwenden.<br></br>    2. Jedes Mudita Pure-Gerät, das dem Benutzer rechtmäßig gehört, gewährt dem Benutzer eine Software-/Update-Lizenz, die ausschließlich für das individuelle Gerät aktiviert ist. Somit erhält der Benutzer mit jedem Mudita Pure-Gerät eine weitere separate Lizenz.<br></br>    3. Mudita genehmigt weder, dass die in dieser Lizenz enthaltene(n) Software und Updates gleichzeitig auf mehr als einem Mudita Pure-Gerät installiert werden, noch dass die Software und Updates über das Internet verteilt oder geteilt werden, um sie auf mehreren Geräten gleichzeitig zu nutzen, mit Ausnahme der in dieser Lizenz angegebenen Fälle.<br></br>    4. Die Lizenz gewährt dem Benutzer kein Recht, die Software und das Update für einen anderen Zweck als die Verwendung des Mudita Pure-Geräts gemäß den im Handbuch beschriebenen vorgesehenen Zwecken zu verwenden.<br></br>    5. Die Lizenz gilt für die Dauer des Besitzes des Mudita Pure-Geräts durch den Benutzer und läuft vorzeitig ab, falls der Benutzer gegen deren Nutzungsbedingungen verstößt.</text>
<text weight='bold' size='32'><b>Mudita Pure Software-Lizenzvereinbarung</b></text><br></br><text weight='regular' size='27'>ANMERKUNG: DURCH DIE VERWENDUNG VON MUDITA PURE AKZEPTIERT DER BENUTZER DIE FOLGENDE SOFTWARE-LIZENZVEREINBARUNG. DAS GERÄT KANN NUR ORDNUNGSGEMÄSS VERWENDET WERDEN, WENN DIE LIZENZ AKZEPTIERT WIRD.<br></br><br></br>DAHER SOLLTE DER BENUTZER DIE LIZENZ GRÜNDLICH LESEN, BEVOR ER MUDITA PURE VERWENDET ODER SOFTWARE-UPDATES HERUNTERLÄDT.<br></br><br></br>WENN DER BENUTZER DEN BEDINGUNGEN DIESER LIZENZ NICHT ZUSTIMMT, DÜRFEN DIE SOFTWARE ODER HERUNTERLADBARE UPDATES NICHT VERWENDET WERDEN.<br></br><br></br>Begriffsbestimmungen:<br></br>Software - Mudita Pure-Systemsoftware, Schnittstellen und deren Inhalt (einschließlich Schriftarten, Sounds, Dokumente und alle anderen auf dem Gerät gespeicherten Voreinstellungen);<br></br>Update - jegliche Software-Aktualisierung, einschließlich der Einführung zusätzlicher oder geänderter Funktionen oder anderer Software;<br></br>Mudita - Mudita sp. z o.o. [GmbH] mit Sitz in Warschau (Adresse: ul. Jana Czeczota 6, 02-607 Warschau, Polen) eingetragen im polnischen Handelsregister des nationalen Gerichtsregisters unter der KRS-Nummer: 0000467620, Ust.-Id.Nr.: 5252558282, Grundkapital in Höhe von 21.000,00 PLN;<br></br>Benutzer - jegliche Person, die rechtmäßig Eigentümer eines Mudita Pure-Geräts geworden ist, um es zu verwenden.<br></br><br></br>Lizenzbedingungen:<br></br>    1. Nach Zustimmung des Benutzers zu diesen Lizenzbedingungen gewährt Mudita dem Mudita Pure-Benutzer eine Softwarelizenz. Beim Herunterladen eines Updates wird auch eine Lizenz für ein solches Update erteilt. Unter dieser Lizenz erhält der Benutzer ein nicht-exklusives, territorial uneingeschränktes Recht zur Nutzung der Software oder des Updates auf einem einzelnen MUDITA PURE-Gerät, um:<br></br>    a) die Software und das Update auf dem Mudita Pure-Gerät zu speichern;<br></br>    b) eine einzelne Kopie der Software und des Updates außerhalb des Mudita Pure-Geräts zu speichern;<br></br>    c) die Software oder das Update auf dem Mudita Pure-Gerät zu starten, anzuzeigen und zu verwenden.<br></br>    2. Jedes Mudita Pure-Gerät, das dem Benutzer rechtmäßig gehört, gewährt dem Benutzer eine Software-/Update-Lizenz, die ausschließlich für das individuelle Gerät aktiviert ist. Somit erhält der Benutzer mit jedem Mudita Pure-Gerät eine weitere separate Lizenz.<br></br>    3. Mudita genehmigt weder, dass die in dieser Lizenz enthaltene(n) Software und Updates gleichzeitig auf mehr als einem Mudita Pure-Gerät installiert werden, noch dass die Software und Updates über das Internet verteilt oder geteilt werden, um sie auf mehreren Geräten gleichzeitig zu nutzen, mit Ausnahme der in dieser Lizenz angegebenen Fälle.<br></br>    4. Die Lizenz gewährt dem Benutzer kein Recht, die Software und das Update für einen anderen Zweck als die Verwendung des Mudita Pure-Geräts gemäß den im Handbuch beschriebenen vorgesehenen Zwecken zu verwenden.<br></br>    5. Die Lizenz gilt für die Dauer des Besitzes des Mudita Pure-Geräts durch den Benutzer und läuft vorzeitig ab, falls der Benutzer gegen deren Nutzungsbedingungen verstößt.</text>

M image/assets/licenses/English/eula.txt => image/assets/licenses/English/eula.txt +1 -1
@@ 1,1 1,1 @@
<text font='gt_pressura' weight='bold' size='32'><b>Mudita Pure software licence agreement</b></text><br></br><text font='gt_pressura' weight='regular' size='27'>NOTE: BY USING MUDITA PURE, THE USER ACCEPTS THE FOLLOWING SOFTWARE LICENCE AGREEMENT. THE DEVICE CANNOT BE USED PROPERLY UNLESS THE LICENCE IS ACCEPTED.<br></br><br></br>THEREFORE, BEFORE USING MUDITA PURE OR DOWNLOADING ANY SOFTWARE UPDATES, THE USER SHOULD READ THE LICENCE THOROUGHLY.<br></br><br></br>IF THE USER DOES NOT AGREE TO THE TERMS OF THIS LICENCE, THE SOFTWARE OR ANY DOWNLOADABLE UPDATES CANNOT BE USED.<br></br><br></br>Definitions:<br></br>Software - Mudita Pure system software, interfaces, and its contents (including fonts, sounds, documents, and all the other default data saved on the device);<br></br>Update - any update of the Software, including the introduction of any additional or changed features or other software;<br></br>Mudita - Mudita sp. z o.o. based in Warsaw (address: ul. Jana Czeczota 6, 02-607 Warsaw, Poland) registered in the Polish Register of Entrepreneurs of the National Court Register under KRS number: 0000467620, tax ID number: 5252558282, share capital of PLN 21,000.00;<br></br>User - any person who has lawfully become the owner of a Mudita Pure device in order to use it.<br></br><br></br>Licence terms and conditions:<br></br>    1. Upon the User's agreement to the terms and conditions of this licence, Mudita grants the Mudita Pure User a Software licence. Upon downloading an Update, a licence for such Update is granted as well. Under such licence, the User receives a non-exclusive, territorially unrestricted right to use the Software or the Update on a single MUDITA PURE device to:<br></br>    a) store the Software and the Update on the Mudita Pure device;<br></br>    b) store a single copy of the Software and the Update outside the Mudita Pure device;<br></br>    c) boot up, display, and use the Software or the Update on the Mudita Pure device.<br></br>    2. Every Mudita Pure device lawfully owned by the User grants the User a Software/Update licence coupled solely with the particular device. Thus, with every Mudita Pure owned, the User gains another separate licence.<br></br>    3. Mudita does not allow Software and Updates covered by this licence to be installed on more than one Mudita Pure device at the same time, nor does it allow distributing or sharing the Software and Updates over the internet to be used on multiple devices at the same time, except for the cases specified in this licence.<br></br>    4. The licence does not grant the User any right to use the Software and the Update for any other purpose than to use the Mudita Pure device in line with its intended functions detailed in the manual.<br></br>    5. The licence is valid for the duration of the User's possession of the Mudita Pure device and expires earlier if the User violates its terms and conditions.</text>
<text weight='bold' size='32'><b>Mudita Pure software licence agreement</b></text><br></br><text weight='regular' size='27'>NOTE: BY USING MUDITA PURE, THE USER ACCEPTS THE FOLLOWING SOFTWARE LICENCE AGREEMENT. THE DEVICE CANNOT BE USED PROPERLY UNLESS THE LICENCE IS ACCEPTED.<br></br><br></br>THEREFORE, BEFORE USING MUDITA PURE OR DOWNLOADING ANY SOFTWARE UPDATES, THE USER SHOULD READ THE LICENCE THOROUGHLY.<br></br><br></br>IF THE USER DOES NOT AGREE TO THE TERMS OF THIS LICENCE, THE SOFTWARE OR ANY DOWNLOADABLE UPDATES CANNOT BE USED.<br></br><br></br>Definitions:<br></br>Software - Mudita Pure system software, interfaces, and its contents (including fonts, sounds, documents, and all the other default data saved on the device);<br></br>Update - any update of the Software, including the introduction of any additional or changed features or other software;<br></br>Mudita - Mudita sp. z o.o. based in Warsaw (address: ul. Jana Czeczota 6, 02-607 Warsaw, Poland) registered in the Polish Register of Entrepreneurs of the National Court Register under KRS number: 0000467620, tax ID number: 5252558282, share capital of PLN 21,000.00;<br></br>User - any person who has lawfully become the owner of a Mudita Pure device in order to use it.<br></br><br></br>Licence terms and conditions:<br></br>    1. Upon the User's agreement to the terms and conditions of this licence, Mudita grants the Mudita Pure User a Software licence. Upon downloading an Update, a licence for such Update is granted as well. Under such licence, the User receives a non-exclusive, territorially unrestricted right to use the Software or the Update on a single MUDITA PURE device to:<br></br>    a) store the Software and the Update on the Mudita Pure device;<br></br>    b) store a single copy of the Software and the Update outside the Mudita Pure device;<br></br>    c) boot up, display, and use the Software or the Update on the Mudita Pure device.<br></br>    2. Every Mudita Pure device lawfully owned by the User grants the User a Software/Update licence coupled solely with the particular device. Thus, with every Mudita Pure owned, the User gains another separate licence.<br></br>    3. Mudita does not allow Software and Updates covered by this licence to be installed on more than one Mudita Pure device at the same time, nor does it allow distributing or sharing the Software and Updates over the internet to be used on multiple devices at the same time, except for the cases specified in this licence.<br></br>    4. The licence does not grant the User any right to use the Software and the Update for any other purpose than to use the Mudita Pure device in line with its intended functions detailed in the manual.<br></br>    5. The licence is valid for the duration of the User's possession of the Mudita Pure device and expires earlier if the User violates its terms and conditions.</text>

M image/assets/licenses/Espanol/eula.txt => image/assets/licenses/Espanol/eula.txt +1 -1
@@ 1,1 1,1 @@
<text font='gt_pressura' weight='bold' size='32'><b>Acuerdo de licencia de software de Mudita Pure</b></text><br></br><text font='gt_pressura' weight='regular' size='27'>NOTA: AL USAR MUDITA PURE, EL USUARIO ACEPTA EL SIGUIENTE ACUERDO DE LICENCIA DE SOFTWARE. EL DISPOSITIVO NO PUEDE USARSE ADECUADAMENTE A MENOS QUE SE ACEPTE EL ACUERDO.<br></br><br></br>POR LO TANTO, ANTES DE UTILIZAR MUDITA PURE O DESCARGAR CUALQUIER ACTUALIZACIÓN DE SOFTWARE, EL USUARIO DEBE LEER EL ACUERDO DETENIDAMENTE.<br></br><br></br>SI EL USUARIO NO ESTÁ DE ACUERDO CON LAS CONDICIONES DE ESTE CONTRATO, NO PODRÁ USAR EL SOFTWARE NI CUALQUIER ACTUALIZACIÓN DESCARGABLE.<br></br><br></br>Conceptos:<br></br>Software: el sistema de software de Mudita Pure, su interfaz y su contenido (que incluye fuentes, sonidos, documentos y el resto de datos guardados en el dispositivo por defecto).<br></br>Actualización: cualquier actualización del Software, incluyendo la introducción de cualquier característica adicional o modificada, así como otro software.<br></br>Mudita: Mudita sp. z o.o. con sede en Varsovia (dirección: ul. Jana Czeczota 6, 02-607 Warszawa, Polonia) que figura en el Registro Judicial Nacional de Emprendedores polaco con el número KRS: 0000467620, número de identificación del contribuyente: 5252558282, capital social de 21 000,00 PLN;<br></br>Usuario: cualquier persona que sea propietario legítimo de un dispositivo Mudita Pure con intención de usarlo.<br></br><br></br>Términos y condiciones del acuerdo:<br></br>    1. Previo acuerdo del Usuario con los términos y condiciones de este contrato, Mudita otorga al usuario de Mudita Pure permiso para utilizar su Software. Al descargar una Actualización, también se otorga el permiso de la misma. Con dicha licencia, el Usuario recibe el derecho no exclusivo y sin restricciones territoriales para utilizar el Software o sus Actualizaciones en un solo dispositivo MUDITA PURE para:<br></br>    a) almacenar el Software y la Actualización en el dispositivo Mudita Pure;<br></br>    b) almacenar una sola copia del Software y de la Actualización fuera del dispositivo Mudita Pure;<br></br>    c) iniciar, mostrar y utilizar el Software y la Actualización en el dispositivo Mudita Pure.<br></br>    2. Cada dispositivo Mudita Pure que sea propiedad legal de un Usuario, otorga al Usuario el permiso para usar el Software/Actualizaciones únicamente desde un dispositivo particular. Por lo tanto, con cada dispositivo Mudita Pure en propiedad, el Usuario obtiene una licencia por separado.<br></br>    3. Mudita no permite que el Software y las Actualizaciones cubiertas por dicho permiso se usen en más de un dispositivo Mudita Pure a la vez; tampoco permite distribuir o compartir el Software y las Actualizaciones a través de internet para ser usadas en varios dispositivos a la vez, a excepción de los casos que se indican en este acuerdo.<br></br>    4. La licencia no otorga al Usuario el derecho de usar el Software o las Actualizaciones para cualquier otro fin que no sea el dispositivo Mudita Pure y de acuerdo a las funciones designadas que se detallan en este manual.<br></br>    5. La licencia será válida mientras el Usuario posea el dispositivo Mudita Pure y expirará si el Usuario infringe los términos y condiciones.</text>
<text weight='bold' size='32'><b>Acuerdo de licencia de software de Mudita Pure</b></text><br></br><text weight='regular' size='27'>NOTA: AL USAR MUDITA PURE, EL USUARIO ACEPTA EL SIGUIENTE ACUERDO DE LICENCIA DE SOFTWARE. EL DISPOSITIVO NO PUEDE USARSE ADECUADAMENTE A MENOS QUE SE ACEPTE EL ACUERDO.<br></br><br></br>POR LO TANTO, ANTES DE UTILIZAR MUDITA PURE O DESCARGAR CUALQUIER ACTUALIZACIÓN DE SOFTWARE, EL USUARIO DEBE LEER EL ACUERDO DETENIDAMENTE.<br></br><br></br>SI EL USUARIO NO ESTÁ DE ACUERDO CON LAS CONDICIONES DE ESTE CONTRATO, NO PODRÁ USAR EL SOFTWARE NI CUALQUIER ACTUALIZACIÓN DESCARGABLE.<br></br><br></br>Conceptos:<br></br>Software: el sistema de software de Mudita Pure, su interfaz y su contenido (que incluye fuentes, sonidos, documentos y el resto de datos guardados en el dispositivo por defecto).<br></br>Actualización: cualquier actualización del Software, incluyendo la introducción de cualquier característica adicional o modificada, así como otro software.<br></br>Mudita: Mudita sp. z o.o. con sede en Varsovia (dirección: ul. Jana Czeczota 6, 02-607 Warszawa, Polonia) que figura en el Registro Judicial Nacional de Emprendedores polaco con el número KRS: 0000467620, número de identificación del contribuyente: 5252558282, capital social de 21 000,00 PLN;<br></br>Usuario: cualquier persona que sea propietario legítimo de un dispositivo Mudita Pure con intención de usarlo.<br></br><br></br>Términos y condiciones del acuerdo:<br></br>    1. Previo acuerdo del Usuario con los términos y condiciones de este contrato, Mudita otorga al usuario de Mudita Pure permiso para utilizar su Software. Al descargar una Actualización, también se otorga el permiso de la misma. Con dicha licencia, el Usuario recibe el derecho no exclusivo y sin restricciones territoriales para utilizar el Software o sus Actualizaciones en un solo dispositivo MUDITA PURE para:<br></br>    a) almacenar el Software y la Actualización en el dispositivo Mudita Pure;<br></br>    b) almacenar una sola copia del Software y de la Actualización fuera del dispositivo Mudita Pure;<br></br>    c) iniciar, mostrar y utilizar el Software y la Actualización en el dispositivo Mudita Pure.<br></br>    2. Cada dispositivo Mudita Pure que sea propiedad legal de un Usuario, otorga al Usuario el permiso para usar el Software/Actualizaciones únicamente desde un dispositivo particular. Por lo tanto, con cada dispositivo Mudita Pure en propiedad, el Usuario obtiene una licencia por separado.<br></br>    3. Mudita no permite que el Software y las Actualizaciones cubiertas por dicho permiso se usen en más de un dispositivo Mudita Pure a la vez; tampoco permite distribuir o compartir el Software y las Actualizaciones a través de internet para ser usadas en varios dispositivos a la vez, a excepción de los casos que se indican en este acuerdo.<br></br>    4. La licencia no otorga al Usuario el derecho de usar el Software o las Actualizaciones para cualquier otro fin que no sea el dispositivo Mudita Pure y de acuerdo a las funciones designadas que se detallan en este manual.<br></br>    5. La licencia será válida mientras el Usuario posea el dispositivo Mudita Pure y expirará si el Usuario infringe los términos y condiciones.</text>

M image/assets/licenses/Polski/eula.txt => image/assets/licenses/Polski/eula.txt +1 -1
@@ 1,1 1,1 @@
<text font='gt_pressura' weight='bold' size='32'><b>Umowa licencyjna na oprogramowanie Mudita Pure</b></text><br></br><text font='gt_pressura' weight='regular' size='27'>WAŻNE: UŻYWAJĄC URZĄDZENIA MUDITA PURE, UŻYTKOWNIK AKCEPTUJE TREŚĆ PONIŻSZEJ UMOWY LICENCYJNEJ NA JEGO OPROGRAMOWANIE. BEZ JEJ AKCEPTACJI NIEMOŻLIWE JEST PRAWIDŁOWE KORZYSTANIE Z URZĄDZENIA.<br></br><br></br>W ZWIĄZKU Z TYM, PRZED UŻYCIEM MUDITA PURE LUB POBRANIEM UAKTUALNIENIA JEGO OPROGRAMOWANIA NALEŻY DOKŁADNIE PRZECZYTAĆ TEKST LICENCJI.<br></br><br></br>JEŻELI UŻYTKOWNIK NIE ZGADZA SIĘ Z POSTANOWIENIAMI NINIEJSZEJ LICENCJI, NIE MOŻE UŻYWAĆ OPROGRAMOWANIA, ANI POBIERAĆ I UŻYWAĆ AKTUALIZACJI. <br></br><br></br>Definicje:<br></br>Oprogramowanie - należy przez to rozumieć oprogramowanie systemowe Mudita Pure, interfejsy oraz jego zawartość (w tym czcionki, dźwięki, dokumentację i inne dane zapisane w pamięci urządzenia w wersji fabrycznej).<br></br>Aktualizacja - należy przez to rozumieć uaktualnianie Oprogramowania, w tym dodanie/zmianę funkcji lub  zastąpienie Oprogramowania nowym oprogramowaniem.<br></br>Mudita - Mudita sp. z o.o. z siedzibą w Warszawie (adres: ul. Jana Czeczota 6 02-607 Warszawa, Polska), wpisana do rejestru przedsiębiorców Krajowego Rejestru Sądowego pod numerem KRS: 0000467620, NIP: 5252558282, kapitał zakładowy 21.100,00 PLN <br></br>Użytkownik - osoba, która zgodnie z prawem stała się posiadaczem urządzenia Mudita Pure w celu korzystania z niego.<br></br><br></br>Warunki licencji:<br></br>    1. Z chwilą akceptacji przez Użytkownika warunków niniejszej licencji, Mudita udziela Użytkownikowi urządzenia Mudita Pure licencji na Oprogramowanie, zaś z chwilą pobrania przez Użytkownika Aktualizacji, także licencji do takiej Aktualizacji, w ramach której Użytkownik otrzymuje niewyłączne, nieograniczone terytorialnie, prawo do korzystania z nich na jednym urządzeniu MUDITA PURE w zakresie:<br></br>    a) przechowywania Oprogramowania i/lub Aktualizacji w pamięci urządzenia Mudita Pure,<br></br>    b) przechowywania jednej kopii Oprogramowania i/lub Aktualizacji poza pamięcią urządzenia Mudita Pure,<br></br>    c) uruchamiania, wyświetlania i korzystania z Oprogramowania lub/i Aktualizacji  na urządzeniu Mudita Pure.<br></br>    2. Każdy jeden egzemplarz urządzenia Mudita Pure, który w sposób zgodny z prawem, znalazł się w posiadaniu Użytkownika, uprawnia go do licencji na Oprogramowania lub/i Aktualizacje związane wyłącznie z tym egzemplarzem, w związku czym w zakresie każdego kolejnego egzemplarza urządzenia Mudita Pure, uzyskuje on odrębną licencję.<br></br>    3. Poza przypadkami określonymi w niniejszej licencji, Mudita nie zezwala na to aby Oprogramowanie lub/i Aktualizacje objęte niniejszą licencją zainstalowane były w tym samym czasie na więcej niż jednym urządzeniu Mudita Pure, a także nie zezwala na dystrybuowanie lub udostępnianie Oprogramowania lub/i Aktualizacji przez sieć w celu używania na wielu urządzeniach w tym samym czasie.<br></br>    4. Niniejsza licencja nie przyznaje Użytkownikowi żadnych praw do używania Oprogramowania lub/i Aktualizacji w celach innych niż korzystanie z urządzenia Mudita Pure zgodnie z jego funkcjami opisanymi w instrukcji obsługi.<br></br>    5. Niniejsza licencja obowiązuje przez czas, w jakim Użytkownik będzie posiadał urządzenie Mudita Pure, przy czym wygasa ona wcześniej, z chwilą naruszenia przez Użytkownika jej postanowień.</text>
<text weight='bold' size='32'><b>Umowa licencyjna na oprogramowanie Mudita Pure</b></text><br></br><text weight='regular' size='27'>WAŻNE: UŻYWAJĄC URZĄDZENIA MUDITA PURE, UŻYTKOWNIK AKCEPTUJE TREŚĆ PONIŻSZEJ UMOWY LICENCYJNEJ NA JEGO OPROGRAMOWANIE. BEZ JEJ AKCEPTACJI NIEMOŻLIWE JEST PRAWIDŁOWE KORZYSTANIE Z URZĄDZENIA.<br></br><br></br>W ZWIĄZKU Z TYM, PRZED UŻYCIEM MUDITA PURE LUB POBRANIEM UAKTUALNIENIA JEGO OPROGRAMOWANIA NALEŻY DOKŁADNIE PRZECZYTAĆ TEKST LICENCJI.<br></br><br></br>JEŻELI UŻYTKOWNIK NIE ZGADZA SIĘ Z POSTANOWIENIAMI NINIEJSZEJ LICENCJI, NIE MOŻE UŻYWAĆ OPROGRAMOWANIA, ANI POBIERAĆ I UŻYWAĆ AKTUALIZACJI. <br></br><br></br>Definicje:<br></br>Oprogramowanie - należy przez to rozumieć oprogramowanie systemowe Mudita Pure, interfejsy oraz jego zawartość (w tym czcionki, dźwięki, dokumentację i inne dane zapisane w pamięci urządzenia w wersji fabrycznej).<br></br>Aktualizacja - należy przez to rozumieć uaktualnianie Oprogramowania, w tym dodanie/zmianę funkcji lub  zastąpienie Oprogramowania nowym oprogramowaniem.<br></br>Mudita - Mudita sp. z o.o. z siedzibą w Warszawie (adres: ul. Jana Czeczota 6 02-607 Warszawa, Polska), wpisana do rejestru przedsiębiorców Krajowego Rejestru Sądowego pod numerem KRS: 0000467620, NIP: 5252558282, kapitał zakładowy 21.100,00 PLN <br></br>Użytkownik - osoba, która zgodnie z prawem stała się posiadaczem urządzenia Mudita Pure w celu korzystania z niego.<br></br><br></br>Warunki licencji:<br></br>    1. Z chwilą akceptacji przez Użytkownika warunków niniejszej licencji, Mudita udziela Użytkownikowi urządzenia Mudita Pure licencji na Oprogramowanie, zaś z chwilą pobrania przez Użytkownika Aktualizacji, także licencji do takiej Aktualizacji, w ramach której Użytkownik otrzymuje niewyłączne, nieograniczone terytorialnie, prawo do korzystania z nich na jednym urządzeniu MUDITA PURE w zakresie:<br></br>    a) przechowywania Oprogramowania i/lub Aktualizacji w pamięci urządzenia Mudita Pure,<br></br>    b) przechowywania jednej kopii Oprogramowania i/lub Aktualizacji poza pamięcią urządzenia Mudita Pure,<br></br>    c) uruchamiania, wyświetlania i korzystania z Oprogramowania lub/i Aktualizacji  na urządzeniu Mudita Pure.<br></br>    2. Każdy jeden egzemplarz urządzenia Mudita Pure, który w sposób zgodny z prawem, znalazł się w posiadaniu Użytkownika, uprawnia go do licencji na Oprogramowania lub/i Aktualizacje związane wyłącznie z tym egzemplarzem, w związku czym w zakresie każdego kolejnego egzemplarza urządzenia Mudita Pure, uzyskuje on odrębną licencję.<br></br>    3. Poza przypadkami określonymi w niniejszej licencji, Mudita nie zezwala na to aby Oprogramowanie lub/i Aktualizacje objęte niniejszą licencją zainstalowane były w tym samym czasie na więcej niż jednym urządzeniu Mudita Pure, a także nie zezwala na dystrybuowanie lub udostępnianie Oprogramowania lub/i Aktualizacji przez sieć w celu używania na wielu urządzeniach w tym samym czasie.<br></br>    4. Niniejsza licencja nie przyznaje Użytkownikowi żadnych praw do używania Oprogramowania lub/i Aktualizacji w celach innych niż korzystanie z urządzenia Mudita Pure zgodnie z jego funkcjami opisanymi w instrukcji obsługi.<br></br>    5. Niniejsza licencja obowiązuje przez czas, w jakim Użytkownik będzie posiadał urządzenie Mudita Pure, przy czym wygasa ona wcześniej, z chwilą naruszenia przez Użytkownika jej postanowień.</text>

M module-apps/application-settings/windows/advanced/UITestWindow.cpp => module-apps/application-settings/windows/advanced/UITestWindow.cpp +1 -1
@@ 30,7 30,7 @@ namespace gui
        text->setFont(style::window::font::medium);
        LOG_DEBUG(
            "----------------------------------------------------------------------------------------------------");
        text->addRichText("<p><text font='gt_pressura' color='12' size='30'>This</text><br>Text<text size='20' "
        text->addRichText("<p><text color='12' size='30'>This</text><br>Text<text size='20' "
                          "weight='bold'> is rich </text><text color='3'>example</text></br></p>");
        LOG_DEBUG(
            "----------------------------------------------------------------------------------------------------");

M module-gui/gui/core/Font.cpp => module-gui/gui/core/Font.cpp +4 -4
@@ 18,7 18,8 @@ namespace gui
        setFont(name, size, weight);
    }

    Font::Font(unsigned int size, Weight weight) : Font(font_default_type, size, weight)
    Font::Font(unsigned int size, Weight weight)
        : Font(FontManager::getInstance().getDefaultFontTypeName(), size, weight)
    {}

    Font::Font(RawFont *rawfont)


@@ 41,7 42,6 @@ namespace gui

        setFont(name, size, weight);
    }

    void Font::setFont(std::string new_name, unsigned int new_size, Weight new_weight)
    {
        bool update = false;


@@ 56,13 56,13 @@ namespace gui
        set(weight, new_weight);
        if (update) {
            std::string raw_font_name = new_name + "_" + c_str(new_weight) + "_" + std::to_string(new_size);
            font                      = FontManager::getInstance().getFont(raw_font_name);
            font                      = FontManager::getInstance().getFontByName(raw_font_name);
        }
    }

    void Font::setFont(unsigned int size, Weight weight)
    {
        setFont((font_default_type), size, weight);
        setFont((FontManager::getInstance().getDefaultFontTypeName()), size, weight);
    }

    void Font::setSize(unsigned int new_size)

M module-gui/gui/core/Font.hpp => module-gui/gui/core/Font.hpp +0 -4
@@ 7,9 7,6 @@

namespace gui
{

    inline const char *font_default_type = "gt_pressura";

    class RawFont;

    /// simple font interface for FontManager && RawFont


@@ 34,7 31,6 @@ namespace gui
        Font(unsigned int size, Weight weight = Weight::Regular);
        Font(RawFont *font);
        void setFont(std::string name, unsigned int size, Weight weight = Weight::Regular);
        /// just for gt_pressura - we have it as default
        void setFont(unsigned int size, Weight weight = Weight::Regular);
        void setSize(unsigned int size);
        void setWeight(Weight weight);

M module-gui/gui/core/FontManager.cpp => module-gui/gui/core/FontManager.cpp +108 -40
@@ 7,14 7,11 @@
#include "RawFont.hpp"  // for RawFont
#include <log/log.hpp>  // for LOG_ERROR, LOG_INFO, LOG_WARN
#include <Utils.hpp>
#include <json11.hpp>
#include <filesystem>
#include <fstream>
#include <cstdio>

namespace style::window::font
{
    inline constexpr auto default_fallback_font = "dejavu_sans_bold_27";
}

namespace gui
{



@@ 33,57 30,63 @@ namespace gui

    void FontManager::loadFonts(std::string baseDirectory)
    {
        fontFolder                         = baseDirectory + "/fonts";
        std::vector<std::string> fontFiles = getFontsList();
        fontFolder     = baseDirectory + "/fonts";
        fontMapFile    = fontFolder + "/fontmap.json";
        auto fontFiles = getFontsList();

        for (std::string fontName : fontFiles) {
            loadFont(fontName);
        for (const auto &font : fontFiles) {
            loadFont(font.first, font.second);
        }
    }

    RawFont *FontManager::loadFont(std::string filename)
    RawFont *FontManager::loadFont(const std::string &fontType, const std::string &path)
    {

        auto file = std::fopen(filename.c_str(), "rb");
        auto file = std::fopen(path.c_str(), "rb");
        if (file == nullptr) {
            LOG_ERROR("Failed to open file: %s", path.c_str());
            return nullptr;
        }

        auto fileSize = std::filesystem::file_size(filename);
        std::rewind(file);
        const auto fileSize = std::filesystem::file_size(path);

        std::vector<uint8_t> fontData(fileSize, 0);

        std::ifstream input(path, std::ios::in | std::ifstream::binary);
        if (not input.is_open()) {
            return nullptr;
        }

        char *fontData = new char[fileSize];
        if (fontData == nullptr) {
        if (not input.read(reinterpret_cast<char *>(&fontData[0]), fontData.size())) {
            std::fclose(file);
            LOG_ERROR(" Failed to allocate temporary font buffer");
            return nullptr;
        }

        // read data to buffer
        auto bytesRead = std::fread(fontData, 1, fileSize, file);
        const auto bytesRead = input.gcount();

        // close file
        std::fclose(file);
        if (static_cast<uintmax_t>(bytesRead) != fileSize) {
            LOG_ERROR("Failed to read all file");
            delete[] fontData;
            return nullptr;
        }

        // allocate memory for new font
        RawFont *font = new RawFont();
        if (font->load(reinterpret_cast<uint8_t *>(fontData)) != gui::Status::GUI_SUCCESS) {
            delete font;
            delete[] fontData;
        RawFont *rawfont = new RawFont();
        if (!rawfont) {
            return nullptr;
        }
        if (rawfont->load(&fontData[0]) != gui::Status::GUI_SUCCESS) {
            delete rawfont;
            return nullptr;
        }
        else {
            // set id and push it to vector
            font->id = fonts.size();
            fonts.push_back(font);
            rawfont->id = fonts.size();
            fonts.push_back(rawfont);
            fontMap.insert({fontType, rawfont->getName()});
        }
        delete[] fontData;
        return font;
        return rawfont;
    }

    bool hasEnding(std::string const &fullString, std::string const &ending)


@@ 96,28 99,60 @@ namespace gui
        }
    }

    std::vector<std::string> FontManager::getFontsList()
    std::map<std::string, std::string> FontManager::getFontsList()
    {

        std::vector<std::string> fontFiles;

        LOG_INFO("Scanning fonts folder: %s", fontFolder.c_str());

        for (const auto &entry : std::filesystem::directory_iterator(fontFolder)) {
            if (!std::filesystem::is_directory(entry) && entry.path().extension() == ".mpf") {
                fontFiles.push_back(entry.path().string());
        auto fd = std::fopen(fontMapFile.c_str(), "r");
        if (fd == nullptr) {
            LOG_FATAL("Error during opening file %s", fontMapFile.c_str());
            return {};
        }

        uint32_t fsize     = std::filesystem::file_size(fontMapFile);
        auto fontmapString = std::make_unique<char[]>(fsize + 1);
        memset(fontmapString.get(), 0, fsize + 1);
        std::fread(fontmapString.get(), 1, fsize, fd);
        std::fclose(fd);

        json11::Json fontmapJson;
        std::string err;
        fontmapJson = json11::Json::parse(fontmapString.get(), err);
        if (!err.empty()) {
            LOG_ERROR("Failed parsing device string!");
            throw std::invalid_argument("Can't parse the file!");
        }

        auto fontmapObjects = fontmapJson.object_items();
        const auto infoJson = fontmapObjects["info"];
        defaultFontName     = infoJson["default_font_name"].string_value();
        defaultFontTypeName = infoJson["default_font_type_name"].string_value();

        const auto styleJson = fontmapObjects["style"];
        std::map<std::string, std::string> fontFiles;

        for (const auto &entry : styleJson.object_items()) {
            auto fontName = entry.second.string_value();
            if (!std::filesystem::is_regular_file(fontFolder + "/" + fontName)) {
                LOG_ERROR("Could not find font: %s", fontName.c_str());
            }
            else {
                LOG_INFO("Add font to list: %s - %s", entry.first.c_str(), fontName.c_str());
                fontFiles.insert({entry.first, fontFolder + "/" + fontName});
            }
        }

        LOG_INFO("Total number of fonts: %u", static_cast<unsigned int>(fontFiles.size()));
        return fontFiles;
    }

    auto FontManager::getFontName(const std::string &fontType) const -> std::string
    {
        return getFont(fontType)->getName();
    }

    bool FontManager::init(std::string baseDirectory)
    {
        loadFonts(baseDirectory);

        auto fallback_font = find(style::window::font::default_fallback_font);
        auto fallback_font = find(getFontName(defaultFontName));
        if (fallback_font != nullptr) {
            for (auto font : fonts) {
                font->setFallbackFont(fallback_font);


@@ 137,11 172,11 @@ namespace gui
        return instance;
    }

    [[nodiscard]] auto FontManager::getFont(std::string_view name) const -> RawFont *
    [[nodiscard]] auto FontManager::getFontByName(std::string_view name) const -> RawFont *
    {
        auto font = find(name);
        // default return first font
        if (font == nullptr && fonts.size() > 0) {
        if (font == nullptr && not fonts.empty()) {
#if DEBUG_MISSING_ASSETS == 1
            LOG_ERROR("=> font not found: %s using default", name.data());
#endif


@@ 161,6 196,38 @@ namespace gui
        return fonts[num];
    }

    [[nodiscard]] auto FontManager::getFont(const std::string &fontType) const -> RawFont *
    {
        auto fontPath = fontMap.find(fontType);
        if (fontPath != fontMap.end()) {
            auto rawFont = find(fontPath->second);
            if (rawFont) {
                return rawFont;
            }
        }
        if (not fonts.empty()) {
#if DEBUG_MISSING_ASSETS == 1
            LOG_ERROR("=> font not found: %s using default", fontType.c_str());
#endif
            return fonts[0];
        }
        return nullptr;
    }

    [[nodiscard]] auto FontManager::getFont() const -> RawFont *
    {
        return getFont(defaultFontName);
    }

    auto FontManager::getDefaultFontName() const -> std::string
    {
        return defaultFontName;
    }
    auto FontManager::getDefaultFontTypeName() const -> std::string
    {
        return defaultFontTypeName;
    }

    auto FontManager::find(std::string_view name) const -> RawFont *
    {
        for (const auto &font : fonts) {


@@ 170,4 237,5 @@ namespace gui
        }
        return nullptr;
    }

}; // namespace gui

M module-gui/gui/core/FontManager.hpp => module-gui/gui/core/FontManager.hpp +14 -5
@@ 4,6 4,7 @@
#pragma once

#include <cstdint> // for uint32_t
#include <map>     // for map
#include <string>  // for string
#include <vector>  // for vector



@@ 24,10 25,12 @@ namespace gui

      protected:
        std::string fontFolder;
        std::string fontMapFile;
        std::vector<RawFont *> fonts;
        std::vector<std::string> getFontsList();
        std::map<std::string, std::string> fontMap{};
        std::map<std::string, std::string> getFontsList();

        RawFont *loadFont(std::string filename);
        RawFont *loadFont(const std::string &font, const std::string &path);
        void loadFonts(std::string baseDirectory);

        FontManager() = default;


@@ 42,16 45,22 @@ namespace gui

        virtual ~FontManager();

        [[nodiscard]] auto getFont(std::string_view name = defaultFontName) const -> RawFont *;
        [[nodiscard]] auto getFont() const -> RawFont *;
        [[nodiscard]] auto getFont(const std::string &fontType) const -> RawFont *;
        [[nodiscard]] auto getFont(uint32_t num) const -> RawFont *;
        [[nodiscard]] auto getFontByName(std::string_view name) const -> RawFont *;
        [[nodiscard]] auto isInitialized() const
        {
            return initialized;
        }

        static constexpr auto defaultFontName{"gt_pressura_regular_27"};
        [[nodiscard]] auto getFontName(const std::string &font) const -> std::string;
        [[nodiscard]] auto getDefaultFontName() const -> std::string;
        [[nodiscard]] auto getDefaultFontTypeName() const -> std::string;

      private:
        std::string defaultFontName{};
        std::string defaultFontTypeName{};

        [[nodiscard]] auto find(std::string_view name) const -> RawFont *;
    };
}; // namespace gui

M module-gui/gui/widgets/Style.hpp => module-gui/gui/widgets/Style.hpp +21 -21
@@ 40,7 40,7 @@ namespace style

        namespace font
        {
            inline constexpr auto title = "gt_pressura_bold_30";
            inline constexpr auto title = "bigbold";
        } // namespace font
    }     // namespace header



@@ 58,24 58,24 @@ namespace style
        inline constexpr auto default_rect_yaps            = 10U;
        namespace font
        {
            inline constexpr auto huge             = "gt_pressura_regular_190";
            inline constexpr auto supersizeme      = "gt_pressura_regular_90";
            inline constexpr auto supersizemelight = "gt_pressura_light_90";
            inline constexpr auto largelight       = "gt_pressura_light_46";
            inline constexpr auto large            = "gt_pressura_regular_46";
            inline constexpr auto verybiglight     = "gt_pressura_light_38";
            inline constexpr auto verybig          = "gt_pressura_regular_38";
            inline constexpr auto mediumbigbold    = "gt_pressura_bold_32";
            inline constexpr auto bigbold          = "gt_pressura_bold_30";
            inline constexpr auto big              = "gt_pressura_regular_30";
            inline constexpr auto biglight         = "gt_pressura_light_30";
            inline constexpr auto mediumbold       = "gt_pressura_bold_27";
            inline constexpr auto medium           = "gt_pressura_regular_27";
            inline constexpr auto mediumlight      = "gt_pressura_light_27";
            inline constexpr auto smallbold        = "gt_pressura_bold_24";
            inline constexpr auto small            = "gt_pressura_regular_24";
            inline constexpr auto verysmallbold    = "gt_pressura_bold_20";
            inline constexpr auto verysmall        = "gt_pressura_regular_20";
            inline constexpr auto huge             = "huge";
            inline constexpr auto supersizeme      = "supersizeme";
            inline constexpr auto supersizemelight = "supersizemelight";
            inline constexpr auto largelight       = "largelight";
            inline constexpr auto large            = "large";
            inline constexpr auto verybiglight     = "verybiglight";
            inline constexpr auto verybig          = "verybig";
            inline constexpr auto mediumbigbold    = "mediumbigbold";
            inline constexpr auto bigbold          = "bigbold";
            inline constexpr auto big              = "big";
            inline constexpr auto biglight         = "biglight";
            inline constexpr auto mediumbold       = "mediumbold";
            inline constexpr auto medium           = "medium";
            inline constexpr auto mediumlight      = "mediumlight";
            inline constexpr auto smallbold        = "smallbold";
            inline constexpr auto small            = "small";
            inline constexpr auto verysmallbold    = "verysmallbold";
            inline constexpr auto verysmall        = "verysmall";
        }; // namespace font

        inline constexpr auto list_offset_default = 12U;


@@ 115,8 115,8 @@ namespace style

        namespace font
        {
            inline constexpr auto bold   = "gt_pressura_bold_24";
            inline constexpr auto medium = "gt_pressura_regular_24";
            inline constexpr auto bold   = "mediumbold";
            inline constexpr auto medium = "medium";
        }; // namespace font

    } // namespace nav_bar

M module-gui/gui/widgets/status-bar/Style.hpp => module-gui/gui/widgets/status-bar/Style.hpp +5 -5
@@ 21,28 21,28 @@ namespace style::status_bar
    }; // namespace margins
    namespace time
    {
        inline constexpr auto font          = "gt_pressura_regular_24";
        inline constexpr auto font          = style::window::font::small;
        inline constexpr auto maxX          = 100u;
        inline constexpr auto bottomPadding = 5u;
    }; // namespace time
    namespace nat
    {
        inline constexpr auto maxX = 35u;
        inline constexpr auto font = "gt_pressura_regular_20";
        inline constexpr auto font = style::window::font::verysmall;
    }; // namespace nat
    namespace phonemode
    {
        inline constexpr auto maxX = 157u;
        inline constexpr auto font = "gt_pressura_regular_20";
        inline constexpr auto font = style::window::font::verysmall;
    }; // namespace phonemode
    namespace signal
    {
        inline constexpr auto font = "gt_pressura_regular_20";
        inline constexpr auto font = style::window::font::verysmall;
        inline constexpr auto maxX = 80u;
    }; // namespace signal
    namespace battery
    {
        inline constexpr auto font = "gt_pressura_regular_20";
        inline constexpr auto font = style::window::font::verysmall;
        inline constexpr auto maxX = 70U;
    }; // namespace battery
    namespace boxes

M module-gui/test/test-catch-text/CMakeLists.txt => module-gui/test/test-catch-text/CMakeLists.txt +15 -6
@@ 1,4 1,16 @@
# gui tests

set(PROPRIETARY_SOURCES "")
if (${ASSETS_TYPE} STREQUAL "Propertiary")
        list(APPEND PROPRIETARY_SOURCES
                test-gui-Text.cpp
                test-gui-TextFixedSize.cpp
                test-gui-Font.cpp
                test-gui-TextLinesCursor.cpp
                test-gui-TextInLineCursor.cpp
        )
endif()

add_catch2_executable(
        NAME
                gui-text


@@ 6,17 18,14 @@ add_catch2_executable(
                ../mock/buildTextDocument.cpp
                ../mock/multi-line-string.cpp
                ../mock/InitializedFontManager.cpp
                test-gui-Text.cpp
                test-gui-TextFixedSize.cpp
                test-gui-TextBlock.cpp
                test-gui-TextBlockCursor.cpp
                test-gui-TextDocument.cpp
                test-gui-MultiTextLine.cpp
                test-gui-TextParse.cpp
                test-gui-Font.cpp
                test-gui-TextLinesCursor.cpp
		        test-gui-TextInLineCursor.cpp
		INCLUDE
                ${PROPRIETARY_SOURCES}

                INCLUDE
                ..
                ../mock/
        LIBS

M module-gui/test/test-catch-text/test-gui-Font.cpp => module-gui/test/test-catch-text/test-gui-Font.cpp +1 -1
@@ 16,7 16,7 @@ TEST_CASE("Testo Font")
    {
        auto f        = Font(27);
        auto raw_font = fm.getFont(style::window::font::medium);
        REQUIRE(fm.getFont("gt_pressura_regular_27") == raw_font); /// check that style is ok
        REQUIRE(fm.getFontByName("gt_pressura_regular_27") == raw_font); /// check that style is ok
        REQUIRE(f.raw() == raw_font);                              /// check that Font() works ok
        f.setWeight(Font::Weight::Bold);
        REQUIRE(f.raw() == fm.getFont(style::window::font::mediumbold)); // check for changed weight

M module-gui/test/test-catch-text/test-gui-Text.cpp => module-gui/test/test-catch-text/test-gui-Text.cpp +5 -6
@@ 609,9 609,8 @@ TEST_CASE("Text addition bounds - text sings count restricted")
    std::string testStringOneLine  = "Test String 1";
    std::string testStringTwoLines = "Test String 1\n Test String 2";

    std::string richTextTwoLines =
        "<text font='gt_pressura' color='12' size='30'>Test</text><text size='25'>String</text><text size='20' "
        "weight='bold'>1</text><br></br><text>Test String 2</text>";
    std::string richTextTwoLines = "<text color='12' size='30'>Test</text><text size='25'>String</text><text size='20' "
                                   "weight='bold'>1</text><br></br><text>Test String 2</text>";

    SECTION("Adding text to max signs count set to 0")
    {


@@ 741,7 740,7 @@ TEST_CASE("Text addition bounds - text widget size restricted")
    std::string testStringSecondLine = "Test String 2";

    std::string richTextTwoLines =
        "<text font='gt_pressura' color='12' size='30'>Test </text><text size='20'>String </text><text size='27' "
        "<text color='12' size='30'>Test </text><text size='20'>String </text><text size='27' "
        "weight='bold'>1</text><br></br><text>Test String 2</text>";

    SECTION("Adding text to 0 size text and no parent to grant size")


@@ 985,7 984,7 @@ TEST_CASE("Text addition bounds - text widget line size restricted")
    std::string testStringSecondLine = "Test String 2";

    std::string richTextTwoLines =
        "<text font='gt_pressura' color='12' size='30'>Test </text><text size='20'>String </text><text size='27' "
        "<text color='12' size='30'>Test </text><text size='20'>String </text><text size='27' "
        "weight='bold'>1</text><br></br><text>Test String 2</text>";

    SECTION("Adding text to 0 line size text")


@@ 1126,7 1125,7 @@ TEST_CASE("Text addition bounds - multiple limits tests")
    std::string testStringTwoLines = "Test String 1\nTest String 2";

    std::string richTextTwoLines =
        "<text font='gt_pressura' color='12' size='30'>Test </text><text size='20'>String </text><text size='27' "
        "<text color='12' size='30'>Test </text><text size='20'>String </text><text size='27' "
        "weight='bold'>1</text><br></br><text>Test String 2</text>";

    SECTION("Adding text to lower limit set to signs count and size and lines on higher limit")

M module-utils/log/api/log/debug.hpp => module-utils/log/api/log/debug.hpp +1 -1
@@ 19,4 19,4 @@
#define DEBUG_TIMER                  0 /// debug timers system utility
#define DEBUG_SETTINGS_DB            0 /// show extensive settings logs for all applications
#define DEBUG_SERVICE_CELLULAR       0 /// show various logs in cellular service
#define DEBUG_MISSING_ASSETS         1 /// show debug concerning missing assets
#define DEBUG_MISSING_ASSETS         0 /// show debug concerning missing assets

M products/BellHybrid/CMakeLists.txt => products/BellHybrid/CMakeLists.txt +28 -14
@@ 82,7 82,8 @@ add_boot_bin(BellHybrid)
add_image(
    PRODUCT BellHybrid
    SYSROOT sysroot
    LUTS Luts.bin
    "$<$<STREQUAL:${PROJECT_TARGET},TARGET_RT1051>:LUTS Luts.bin>"
    "$<$<STREQUAL:${PROJECT_TARGET},TARGET_Linux>:LUTS \"\">"
    DEPENDS assets updater.bin-target ecoboot.bin-target BellHybrid-boot.bin BellHybrid-version.json-target
)



@@ 92,20 93,33 @@ add_hex_target(BellHybrid)
include(BinaryAssetsVersions.cmake)
include(DownloadAsset)
# copy all assets required to build catalog under current folder as in json recipe
download_asset_json( json-target
                     ${CMAKE_CURRENT_SOURCE_DIR}/assets.json
                     ${CMAKE_BINARY_DIR}/sysroot/sys/current/
                     MuditaOSAssets
                     ${MUDITA_CACHE_DIR}
download_asset_json(json-proprietary-target
                    ${CMAKE_CURRENT_SOURCE_DIR}/assets/assets_proprietary.json
                    ${CMAKE_BINARY_DIR}/sysroot/sys/current/
                    MuditaOSAssets
                    ${MUDITA_CACHE_DIR}
    )
download_asset_release_json(json-common-target
                            ${CMAKE_CURRENT_SOURCE_DIR}/assets/assets_common.json
                            ${CMAKE_BINARY_DIR}/sysroot/sys/current/
                            MuditaOSPublicAssets
                            0.0.4
                            ${MUDITA_CACHE_DIR}
    )
download_asset_release_json(json-community-target
                            ${CMAKE_CURRENT_SOURCE_DIR}/assets/assets_community.json
                            ${CMAKE_BINARY_DIR}/sysroot/sys/current/
                            MuditaOSPublicAssets
                            0.0.4
                            ${MUDITA_CACHE_DIR}
    )
download_asset_release_json(json-rt1051-target
                            ${CMAKE_CURRENT_SOURCE_DIR}/assets/assets_rt1051.json
                            ${CMAKE_BINARY_DIR}/sysroot/sys/current/
                            MuditaOSPublicAssets
                            0.0.4
                            ${MUDITA_CACHE_DIR}
    )
# copy all assets required to build catalog under current folder as in json recipe
download_asset_release_json(    json-images-target
                                ${CMAKE_CURRENT_SOURCE_DIR}/assets_images.json
                                ${CMAKE_BINARY_DIR}/sysroot/sys/current/
                                MuditaOSPublicAssets
                                0.0.2
                                ${MUDITA_CACHE_DIR}
                           )
download_asset_release(PureUpdater_RT.bin updater.bin PureUpdater ${UPDATER_BIN_VERSION}  ${MUDITA_CACHE_DIR})
download_asset_release(ecoboot.bin ecoboot.bin ecoboot ${ECOBOOT_BIN_VERSION}  ${MUDITA_CACHE_DIR})


M products/BellHybrid/apps/application-bell-settings/data/BellSettingsStyle.hpp => products/BellHybrid/apps/application-bell-settings/data/BellSettingsStyle.hpp +3 -3
@@ 24,7 24,7 @@ namespace gui

        namespace top_text
        {
            inline constexpr auto font = "gt_pressura_light_46";
            inline constexpr auto font = style::window::font::largelight;
        }
        namespace alarm_settings_window
        {


@@ 34,7 34,7 @@ namespace gui
        } // namespace alarm_settings_window
        namespace alarm_settings_chime_tone
        {
            inline constexpr auto font_center = "gt_pressura_light_46";
            inline constexpr auto font_center = style::window::font::largelight;
        }

        namespace about_your_bell_window


@@ 57,7 57,7 @@ namespace gui
        } // namespace bedtime_settings_window
        namespace bedtime_settings_chime_tone
        {
            inline constexpr auto font_center = "gt_pressura_light_46";
            inline constexpr auto font_center = style::window::font::largelight;
        }
    } // namespace bell_settings_style
} // namespace gui

R products/BellHybrid/assets_images.json => products/BellHybrid/assets/assets_common.json +0 -0
A products/BellHybrid/assets/assets_community.json => products/BellHybrid/assets/assets_community.json +99 -0
@@ 0,0 1,99 @@
{
    "assets": [
        {
            "name": "release.tgz",
            "tarfile": "image/assets/fonts/fontmap.json",
            "output": "assets/fonts/fontmap.json"
        },
        {
            "name": "release.tgz",
            "tarfile": "image/assets/fonts/dejavu_sans/dejavu_sans_regular_140.mpf",
            "output": "assets/fonts/dejavu_sans/dejavu_sans_regular_140.mpf"
        },
        {
            "name": "release.tgz",
            "tarfile": "image/assets/fonts/dejavu_sans/dejavu_sans_regular_90.mpf",
            "output": "assets/fonts/dejavu_sans/dejavu_sans_regular_90.mpf"
        },
        {
            "name": "release.tgz",
            "tarfile": "image/assets/fonts/dejavu_sans/dejavu_sans_light_90.mpf",
            "output": "assets/fonts/dejavu_sans/dejavu_sans_light_90.mpf"
        },
        {
            "name": "release.tgz",
            "tarfile": "image/assets/fonts/dejavu_sans/dejavu_sans_light_46.mpf",
            "output": "assets/fonts/dejavu_sans/dejavu_sans_light_46.mpf"
        },
        {
            "name": "release.tgz",
            "tarfile": "image/assets/fonts/dejavu_sans/dejavu_sans_regular_46.mpf",
            "output": "assets/fonts/dejavu_sans/dejavu_sans_regular_46.mpf"
        },
        {
            "name": "release.tgz",
            "tarfile": "image/assets/fonts/dejavu_sans/dejavu_sans_light_38.mpf",
            "output": "assets/fonts/dejavu_sans/dejavu_sans_light_38.mpf"
        },
        {
            "name": "release.tgz",
            "tarfile": "image/assets/fonts/dejavu_sans/dejavu_sans_regular_38.mpf",
            "output": "assets/fonts/dejavu_sans/dejavu_sans_regular_38.mpf"
        },
        {
            "name": "release.tgz",
            "tarfile": "image/assets/fonts/dejavu_sans/dejavu_sans_bold_32.mpf",
            "output": "assets/fonts/dejavu_sans/dejavu_sans_bold_32.mpf"
        },
        {
            "name": "release.tgz",
            "tarfile": "image/assets/fonts/dejavu_sans/dejavu_sans_bold_30.mpf",
            "output": "assets/fonts/dejavu_sans/dejavu_sans_bold_30.mpf"
        },
        {
            "name": "release.tgz",
            "tarfile": "image/assets/fonts/dejavu_sans/dejavu_sans_regular_30.mpf",
            "output": "assets/fonts/dejavu_sans/dejavu_sans_regular_30.mpf"
        },
        {
            "name": "release.tgz",
            "tarfile": "image/assets/fonts/dejavu_sans/dejavu_sans_light_30.mpf",
            "output": "assets/fonts/dejavu_sans/dejavu_sans_light_30.mpf"
        },
        {
            "name": "release.tgz",
            "tarfile": "image/assets/fonts/dejavu_sans/dejavu_sans_bold_27.mpf",
            "output": "assets/fonts/dejavu_sans/dejavu_sans_bold_27.mpf"
        },
        {
            "name": "release.tgz",
            "tarfile": "image/assets/fonts/dejavu_sans/dejavu_sans_regular_27.mpf",
            "output": "assets/fonts/dejavu_sans/dejavu_sans_regular_27.mpf"
        },
        {
            "name": "release.tgz",
            "tarfile": "image/assets/fonts/dejavu_sans/dejavu_sans_light_27.mpf",
            "output": "assets/fonts/dejavu_sans/dejavu_sans_light_27.mpf"
        },
        {
            "name": "release.tgz",
            "tarfile": "image/assets/fonts/dejavu_sans/dejavu_sans_bold_24.mpf",
            "output": "assets/fonts/dejavu_sans/dejavu_sans_bold_24.mpf"
        },
        {
            "name": "release.tgz",
            "tarfile": "image/assets/fonts/dejavu_sans/dejavu_sans_regular_24.mpf",
            "output": "assets/fonts/dejavu_sans/dejavu_sans_regular_24.mpf"
        },
        {
            "name": "release.tgz",
            "tarfile": "image/assets/fonts/dejavu_sans/dejavu_sans_bold_20.mpf",
            "output": "assets/fonts/dejavu_sans/dejavu_sans_bold_20.mpf"
        },
        {
            "name": "release.tgz",
            "tarfile": "image/assets/fonts/dejavu_sans/dejavu_sans_regular_20.mpf",
            "output": "assets/fonts/dejavu_sans/dejavu_sans_regular_20.mpf"
        }
    ]
}

R products/BellHybrid/assets.json => products/BellHybrid/assets/assets_proprietary.json +15 -17
@@ 2,64 2,62 @@
    "comment": "This is kiss structure - asset path & sha",
    "assets": [
        {
            "name": "./fonts/fontmap.json",
            "output": "assets/fonts/fontmap.json"
        },
        {
            "name": "./fonts/pure/dejavu_sans_bold_27.mpf",
            "output":"assets/fonts/dejavu_sans_bold_27.mpf"
            "output": "assets/fonts/dejavu_sans_bold_27.mpf"
        },
        {
            "name": "./fonts/bell/gt_pressura_regular_38.mpf",
            "output": "assets/fonts/gt_pressura_regular_38.mpf",
            "output": "assets/fonts/gt_pressura/gt_pressura_regular_38.mpf",
            "ref": "fd168040c5d1216d457e6cf223e8ea9bb76bf7b"
        },
        {
            "name": "./fonts/bell/gt_pressura_light_38.mpf",
            "output": "assets/fonts/gt_pressura_light_38.mpf",
            "output": "assets/fonts/gt_pressura/gt_pressura_light_38.mpf",
            "ref": "10c74fcb09c2022325767cad735c0183b6f5393a"
        },
        {
            "name": "./fonts/bell/gt_pressura_regular_90.mpf",
            "ref": "10c74fcb09c2022325767cad735c0183b6f5393a",
            "output": "assets/fonts/gt_pressura_regular_90.mpf"
            "output": "assets/fonts/gt_pressura/gt_pressura_regular_90.mpf"
        },
        {
            "name": "./fonts/bell/gt_pressura_regular_190.mpf",
            "ref": "10c74fcb09c2022325767cad735c0183b6f5393a",
            "output": "assets/fonts/gt_pressura_regular_190.mpf"
            "output": "assets/fonts/gt_pressura/gt_pressura_regular_190.mpf"
        },
        {
            "name": "./fonts/common/gt_pressura_light_30.mpf",
            "ref": "10c74fcb09c2022325767cad735c0183b6f5393a",
            "output": "assets/fonts/gt_pressura_light_30.mpf"
            "output": "assets/fonts/gt_pressura/gt_pressura_light_30.mpf"
        },
        {
            "name": "./fonts/common/gt_pressura_regular_30.mpf",
            "ref": "10c74fcb09c2022325767cad735c0183b6f5393a",
            "output": "assets/fonts/gt_pressura_regular_30.mpf"
            "output": "assets/fonts/gt_pressura/gt_pressura_regular_30.mpf"
        },
        {
            "name": "./fonts/common/gt_pressura_bold_30.mpf",
            "ref": "10c74fcb09c2022325767cad735c0183b6f5393a",
            "output": "assets/fonts/gt_pressura_bold_30.mpf"
            "output": "assets/fonts/gt_pressura/gt_pressura_bold_30.mpf"
        },
        {
            "name": "./fonts/common/gt_pressura_regular_46.mpf",
            "ref": "10c74fcb09c2022325767cad735c0183b6f5393a",
            "output": "assets/fonts/gt_pressura_regular_46.mpf"
            "output": "assets/fonts/gt_pressura/gt_pressura_regular_46.mpf"
        },
        {
            "name": "./fonts/common/gt_pressura_light_46.mpf",
            "ref": "10c74fcb09c2022325767cad735c0183b6f5393a",
            "output": "assets/fonts/gt_pressura_light_46.mpf"
            "output": "assets/fonts/gt_pressura/gt_pressura_light_46.mpf"
        },
        {
            "name": "./fonts/common/gt_pressura_light_90.mpf",
            "ref": "10c74fcb09c2022325767cad735c0183b6f5393a",
            "output": "assets/fonts/gt_pressura_light_90.mpf"
        },
        {
            "name": "image/Luts.bin.tgz",
            "tarfile": "Luts.bin",
            "output": "Luts.bin",
            "unpack": true
            "output": "assets/fonts/gt_pressura/gt_pressura_light_90.mpf"
        }
    ]
}

A products/BellHybrid/assets/assets_rt1051.json => products/BellHybrid/assets/assets_rt1051.json +11 -0
@@ 0,0 1,11 @@
{
    "comment": "This is kiss structure - asset path & sha",
    "assets": [
        {
            "name": "image/Luts.bin.tgz",
            "tarfile": "Luts.bin",
            "output": "Luts.bin",
            "unpack": true
        }
    ]
}

M products/PurePhone/CMakeLists.txt => products/PurePhone/CMakeLists.txt +29 -14
@@ 107,7 107,8 @@ add_boot_bin(PurePhone)
add_image(
    PRODUCT PurePhone
    SYSROOT sysroot
    LUTS Luts.bin
    "$<$<STREQUAL:${PROJECT_TARGET},TARGET_RT1051>:LUTS Luts.bin>"
    "$<$<STREQUAL:${PROJECT_TARGET},TARGET_Linux>:LUTS \"\">"
    DEPENDS assets updater.bin-target ecoboot.bin-target PurePhone-boot.bin PurePhone-version.json-target
)



@@ 117,19 118,33 @@ add_hex_target(PurePhone)
include(BinaryAssetsVersions.cmake)
include(DownloadAsset)

download_asset_json( json-target
                     ${CMAKE_CURRENT_SOURCE_DIR}/assets.json
                     ${CMAKE_BINARY_DIR}/sysroot/sys/current/
                     MuditaOSAssets
                     ${MUDITA_CACHE_DIR}
                    )
download_asset_release_json(    json-images-target
                                ${CMAKE_CURRENT_SOURCE_DIR}/assets_images.json
                                ${CMAKE_BINARY_DIR}/sysroot/sys/current/
                                MuditaOSPublicAssets
                                0.0.4
                                ${MUDITA_CACHE_DIR}
                            )
download_asset_json(json-proprietary-target
                    ${CMAKE_CURRENT_SOURCE_DIR}/assets/assets_proprietary.json
                    ${CMAKE_BINARY_DIR}/sysroot/sys/current/
                    MuditaOSAssets
                    ${MUDITA_CACHE_DIR}
    )
download_asset_release_json(json-common-target
                            ${CMAKE_CURRENT_SOURCE_DIR}/assets/assets_common.json
                            ${CMAKE_BINARY_DIR}/sysroot/sys/current/
                            MuditaOSPublicAssets
                            0.0.5
                            ${MUDITA_CACHE_DIR}
    )
download_asset_release_json(json-community-target
                            ${CMAKE_CURRENT_SOURCE_DIR}/assets/assets_community.json
                            ${CMAKE_BINARY_DIR}/sysroot/sys/current/
                            MuditaOSPublicAssets
                            0.0.5
                            ${MUDITA_CACHE_DIR}
    )
download_asset_release_json(json-rt1051-target
                            ${CMAKE_CURRENT_SOURCE_DIR}/assets/assets_rt1051.json
                            ${CMAKE_BINARY_DIR}/sysroot/sys/current/
                            MuditaOSPublicAssets
                            0.0.5
                            ${MUDITA_CACHE_DIR}
    )
download_asset_release(PureUpdater_RT.bin updater.bin PureUpdater ${UPDATER_BIN_VERSION} ${MUDITA_CACHE_DIR})
download_asset_release(ecoboot.bin ecoboot.bin ecoboot ${ECOBOOT_BIN_VERSION} ${MUDITA_CACHE_DIR})


R products/PurePhone/assets_images.json => products/PurePhone/assets/assets_common.json +0 -0
A products/PurePhone/assets/assets_community.json => products/PurePhone/assets/assets_community.json +99 -0
@@ 0,0 1,99 @@
{
    "assets": [
        {
            "name": "release.tgz",
            "tarfile": "image/assets/fonts/fontmap.json",
            "output": "assets/fonts/fontmap.json"
        },
        {
            "name": "release.tgz",
            "tarfile": "image/assets/fonts/dejavu_sans/dejavu_sans_regular_140.mpf",
            "output": "assets/fonts/dejavu_sans/dejavu_sans_regular_140.mpf"
        },
        {
            "name": "release.tgz",
            "tarfile": "image/assets/fonts/dejavu_sans/dejavu_sans_regular_90.mpf",
            "output": "assets/fonts/dejavu_sans/dejavu_sans_regular_90.mpf"
        },
        {
            "name": "release.tgz",
            "tarfile": "image/assets/fonts/dejavu_sans/dejavu_sans_light_90.mpf",
            "output": "assets/fonts/dejavu_sans/dejavu_sans_light_90.mpf"
        },
        {
            "name": "release.tgz",
            "tarfile": "image/assets/fonts/dejavu_sans/dejavu_sans_light_46.mpf",
            "output": "assets/fonts/dejavu_sans/dejavu_sans_light_46.mpf"
        },
        {
            "name": "release.tgz",
            "tarfile": "image/assets/fonts/dejavu_sans/dejavu_sans_regular_46.mpf",
            "output": "assets/fonts/dejavu_sans/dejavu_sans_regular_46.mpf"
        },
        {
            "name": "release.tgz",
            "tarfile": "image/assets/fonts/dejavu_sans/dejavu_sans_light_38.mpf",
            "output": "assets/fonts/dejavu_sans/dejavu_sans_light_38.mpf"
        },
        {
            "name": "release.tgz",
            "tarfile": "image/assets/fonts/dejavu_sans/dejavu_sans_regular_38.mpf",
            "output": "assets/fonts/dejavu_sans/dejavu_sans_regular_38.mpf"
        },
        {
            "name": "release.tgz",
            "tarfile": "image/assets/fonts/dejavu_sans/dejavu_sans_bold_32.mpf",
            "output": "assets/fonts/dejavu_sans/dejavu_sans_bold_32.mpf"
        },
        {
            "name": "release.tgz",
            "tarfile": "image/assets/fonts/dejavu_sans/dejavu_sans_bold_30.mpf",
            "output": "assets/fonts/dejavu_sans/dejavu_sans_bold_30.mpf"
        },
        {
            "name": "release.tgz",
            "tarfile": "image/assets/fonts/dejavu_sans/dejavu_sans_regular_30.mpf",
            "output": "assets/fonts/dejavu_sans/dejavu_sans_regular_30.mpf"
        },
        {
            "name": "release.tgz",
            "tarfile": "image/assets/fonts/dejavu_sans/dejavu_sans_light_30.mpf",
            "output": "assets/fonts/dejavu_sans/dejavu_sans_light_30.mpf"
        },
        {
            "name": "release.tgz",
            "tarfile": "image/assets/fonts/dejavu_sans/dejavu_sans_bold_27.mpf",
            "output": "assets/fonts/dejavu_sans/dejavu_sans_bold_27.mpf"
        },
        {
            "name": "release.tgz",
            "tarfile": "image/assets/fonts/dejavu_sans/dejavu_sans_regular_27.mpf",
            "output": "assets/fonts/dejavu_sans/dejavu_sans_regular_27.mpf"
        },
        {
            "name": "release.tgz",
            "tarfile": "image/assets/fonts/dejavu_sans/dejavu_sans_light_27.mpf",
            "output": "assets/fonts/dejavu_sans/dejavu_sans_light_27.mpf"
        },
        {
            "name": "release.tgz",
            "tarfile": "image/assets/fonts/dejavu_sans/dejavu_sans_bold_24.mpf",
            "output": "assets/fonts/dejavu_sans/dejavu_sans_bold_24.mpf"
        },
        {
            "name": "release.tgz",
            "tarfile": "image/assets/fonts/dejavu_sans/dejavu_sans_regular_24.mpf",
            "output": "assets/fonts/dejavu_sans/dejavu_sans_regular_24.mpf"
        },
        {
            "name": "release.tgz",
            "tarfile": "image/assets/fonts/dejavu_sans/dejavu_sans_bold_20.mpf",
            "output": "assets/fonts/dejavu_sans/dejavu_sans_bold_20.mpf"
        },
        {
            "name": "release.tgz",
            "tarfile": "image/assets/fonts/dejavu_sans/dejavu_sans_regular_20.mpf",
            "output": "assets/fonts/dejavu_sans/dejavu_sans_regular_20.mpf"
        }
    ]
}

R products/PurePhone/assets.json => products/PurePhone/assets/assets_proprietary.json +19 -20
@@ 1,76 1,75 @@
{
    "comment": "This is kiss structure - asset path & sha",
    "assets": [
        {
            "name": "./fonts/fontmap.json",
            "output": "assets/fonts/fontmap.json"
        },
        {
            "name": "./fonts/pure/dejavu_sans_bold_27.mpf",
            "output":"assets/fonts/dejavu_sans_bold_27.mpf"
        },
        {
            "name": "./fonts/pure/gt_pressura_regular_20.mpf",
            "output":"assets/fonts/gt_pressura_regular_20.mpf"
            "output":"assets/fonts/gt_pressura/gt_pressura_regular_20.mpf"
        },
        {
            "name": "./fonts/pure/gt_pressura_bold_20.mpf",
            "output":"assets/fonts/gt_pressura_bold_20.mpf"
            "output":"assets/fonts/gt_pressura/gt_pressura_bold_20.mpf"
        },
        {
            "name": "./fonts/pure/gt_pressura_regular_24.mpf",
            "output":"assets/fonts/gt_pressura_regular_24.mpf"
            "output":"assets/fonts/gt_pressura/gt_pressura_regular_24.mpf"
        },
        {
            "name": "./fonts/pure/gt_pressura_bold_24.mpf",
            "output":"assets/fonts/gt_pressura_bold_24.mpf"
            "output":"assets/fonts/gt_pressura/gt_pressura_bold_24.mpf"
        },
        {
            "name": "./fonts/pure/gt_pressura_light_27.mpf",
            "output":"assets/fonts/gt_pressura_light_27.mpf"
            "output":"assets/fonts/gt_pressura/gt_pressura_light_27.mpf"
        },
        {
            "name": "./fonts/pure/gt_pressura_regular_27.mpf",
            "output":"assets/fonts/gt_pressura_regular_27.mpf"
            "output":"assets/fonts/gt_pressura/gt_pressura_regular_27.mpf"
        },
        {
            "name": "./fonts/pure/gt_pressura_bold_27.mpf",
            "output":"assets/fonts/gt_pressura_bold_27.mpf"
            "output":"assets/fonts/gt_pressura/gt_pressura_bold_27.mpf"
        },
        {
            "name": "./fonts/pure/gt_pressura_bold_32.mpf",
            "output":"assets/fonts/gt_pressura_bold_32.mpf"
            "output":"assets/fonts/gt_pressura/gt_pressura_bold_32.mpf"
        },
        {
            "name": "./fonts/common/gt_pressura_light_30.mpf",
            "ref": "10c74fcb09c2022325767cad735c0183b6f5393a",
            "output": "assets/fonts/gt_pressura_light_30.mpf"
            "output": "assets/fonts/gt_pressura/gt_pressura_light_30.mpf"
        },
        {
            "name": "./fonts/common/gt_pressura_regular_30.mpf",
            "ref": "10c74fcb09c2022325767cad735c0183b6f5393a",
            "output": "assets/fonts/gt_pressura_regular_30.mpf"
            "output": "assets/fonts/gt_pressura/gt_pressura_regular_30.mpf"
        },
        {
            "name": "./fonts/common/gt_pressura_bold_30.mpf",
            "ref": "10c74fcb09c2022325767cad735c0183b6f5393a",
            "output": "assets/fonts/gt_pressura_bold_30.mpf"
            "output": "assets/fonts/gt_pressura/gt_pressura_bold_30.mpf"
        },
        {
            "name": "./fonts/common/gt_pressura_regular_46.mpf",
            "ref": "10c74fcb09c2022325767cad735c0183b6f5393a",
            "output": "assets/fonts/gt_pressura_regular_46.mpf"
            "output": "assets/fonts/gt_pressura/gt_pressura_regular_46.mpf"
        },
        {
            "name": "./fonts/common/gt_pressura_light_46.mpf",
            "ref": "10c74fcb09c2022325767cad735c0183b6f5393a",
            "output": "assets/fonts/gt_pressura_light_46.mpf"
            "output": "assets/fonts/gt_pressura/gt_pressura_light_46.mpf"
        },
        {
            "name": "./fonts/common/gt_pressura_light_90.mpf",
            "ref": "10c74fcb09c2022325767cad735c0183b6f5393a",
            "output": "assets/fonts/gt_pressura_light_90.mpf"
        },
        {
            "name": "image/Luts.bin.tgz",
            "tarfile" : "Luts.bin",
            "output": "Luts.bin",
            "unpack": true
            "output": "assets/fonts/gt_pressura/gt_pressura_light_90.mpf"
        }
    ]
}

A products/PurePhone/assets/assets_rt1051.json => products/PurePhone/assets/assets_rt1051.json +11 -0
@@ 0,0 1,11 @@
{
    "comment": "This is kiss structure - asset path & sha",
    "assets": [
        {
            "name": "image/Luts.bin.tgz",
            "tarfile": "Luts.bin",
            "output": "Luts.bin",
            "unpack": true
        }
    ]
}

M test/CMakeLists.txt => test/CMakeLists.txt +26 -6
@@ 25,19 25,39 @@ set(TEST_ASSETS_DEST_DIR ${CMAKE_BINARY_DIR}/test-sysroot/sys)
set(TEST_ASSETS_DEST_DIR ${TEST_ASSETS_DEST_DIR} PARENT_SCOPE)

include(DownloadAsset)
download_asset_json( json-test-target
                     ${CMAKE_CURRENT_SOURCE_DIR}/assets.json
                     ${TEST_ASSETS_DEST_DIR}/current/
                     MuditaOSAssets
                     ${MUDITA_CACHE_DIR}

download_asset_release_json(json-test-community-target
                            ${CMAKE_CURRENT_SOURCE_DIR}/assets/assets_community.json
                            ${TEST_ASSETS_DEST_DIR}/current/
                            MuditaOSPublicAssets
                            0.0.4
                            ${MUDITA_CACHE_DIR}
    )

download_asset_json(json-test-proprietary-target
                    ${CMAKE_CURRENT_SOURCE_DIR}/assets/assets_proprietary.json
                    ${TEST_ASSETS_DEST_DIR}/current/
                    MuditaOSAssets
                    ${MUDITA_CACHE_DIR}
    )

set(ASSETS_DEPENDENCIES "")

if (${ASSETS_TYPE} STREQUAL "Proprietary")
    list(APPEND ASSETS_DEPENDENCIES "json-test-proprietary-target")
endif()

if (${ASSETS_TYPE} STREQUAL "Community")
    list(APPEND ASSETS_DEPENDENCIES "json-test-community-target")
endif()

add_assets_target(
    TARGET test-assets
    SOURCE_DIR ${ASSETS_SOURCE_DIR}
    DEST_DIR ${TEST_ASSETS_DEST_DIR}
    DEVEL ON
    DEPENDS json-test-target
    DEPENDS
        ${ASSETS_DEPENDENCIES}
)

add_image(

A test/assets/assets_community.json => test/assets/assets_community.json +99 -0
@@ 0,0 1,99 @@
{
    "assets": [
        {
            "name": "release.tgz",
            "tarfile": "image/assets/fonts/fontmap.json",
            "output": "assets/fonts/fontmap.json"
        },
        {
            "name": "release.tgz",
            "tarfile": "image/assets/fonts/dejavu_sans/dejavu_sans_regular_140.mpf",
            "output": "assets/fonts/dejavu_sans/dejavu_sans_regular_140.mpf"
        },
        {
            "name": "release.tgz",
            "tarfile": "image/assets/fonts/dejavu_sans/dejavu_sans_regular_90.mpf",
            "output": "assets/fonts/dejavu_sans/dejavu_sans_regular_90.mpf"
        },
        {
            "name": "release.tgz",
            "tarfile": "image/assets/fonts/dejavu_sans/dejavu_sans_light_90.mpf",
            "output": "assets/fonts/dejavu_sans/dejavu_sans_light_90.mpf"
        },
        {
            "name": "release.tgz",
            "tarfile": "image/assets/fonts/dejavu_sans/dejavu_sans_light_46.mpf",
            "output": "assets/fonts/dejavu_sans/dejavu_sans_light_46.mpf"
        },
        {
            "name": "release.tgz",
            "tarfile": "image/assets/fonts/dejavu_sans/dejavu_sans_regular_46.mpf",
            "output": "assets/fonts/dejavu_sans/dejavu_sans_regular_46.mpf"
        },
        {
            "name": "release.tgz",
            "tarfile": "image/assets/fonts/dejavu_sans/dejavu_sans_light_38.mpf",
            "output": "assets/fonts/dejavu_sans/dejavu_sans_light_38.mpf"
        },
        {
            "name": "release.tgz",
            "tarfile": "image/assets/fonts/dejavu_sans/dejavu_sans_regular_38.mpf",
            "output": "assets/fonts/dejavu_sans/dejavu_sans_regular_38.mpf"
        },
        {
            "name": "release.tgz",
            "tarfile": "image/assets/fonts/dejavu_sans/dejavu_sans_bold_32.mpf",
            "output": "assets/fonts/dejavu_sans/dejavu_sans_bold_32.mpf"
        },
        {
            "name": "release.tgz",
            "tarfile": "image/assets/fonts/dejavu_sans/dejavu_sans_bold_30.mpf",
            "output": "assets/fonts/dejavu_sans/dejavu_sans_bold_30.mpf"
        },
        {
            "name": "release.tgz",
            "tarfile": "image/assets/fonts/dejavu_sans/dejavu_sans_regular_30.mpf",
            "output": "assets/fonts/dejavu_sans/dejavu_sans_regular_30.mpf"
        },
        {
            "name": "release.tgz",
            "tarfile": "image/assets/fonts/dejavu_sans/dejavu_sans_light_30.mpf",
            "output": "assets/fonts/dejavu_sans/dejavu_sans_light_30.mpf"
        },
        {
            "name": "release.tgz",
            "tarfile": "image/assets/fonts/dejavu_sans/dejavu_sans_bold_27.mpf",
            "output": "assets/fonts/dejavu_sans/dejavu_sans_bold_27.mpf"
        },
        {
            "name": "release.tgz",
            "tarfile": "image/assets/fonts/dejavu_sans/dejavu_sans_regular_27.mpf",
            "output": "assets/fonts/dejavu_sans/dejavu_sans_regular_27.mpf"
        },
        {
            "name": "release.tgz",
            "tarfile": "image/assets/fonts/dejavu_sans/dejavu_sans_light_27.mpf",
            "output": "assets/fonts/dejavu_sans/dejavu_sans_light_27.mpf"
        },
        {
            "name": "release.tgz",
            "tarfile": "image/assets/fonts/dejavu_sans/dejavu_sans_bold_24.mpf",
            "output": "assets/fonts/dejavu_sans/dejavu_sans_bold_24.mpf"
        },
        {
            "name": "release.tgz",
            "tarfile": "image/assets/fonts/dejavu_sans/dejavu_sans_regular_24.mpf",
            "output": "assets/fonts/dejavu_sans/dejavu_sans_regular_24.mpf"
        },
        {
            "name": "release.tgz",
            "tarfile": "image/assets/fonts/dejavu_sans/dejavu_sans_bold_20.mpf",
            "output": "assets/fonts/dejavu_sans/dejavu_sans_bold_20.mpf"
        },
        {
            "name": "release.tgz",
            "tarfile": "image/assets/fonts/dejavu_sans/dejavu_sans_regular_20.mpf",
            "output": "assets/fonts/dejavu_sans/dejavu_sans_regular_20.mpf"
        }
    ]
}

R test/assets.json => test/assets/assets_proprietary.json +21 -16
@@ 1,68 1,73 @@
{
    "comment": "This is kiss structure - asset path & sha",
    "assets": [
        {
            "name": "./fonts/fontmap.json",
            "output": "assets/fonts/fontmap.json"
        },
        {
            "name" : "./fonts/pure/gt_pressura_regular_38.mpf",
            "output":"assets/fonts/gt_pressura_regular_38.mpf"
            "output":"assets/fonts/gt_pressura/gt_pressura_regular_38.mpf"
        },
        {
            "name": "./fonts/pure/dejavu_sans_bold_27.mpf",
            "output":"assets/fonts/dejavu_sans_bold_27.mpf"
            "output":"assets/fonts/gt_pressura/dejavu_sans_bold_27.mpf"
        },
        {
            "name": "./fonts/pure/gt_pressura_regular_20.mpf",
            "output":"assets/fonts/gt_pressura_regular_20.mpf"
            "output":"assets/fonts/gt_pressura/gt_pressura_regular_20.mpf"
        },
        {
            "name": "./fonts/pure/gt_pressura_bold_20.mpf",
            "output":"assets/fonts/gt_pressura_bold_20.mpf"
            "output":"assets/fonts/gt_pressura/gt_pressura_bold_20.mpf"
        },
        {
            "name": "./fonts/pure/gt_pressura_regular_24.mpf",
            "output":"assets/fonts/gt_pressura_regular_24.mpf"
            "output":"assets/fonts/gt_pressura/gt_pressura_regular_24.mpf"
        },
        {
            "name": "./fonts/pure/gt_pressura_bold_24.mpf",
            "output":"assets/fonts/gt_pressura_bold_24.mpf"
            "output":"assets/fonts/gt_pressura/gt_pressura_bold_24.mpf"
        },
        {
            "name": "./fonts/pure/gt_pressura_light_27.mpf",
            "output":"assets/fonts/gt_pressura_light_27.mpf"
            "output":"assets/fonts/gt_pressura/gt_pressura_light_27.mpf"
        },
        {
            "name": "./fonts/pure/gt_pressura_regular_27.mpf",
            "output":"assets/fonts/gt_pressura_regular_27.mpf"
            "output":"assets/fonts/gt_pressura/gt_pressura_regular_27.mpf"
        },
        {
            "name": "./fonts/pure/gt_pressura_bold_27.mpf",
            "output":"assets/fonts/gt_pressura_bold_27.mpf"
            "output":"assets/fonts/gt_pressura/gt_pressura_bold_27.mpf"
        },
        {
            "name": "./fonts/pure/gt_pressura_bold_32.mpf",
            "output":"assets/fonts/gt_pressura_bold_32.mpf"
            "output":"assets/fonts/gt_pressura/gt_pressura_bold_32.mpf"
        },
        {
            "name": "./fonts/common/gt_pressura_light_30.mpf",
            "output": "assets/fonts/gt_pressura_light_30.mpf"
            "output": "assets/fonts/gt_pressura/gt_pressura_light_30.mpf"
        },
        {
            "name": "./fonts/common/gt_pressura_regular_30.mpf",
            "output": "assets/fonts/gt_pressura_regular_30.mpf"
            "output": "assets/fonts/gt_pressura/gt_pressura_regular_30.mpf"
        },
        {
            "name": "./fonts/common/gt_pressura_bold_30.mpf",
            "output": "assets/fonts/gt_pressura_bold_30.mpf"
            "output": "assets/fonts/gt_pressura/gt_pressura_bold_30.mpf"
        },
        {
            "name": "./fonts/common/gt_pressura_regular_46.mpf",
            "output": "assets/fonts/gt_pressura_regular_46.mpf"
            "output": "assets/fonts/gt_pressura/gt_pressura_regular_46.mpf"
        },
        {
            "name": "./fonts/common/gt_pressura_light_46.mpf",
            "output": "assets/fonts/gt_pressura_light_46.mpf"
            "output": "assets/fonts/gt_pressura/gt_pressura_light_46.mpf"
        },
        {
            "name": "./fonts/common/gt_pressura_light_90.mpf",
            "output": "assets/fonts/gt_pressura_light_90.mpf"
            "output": "assets/fonts/gt_pressura/gt_pressura_light_90.mpf"
        }
    ]
}