From 4651eb3cf98a27d50149f3e629a26776b1c7bebf Mon Sep 17 00:00:00 2001 From: Lefucjusz Date: Mon, 25 Sep 2023 11:45:16 +0200 Subject: [PATCH] [MOS-1033] Add 'beta' label to VoLTE switch for selected countries Added mechanism enabling to individually show or hide "beta" label on VoLTE switch for each country. --- image/system_a/data/lang/Deutsch.json | 3 +- image/system_a/data/lang/English.json | 3 +- image/system_a/data/lang/Espanol.json | 3 +- image/system_a/data/lang/Francais.json | 3 +- image/system_a/data/lang/Polski.json | 3 +- image/system_a/data/lang/Svenska.json | 3 +- .../ApplicationSettings.cpp | 10 +- .../ApplicationSettings.hpp | 3 +- .../display-keypad/DisplayAndKeypadWindow.cpp | 15 ++- .../windows/network/NetworkWindow.cpp | 119 ++++++++++-------- .../windows/network/NetworkWindow.hpp | 17 +-- .../service-cellular/VolteState.hpp | 3 +- .../src/ServiceCellularPriv.cpp | 20 +-- .../service-cellular/src/VolteHandler.hpp | 12 +- .../service-cellular/src/volte/ImsiParser.cpp | 11 +- .../service-cellular/src/volte/ImsiParser.hpp | 13 +- .../src/volte/ImsiParser_Austria.hpp | 7 +- .../src/volte/ImsiParser_Canada.hpp | 15 ++- .../src/volte/ImsiParser_Denmark.hpp | 5 +- .../src/volte/ImsiParser_Germany.hpp | 8 +- .../src/volte/ImsiParser_GreatBritain.hpp | 5 +- .../src/volte/ImsiParser_Netherlands.hpp | 8 +- .../src/volte/ImsiParser_Poland.hpp | 6 +- .../src/volte/ImsiParser_UnitedStates.hpp | 6 +- .../src/volte/VolteAllowedList.cpp | 17 ++- .../src/volte/VolteAllowedList.hpp | 1 + .../src/volte/VolteAllowedListInterface.hpp | 2 + .../src/volte/VolteCapabilityHandler.cpp | 17 ++- .../src/volte/VolteCapabilityHandler.hpp | 3 +- .../tests/unittest_volteCapabilityHandler.cpp | 38 +++++- pure_changelog.md | 1 + 31 files changed, 255 insertions(+), 125 deletions(-) diff --git a/image/system_a/data/lang/Deutsch.json b/image/system_a/data/lang/Deutsch.json index 660e6cb98594237a654a516f44b2db6092e3915d..e1534efb70e4fd37ed35612107ef08c8b55c797a 100644 --- a/image/system_a/data/lang/Deutsch.json +++ b/image/system_a/data/lang/Deutsch.json @@ -442,7 +442,7 @@ "app_settings_date_and_time_time_zone": "Zeitzone", "app_settings_disp_key": "Display und Tastenfeld", "app_settings_display": "Display", - "app_settings_display_dark_mode": "Dunkelmodus (Beta)", + "app_settings_display_dark_mode": "Dunkelmodus", "app_settings_display_display_light": "Displaylicht", "app_settings_display_factory_reset_confirmation": "Dadurch wird dein Pure ausgeschaltet. Schalte es wieder ein, um mit dem Prozess fortzufahren.\nTelefon jetzt ausschalten?", "app_settings_display_font_size": "Schriftgr\u00f6\u00dfe", @@ -562,6 +562,7 @@ "common_april": "April", "common_august": "August", "common_back": "ZUR\u00dcCK", + "common_beta": "(beta)", "common_call": "ANRUFEN", "common_check": "AUSW\u00c4HLEN", "common_confirm": "BEST\u00c4TIGEN", diff --git a/image/system_a/data/lang/English.json b/image/system_a/data/lang/English.json index 520def25c8bc53cc5233ed4446a62cccc75dab18..98013a73048a630bf980d57e6a8623993743e258 100644 --- a/image/system_a/data/lang/English.json +++ b/image/system_a/data/lang/English.json @@ -446,7 +446,7 @@ "app_settings_date_and_time_time_zone": "Time zone", "app_settings_disp_key": "Display and keypad", "app_settings_display": "Display", - "app_settings_display_dark_mode": "Dark mode (Beta)", + "app_settings_display_dark_mode": "Dark mode", "app_settings_display_display_light": "Display light", "app_settings_display_factory_reset_confirmation": "Your Pure will turn off. Turn it on manually to continue the process.\nTurn off the phone now?", "app_settings_display_font_size": "Font size", @@ -564,6 +564,7 @@ "common_april": "April", "common_august": "August", "common_back": "BACK", + "common_beta": "(beta)", "common_call": "CALL", "common_check": "CHECK", "common_confirm": "CONFIRM", diff --git a/image/system_a/data/lang/Espanol.json b/image/system_a/data/lang/Espanol.json index c63f8579abc4ff9ede27b2636aae28e187f940b4..1e45b3156fa7341fb50d470fb9a121f95c199d71 100644 --- a/image/system_a/data/lang/Espanol.json +++ b/image/system_a/data/lang/Espanol.json @@ -441,7 +441,7 @@ "app_settings_date_and_time_time_zone": "Zona horaria", "app_settings_disp_key": "Pantalla y teclado num\u00e9rico", "app_settings_display": "Pantalla", - "app_settings_display_dark_mode": "Modo oscuro (Beta)", + "app_settings_display_dark_mode": "Modo oscuro", "app_settings_display_display_light": "Luz de pantalla", "app_settings_display_factory_reset_confirmation": "Tu Pure se va a apagar. Enci\u00e9ndelo manualmente para continuar.\n\u00bfQuieres apagar el tel\u00e9fono ahora?", "app_settings_display_font_size": "Tama\u00f1o de la fuente", @@ -562,6 +562,7 @@ "common_april": "Abril", "common_august": "Agosto", "common_back": "ATR\u00c1S", + "common_beta": "(beta)", "common_call": "LLAMAR", "common_check": "MARCAR", "common_confirm": "CONFIRMAR", diff --git a/image/system_a/data/lang/Francais.json b/image/system_a/data/lang/Francais.json index a78e035f4241462470cb8b5d9c5c6c3f0ad8ded5..7cdafb94497a76a3c7610481086f5ed754c7db5a 100644 --- a/image/system_a/data/lang/Francais.json +++ b/image/system_a/data/lang/Francais.json @@ -408,7 +408,7 @@ "app_settings_date_and_time_time_zone": "Fuseau horaire", "app_settings_disp_key": "Affichage et clavier", "app_settings_display": "Affichage", - "app_settings_display_dark_mode": "Mode sombre (Beta)", + "app_settings_display_dark_mode": "Mode sombre", "app_settings_display_display_light": "Lumi\u00e8re d'affichage", "app_settings_display_factory_reset_confirmation": "Votre Pure va s'\u00e9teindre. Allumez-la manuellement pour continuer.\n\u00c9teindre le t\u00e9l\u00e9phone?", "app_settings_display_font_size": "Taille de police", @@ -529,6 +529,7 @@ "common_april": "Avril", "common_august": "Ao\u00fbt", "common_back": "RETOUR", + "common_beta": "(beta)", "common_call": "APPELER", "common_check": "COCHER", "common_confirm": "CONFIRMER", diff --git a/image/system_a/data/lang/Polski.json b/image/system_a/data/lang/Polski.json index 54ffa46b1fcafa440ad80712af1055aa8719be88..b172dc3cfb205cf57da8734de2eaddaf54d2c466 100644 --- a/image/system_a/data/lang/Polski.json +++ b/image/system_a/data/lang/Polski.json @@ -435,7 +435,7 @@ "app_settings_date_and_time_time_zone": "Strefa czasowa", "app_settings_disp_key": "Ekran i klawiatura", "app_settings_display": "Wy\u015bwietlacz", - "app_settings_display_dark_mode": "Tryb nocny (Beta)", + "app_settings_display_dark_mode": "Tryb nocny", "app_settings_display_display_light": "Pod\u015bwietlenie ekranu", "app_settings_display_factory_reset_confirmation": "Pure zostanie teraz wy\u0142\u0105czony. Aby rozpocz\u0105\u0107 proces, w\u0142\u0105cz go ponownie.\nWy\u0142\u0105czy\u0107 telefon?", "app_settings_display_font_size": "Rozmiar fontu", @@ -556,6 +556,7 @@ "common_april": "Kwiecie\u0144", "common_august": "Sierpie\u0144", "common_back": "WR\u00d3\u0106", + "common_beta": "(beta)", "common_call": "ZADZWO\u0143", "common_check": "ZAZNACZ", "common_confirm": "POTWIERD\u0179", diff --git a/image/system_a/data/lang/Svenska.json b/image/system_a/data/lang/Svenska.json index c019723c92a212f10009ec7f4c4e3247ab4f3421..22f53eafb5bbb5b4a9aacc156dbb5173eb2c127f 100644 --- a/image/system_a/data/lang/Svenska.json +++ b/image/system_a/data/lang/Svenska.json @@ -287,7 +287,7 @@ "app_settings_date_and_time_time_zone": "Tidszon", "app_settings_disp_key": "Sk\u00e4rm och knappar", "app_settings_display": "Sk\u00e4rm", - "app_settings_display_dark_mode": "M\u00f6rkt l\u00e4ge (Beta)", + "app_settings_display_dark_mode": "M\u00f6rkt l\u00e4ge", "app_settings_display_display_light": "Sk\u00e4rmbelysning", "app_settings_display_factory_reset_confirmation": "Din Pure st\u00e4ngs av. S\u00e4tt p\u00e5 den manuellt f\u00f6r att forts\u00e4tta.\nSt\u00e4ng av telefonen nu?", "app_settings_display_font_size": "Teckenstorlek", @@ -390,6 +390,7 @@ "common_april": "April", "common_august": "Augusti", "common_back": "TILLBAKA", + "common_beta": "(beta)", "common_call": "RING", "common_check": "MARKERA", "common_confirm": "BEKR\u00c4FTA", diff --git a/module-apps/application-settings/ApplicationSettings.cpp b/module-apps/application-settings/ApplicationSettings.cpp index 4e174932e80823a07f3aeece2b7bcd59239440a4..0ad749f0eeff1745765d18cea9fbbe5b76da733c 100644 --- a/module-apps/application-settings/ApplicationSettings.cpp +++ b/module-apps/application-settings/ApplicationSettings.cpp @@ -93,6 +93,11 @@ #include #include +namespace +{ + constexpr auto applicationSettingsStackSize = 1024 * 6; +} + namespace app { namespace settings @@ -100,13 +105,12 @@ namespace app constexpr inline auto operators_on = "operators_on"; } // namespace settings - static constexpr auto settingStackDepth = 1024 * 6; // 6Kb stack size - ApplicationSettings::ApplicationSettings(std::string name, std::string parent, StatusIndicators statusIndicators, StartInBackground startInBackground) - : Application(std::move(name), std::move(parent), statusIndicators, startInBackground, settingStackDepth), + : Application( + std::move(name), std::move(parent), statusIndicators, startInBackground, applicationSettingsStackSize), AsyncCallbackReceiver{this}, soundsPlayer{std::make_shared(this)} { bus.channels.push_back(sys::BusChannel::ServiceAudioNotifications); diff --git a/module-apps/application-settings/include/application-settings/ApplicationSettings.hpp b/module-apps/application-settings/include/application-settings/ApplicationSettings.hpp index 1304f8b93e74e0606838ca56b7f0c80e148d0017..96ed2984ce0970d6581e60ddbf38be1a80c768a3 100644 --- a/module-apps/application-settings/include/application-settings/ApplicationSettings.hpp +++ b/module-apps/application-settings/include/application-settings/ApplicationSettings.hpp @@ -1,4 +1,4 @@ -// Copyright (c) 2017-2022, Mudita Sp. z.o.o. All rights reserved. +// Copyright (c) 2017-2023, Mudita Sp. z.o.o. All rights reserved. // For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md #pragma once @@ -188,7 +188,6 @@ namespace app void sendVolteChangeRequest(bool enable); private: - void attachQuotesWindows(); void switchToAllDevicesViaBtErrorPrompt(std::shared_ptr msg, const std::string &errorMsg); auto handleSimNotification() -> sys::MessagePointer; diff --git a/module-apps/application-settings/windows/display-keypad/DisplayAndKeypadWindow.cpp b/module-apps/application-settings/windows/display-keypad/DisplayAndKeypadWindow.cpp index ac5e863f91dcf5468be38e43229222ca91755270..cf7cd24cf83af372b8918d5ba1bbebf2b42b0de7 100644 --- a/module-apps/application-settings/windows/display-keypad/DisplayAndKeypadWindow.cpp +++ b/module-apps/application-settings/windows/display-keypad/DisplayAndKeypadWindow.cpp @@ -1,10 +1,9 @@ -// Copyright (c) 2017-2021, Mudita Sp. z.o.o. All rights reserved. +// Copyright (c) 2017-2023, Mudita Sp. z.o.o. All rights reserved. // For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md #include "DisplayAndKeypadWindow.hpp" #include - #include namespace gui @@ -21,10 +20,10 @@ namespace gui { std::list optionList; - auto addMenu = [&](UTF8 name, std::string window) { + auto addMenu = [&](const UTF8 &name, const std::string &window) { optionList.emplace_back(std::make_unique( name, - [=](gui::Item &item) { + [=]([[maybe_unused]] gui::Item &item) { if (window.empty()) { return false; } @@ -42,7 +41,7 @@ namespace gui gui::option::SettingRightItem::ArrowWhite)); }; - auto addOnOffOption = [&](const UTF8 &text, std::function onActivated) { + auto addOnOffOption = [&](const UTF8 &text, const std::function &onActivated) { optionList.emplace_back(std::make_unique( text, [=](gui::Item &item) mutable { return onActivated(item); }, @@ -63,10 +62,14 @@ namespace gui addMenu(utils::translate("app_settings_display_wallpaper"), gui::window::name::wallpaper); addMenu(utils::translate("app_settings_display_keypad_light"), gui::window::name::keypad_light); addMenu(utils::translate("app_settings_display_input_language"), gui::window::name::input_language); - addOnOffOption(utils::translate("app_settings_display_dark_mode"), [this](gui::Item & /*item*/) { + + const auto &darkModeLabelText = "" + utils::translate("app_settings_display_dark_mode") + " " + + utils::translate("common_beta") + ""; + addOnOffOption(darkModeLabelText, [this](gui::Item & /*item*/) { switchDisplayMode(); return true; }); + return optionList; } diff --git a/module-apps/application-settings/windows/network/NetworkWindow.cpp b/module-apps/application-settings/windows/network/NetworkWindow.cpp index e31c0c7870a646ccfb0f9b343ea48e65a8fb5f46..c8022c1a994697732e8466b89cbbe921ec996b1c 100644 --- a/module-apps/application-settings/windows/network/NetworkWindow.cpp +++ b/module-apps/application-settings/windows/network/NetworkWindow.cpp @@ -1,4 +1,4 @@ -// Copyright (c) 2017-2021, Mudita Sp. z.o.o. All rights reserved. +// Copyright (c) 2017-2023, Mudita Sp. z.o.o. All rights reserved. // For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md #include "NetworkWindow.hpp" @@ -12,8 +12,7 @@ namespace { cellular::VolteState getVolteStateFromSettingsApp(app::ApplicationCommon *application) { - auto const *settingsApp = static_cast(application); - return settingsApp->getVolteState(); + return static_cast(application)->getVolteState(); } } // namespace @@ -33,14 +32,12 @@ namespace gui auto NetworkWindow::buildOptionsList() -> std::list { - using namespace cellular; + std::list optionsList; - std::list optList; - - optList.emplace_back(std::make_unique( + optionsList.emplace_back(std::make_unique( utils::translate("app_settings_network_sim_cards"), - [=](gui::Item &item) { - this->application->switchWindow(gui::window::name::sim_cards, nullptr); + [=]([[maybe_unused]] gui::Item &item) { + application->switchWindow(gui::window::name::sim_cards, nullptr); return true; }, nullptr, @@ -48,66 +45,46 @@ namespace gui gui::option::SettingRightItem::ArrowWhite, false)); - optList.emplace_back(std::make_unique( - [this]() { - auto ret = utils::translate("app_settings_network_voice_over_lte"); - const auto volteState = getVolteStateFromSettingsApp(application); - if (!volteState.permitted) { - if (volteState.enablement == VolteState::Enablement::On) { - LOG_ERROR("[VoLTE] still enabled in modem despite not permitted by operator"); - } - ret += ": "; - ret += utils::translate("app_settings_network_volte_not_available"); - } - return ret; - }(), - [this](gui::Item &item) { + optionsList.emplace_back(std::make_unique( + getVolteLabel(), + [this]([[maybe_unused]] gui::Item &item) { const auto volteState = getVolteStateFromSettingsApp(application); if (!volteState.permitted) { return true; } - auto *settingsApp = static_cast(application); + + const auto settingsApp = static_cast(application); switch (volteState.enablement) { - case VolteState::Enablement::Off: + case cellular::VolteState::Enablement::Off: settingsApp->sendVolteChangeRequest(true); break; - case VolteState::Enablement::On: + case cellular::VolteState::Enablement::On: settingsApp->sendVolteChangeRequest(false); break; default: LOG_INFO("[VoLTE] skip request due to unsettled VoLTE state"); break; } + return true; }, [&](Item &item) { - navBar->setText(nav_bar::Side::Center, [&]() { - if (!item.focus) { - return utils::translate("common_select"); - } - return getVolteStateFromSettingsApp(application).permitted ? utils::translate("common_switch") : ""; - }()); + std::string labelText{}; + if (!item.focus) { + labelText = utils::translate("common_select"); + } + else if (getVolteStateFromSettingsApp(application).permitted) { + labelText = utils::translate("common_switch"); + } + navBar->setText(nav_bar::Side::Center, labelText); return true; }, nullptr, - [&]() { - const auto volteState = getVolteStateFromSettingsApp(application); - if (!volteState.permitted) { - return option::SettingRightItem::Disabled; - } - switch (volteState.enablement) { - case VolteState::Enablement::Off: - return option::SettingRightItem::Off; - case VolteState::Enablement::On: - return option::SettingRightItem::On; - default: - return option::SettingRightItem::Transiting; - } - }())); + getRightItemSetting())); #if DISABLED_SETTINGS_OPTIONS == 1 auto operatorsOn = operatorsSettings->getOperatorsOn(); - optList.emplace_back(std::make_unique( + optionsList.emplace_back(std::make_unique( utils::translate("app_settings_network_operator_auto_select"), [=](gui::Item &item) { operatorsSettings->setOperatorsOn(!operatorsOn); @@ -118,7 +95,7 @@ namespace gui nullptr, operatorsOn ? gui::option::SettingRightItem::On : gui::option::SettingRightItem::Off)); if (!operatorsOn) { - optList.emplace_back(std::make_unique( + optionsList.emplace_back(std::make_unique( utils::translate("app_settings_network_all_operators"), [=](gui::Item &item) { this->application->switchWindow(gui::window::name::all_operators, nullptr); @@ -131,10 +108,10 @@ namespace gui } #endif // DISABLED_SETTINGS_OPTIONS - optList.emplace_back(std::make_unique( + optionsList.emplace_back(std::make_unique( utils::translate("app_settings_network_apn_settings"), - [=](gui::Item &item) { - this->application->switchWindow(gui::window::name::apn_settings, nullptr); + [=]([[maybe_unused]] gui::Item &item) { + application->switchWindow(gui::window::name::apn_settings, nullptr); return true; }, nullptr, @@ -144,6 +121,44 @@ namespace gui navBar->setText(nav_bar::Side::Center, utils::translate(style::strings::common::select)); - return optList; + return optionsList; + } + + auto NetworkWindow::getVolteLabel() -> std::string + { + const auto &volteState = getVolteStateFromSettingsApp(application); + + auto labelText = "" + utils::translate("app_settings_network_voice_over_lte"); + if (!volteState.permitted) { + if (volteState.enablement == cellular::VolteState::Enablement::On) { + LOG_ERROR("[VoLTE] still enabled in modem despite not permitted by operator"); + } + labelText += ": "; + labelText += utils::translate("app_settings_network_volte_not_available"); + } + else if (volteState.beta) { + labelText += " " + utils::translate("common_beta") + ""; + } + labelText += ""; + + return labelText; + } + + auto NetworkWindow::getRightItemSetting() -> option::SettingRightItem + { + const auto &volteState = getVolteStateFromSettingsApp(application); + + if (!volteState.permitted) { + return option::SettingRightItem::Disabled; + } + + switch (volteState.enablement) { + case cellular::VolteState::Enablement::Off: + return option::SettingRightItem::Off; + case cellular::VolteState::Enablement::On: + return option::SettingRightItem::On; + default: + return option::SettingRightItem::Transiting; + } } } // namespace gui diff --git a/module-apps/application-settings/windows/network/NetworkWindow.hpp b/module-apps/application-settings/windows/network/NetworkWindow.hpp index 8adb73af9393bc3acd9e9cedd0d38fc7f2973a34..ec29d7d71906ea7688a2deb1cdfb95968b9c0ba9 100644 --- a/module-apps/application-settings/windows/network/NetworkWindow.hpp +++ b/module-apps/application-settings/windows/network/NetworkWindow.hpp @@ -1,4 +1,4 @@ -// Copyright (c) 2017-2021, Mudita Sp. z.o.o. All rights reserved. +// Copyright (c) 2017-2023, Mudita Sp. z.o.o. All rights reserved. // For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md #pragma once @@ -14,15 +14,16 @@ namespace gui { class NetworkWindow : public BaseSettingsWindow { - private: - auto buildOptionsList() -> std::list