From d528cac7df03906e67d64987e7c0b2ca5cfe6361 Mon Sep 17 00:00:00 2001 From: Maciej-Mudita Date: Tue, 8 Nov 2022 18:55:23 +0100 Subject: [PATCH] [MOS-641] Fix SIM cards window Creating menus and actions depending on the SIM card lock status. --- image/assets/lang/Deutsch.json | 5 +- image/assets/lang/English.json | 4 +- image/assets/lang/Espanol.json | 5 +- image/assets/lang/Francais.json | 4 +- image/assets/lang/Polski.json | 4 +- image/assets/lang/Svenska.json | 4 +- .../ApplicationSettings.cpp | 53 +++++--- .../ApplicationSettings.hpp | 24 ++-- .../network/SimPINSettingsPresenter.cpp | 2 +- .../windows/network/SimCardsWindow.cpp | 117 ++++++++++++++---- .../windows/network/SimCardsWindow.hpp | 10 ++ .../locks/data/SimLockMessages.hpp | 5 +- .../locks/handlers/SimLockHandler.cpp | 22 ++-- .../locks/handlers/SimLockHandler.hpp | 3 +- .../locks/handlers/SimLockSubject.cpp | 7 +- .../locks/handlers/SimLockSubject.hpp | 3 +- module-gui/gui/widgets/status-bar/SIM.cpp | 8 +- .../include/service-cellular/api/common.hpp | 4 +- .../service-cellular/api/request/sim.hpp | 14 +-- .../src/ServiceCellularPriv.cpp | 8 +- .../service-cellular/src/SimCard.cpp | 34 +++-- .../service-cellular/src/SimCard.hpp | 15 +-- module-utils/EventStore/EventStore.hpp | 13 +- .../services/appmgr/ApplicationManager.cpp | 4 +- products/PurePhone/sys/SystemManager.cpp | 3 +- pure_changelog.md | 1 + 26 files changed, 266 insertions(+), 110 deletions(-) diff --git a/image/assets/lang/Deutsch.json b/image/assets/lang/Deutsch.json index b0a594645535dc8dcb230a299ed1ff7ef5242fe9..4145c9d6ad67d9e09897a51c90dd6ce6d1fe7ed1 100644 --- a/image/assets/lang/Deutsch.json +++ b/image/assets/lang/Deutsch.json @@ -467,7 +467,9 @@ "app_settings_about": "Über Mudita Pure", "app_settings_title_languages": "Sprachauswahl", "app_settings_network_sim_cards": "SIM-Karten", - "app_settings_network_active_card": "Aktive Karte", + "app_settings_network_active_card": "Aktiver Slot", + "app_settings_network_unblock_card": "Entsperren Karte", + "app_settings_network_not_connected": "keine Karte", "app_settings_network_operator_auto_select": "Automatische Auswahl", "app_settings_network_all_operators": "Alle Bediener", "app_settings_network_pin_settings": "PIN-Einstellungen", @@ -475,7 +477,6 @@ "app_settings_network_pin_change_code": "PIN-Code ändern", "app_settings_network_import_contacts_from_sim_card": "Kontakte von SIM import.", "app_settings_network_import_contacts_duplicates": "Duplikate von SIM", - "app_settings_network_import_contacts_from_sim_card": "Kontakte von SIM-Karte importieren", "app_settings_network_import_contacts_from_sim_card_reading": "Import läuft...

Bitte warte einen Moment.
", "app_settings_network_import_contacts_from_sim_card_no_contacts": "Auf dieser SIM-Karte befinden

sich keine Kontakte.
", "app_settings_network_import_contacts_from_sim_card_duplicates": "Wir haben $DUPLICATES Duplikate gefunden. Möchten Sie

doppelte Kontakte importieren

und vorhandene ersetzen?
", diff --git a/image/assets/lang/English.json b/image/assets/lang/English.json index 3439174e4008ce340b68bb1ca62820f5ecc354fd..250f34490a1d157dcc16cfea7fa4ba56b3da7646 100644 --- a/image/assets/lang/English.json +++ b/image/assets/lang/English.json @@ -424,7 +424,9 @@ "app_settings_about": "About Mudita Pure", "app_settings_title_languages": "Language selection", "app_settings_network_sim_cards": "SIM cards", - "app_settings_network_active_card": "Active card", + "app_settings_network_active_card": "Active slot", + "app_settings_network_unblock_card": "Unblock card", + "app_settings_network_not_connected": "no card", "app_settings_network_operator_auto_select": "Operator auto-select", "app_settings_network_all_operators": "All operators", "app_settings_network_pin_settings": "PIN settings", diff --git a/image/assets/lang/Espanol.json b/image/assets/lang/Espanol.json index 821b8532a3f6f8d5d0e2838802836f26e31236dc..3ba5ac830bcfe650563ede14bdb2f1b89ca64ccc 100644 --- a/image/assets/lang/Espanol.json +++ b/image/assets/lang/Espanol.json @@ -467,7 +467,9 @@ "app_settings_about": "Sobre Mudita Pure", "app_settings_title_languages": "Selección de idioma", "app_settings_network_sim_cards": "Tarjetas SIM", - "app_settings_network_active_card": "Tarjeta activa", + "app_settings_network_active_card": "Toma activa", + "app_settings_network_unblock_card": "Desbloquear la tarjeta", + "app_settings_network_not_connected": "sin tarjeta", "app_settings_network_operator_auto_select": "Selección automática de operador", "app_settings_network_all_operators": "Todos los operadores", "app_settings_network_pin_settings": "Configuración de PIN", @@ -476,7 +478,6 @@ "app_settings_network_import_contacts_from_sim_card": "Importar contactos de la SIM", "app_settings_network_import_contacts": "Importar contactos", "app_settings_network_import_contacts_duplicates": "Duplicados de SIM", - "app_settings_network_import_contacts_from_sim_card": "Importar contactos de la tarjeta SIM", "app_settings_network_import_contacts_from_sim_card_reading": "Importación en curso ...

Espere un momento.
", "app_settings_network_import_contacts_from_sim_card_no_contacts": "No hay contactos

en esta tarjeta SIM.
", "app_settings_network_import_contacts_from_sim_card_duplicates": "Encontramos $DUPLICATES duplicados. ¿Quieres importar

contactos duplicados y reemplazar los existentes?
", diff --git a/image/assets/lang/Francais.json b/image/assets/lang/Francais.json index a544935d7c3a957aca0beb0cb48455c3e14667ec..394a7397d1e380e3ff413748d70ec145b781d46b 100644 --- a/image/assets/lang/Francais.json +++ b/image/assets/lang/Francais.json @@ -435,7 +435,9 @@ "app_settings_about": "À propos de Mudita Pure", "app_settings_title_languages": "Sélection de langue", "app_settings_network_sim_cards": "Cartes SIM", - "app_settings_network_active_card": "Activer la carte", + "app_settings_network_active_card": "Fente active", + "app_settings_network_unblock_card": "Débloquer la carte", + "app_settings_network_not_connected": "pas de carte", "app_settings_network_operator_auto_select": "Operator auto-select", "app_settings_network_all_operators": "All operators", "app_settings_network_pin_settings": "PIN settings", diff --git a/image/assets/lang/Polski.json b/image/assets/lang/Polski.json index 49e669344ffbacfb46af05f280a963dca29dd97d..08086afd87f63235cefaac453d7a168c9c2c560f 100644 --- a/image/assets/lang/Polski.json +++ b/image/assets/lang/Polski.json @@ -478,7 +478,9 @@ "app_settings_about": "O Mudita Pure", "app_settings_title_languages": "Wybór języka", "app_settings_network_sim_cards": "Karty SIM", - "app_settings_network_active_card": "Aktywna karta", + "app_settings_network_active_card": "Aktywny slot", + "app_settings_network_unblock_card": "Odblokuj kartę", + "app_settings_network_not_connected": "brak karty", "app_settings_network_operator_auto_select": "Automatyczny wybór operatora", "app_settings_network_all_operators": "Wszyscy operatorzy", "app_settings_network_pin_settings": "Ustawienia PIN", diff --git a/image/assets/lang/Svenska.json b/image/assets/lang/Svenska.json index 49720954196934ee6433fbfd7da9cc2a046a8501..27560b10b6120a7f17451403204604ee946092c8 100644 --- a/image/assets/lang/Svenska.json +++ b/image/assets/lang/Svenska.json @@ -377,7 +377,9 @@ "app_settings_about": "Om Mudita Pure", "app_settings_title_languages": "Språkval", "app_settings_network_sim_cards": "SIM-kort", - "app_settings_network_active_card": "Aktivt kort", + "app_settings_network_active_card": "Aktivt slot", + "app_settings_network_unblock_card": "Avblockera kort", + "app_settings_network_not_connected": "inget kort", "app_settings_network_operator_auto_select": "Välj operatör automatiskt", "app_settings_network_all_operators": "Alla operatörer", "app_settings_network_import_contacts_from_sim_card": "Importera kontakter från SIM", diff --git a/module-apps/application-settings/ApplicationSettings.cpp b/module-apps/application-settings/ApplicationSettings.cpp index abf6d138088b6952b7295d4e5c34e33b92450e6f..d5917ce01107be65c1857f6614d5af5a653a8ee0 100644 --- a/module-apps/application-settings/ApplicationSettings.cpp +++ b/module-apps/application-settings/ApplicationSettings.cpp @@ -109,13 +109,14 @@ namespace app bus.channels.push_back(sys::BusChannel::ServiceAudioNotifications); bus.channels.push_back(sys::BusChannel::BluetoothNotifications); bus.channels.push_back(sys::BusChannel::BluetoothModeChanges); + bus.channels.push_back(sys::BusChannel::ServiceCellularNotifications); CellularServiceAPI::SubscribeForOwnNumber(this, [&](const std::string &number) { selectedSimNumber = number; LOG_DEBUG("Sim number changed"); }); - if ((Store::GSM::SIM::SIM1 == selectedSim || Store::GSM::SIM::SIM2 == selectedSim) && - Store::GSM::get()->sim == selectedSim) { + if ((Store::GSM::SIM::SIM1 == simState || Store::GSM::SIM::SIM2 == simState) && + Store::GSM::get()->sim == simState) { CellularServiceAPI::RequestForOwnNumber(this); } bluetoothSettingsModel = std::make_shared(this); @@ -153,15 +154,19 @@ namespace app return ret; } connect(typeid(cellular::msg::notification::SimReady), [&](sys::Message *) { - selectedSim = Store::GSM::get()->selected; CellularServiceAPI::RequestForOwnNumber(this); - auto currentWindow = getCurrentWindow(); - if (gui::window::name::sim_cards == currentWindow->getName()) { - updateCurrentWindow(); - } - return sys::MessageNone{}; + return handleSimNotification(); }); + connect(typeid(cellular::msg::notification::SimBlocked), + [&](sys::Message *) { return handleSimNotification(); }); + + connect(typeid(cellular::msg::notification::SimNeedPin), + [&](sys::Message *) { return handleSimNotification(); }); + + connect(typeid(cellular::msg::notification::SimNeedPuk), + [&](sys::Message *) { return handleSimNotification(); }); + connect(typeid(::sys::bluetooth::BluetoothModeChanged), [&](sys::Message *msg) { const auto message = static_cast<::sys::bluetooth::BluetoothModeChanged *>(msg); const auto newState = message->getBluetoothMode(); @@ -288,11 +293,10 @@ namespace app return sys::MessageNone{}; }); - connect(typeid(cellular::msg::request::sim::GetLockState::Response), [&](sys::Message *msg) { - auto simCardPinLockState = static_cast(msg); - auto pinSettingsLockStateData = - std::make_unique(simCardPinLockState->locked); - updateCurrentWindow(std::move(pinSettingsLockStateData)); + connect(typeid(cellular::msg::request::sim::GetPinSettings::Response), [&](sys::Message *msg) { + auto simCardPinSettings = static_cast(msg); + auto simCardPinSettingsData = std::make_unique(simCardPinSettings->locked); + updateCurrentWindow(std::move(simCardPinSettingsData)); return sys::MessageNone{}; }); @@ -596,22 +600,28 @@ namespace app ApplicationCommon::returnToPreviousWindow(); } - void ApplicationSettings::setSim(Store::GSM::SIM sim) + void ApplicationSettings::setSelectedSim(Store::GSM::SelectedSIM sim) { - auto arg = (sim == Store::GSM::SIM::SIM2) ? cellular::api::SimSlot::SIM2 : cellular::api::SimSlot::SIM1; + auto arg = (sim == Store::GSM::SelectedSIM::SIM2) ? cellular::api::SimSlot::SIM2 : cellular::api::SimSlot::SIM1; getSimLockSubject().setSim(arg); } - void ApplicationSettings::updateSim() + void ApplicationSettings::updateSimParam() { selectedSim = Store::GSM::get()->selected; + simState = Store::GSM::get()->sim; } - Store::GSM::SIM ApplicationSettings::getSim() + Store::GSM::SelectedSIM ApplicationSettings::getSelectedSim() { return selectedSim; } + Store::GSM::SIM ApplicationSettings::getSimState() + { + return simState; + } + void ApplicationSettings::operatorOnChanged(const std::string &value) { LOG_DEBUG("[ApplicationSettings::operatorOnChanged] value=%s", value.c_str()); @@ -786,4 +796,13 @@ namespace app soundsPlayer->stop(notification->token); return sys::MessageNone{}; } + + auto ApplicationSettings::handleSimNotification() -> sys::MessagePointer + { + auto currentWindow = getCurrentWindow(); + if (gui::window::name::sim_cards == currentWindow->getName()) { + updateCurrentWindow(); + } + return sys::MessageNone{}; + } } /* namespace app */ diff --git a/module-apps/application-settings/include/application-settings/ApplicationSettings.hpp b/module-apps/application-settings/include/application-settings/ApplicationSettings.hpp index 234e951af01e4327c95fe3aec8d71c3e1748c8e3..4304acfad8ea2199c0c02ec537e956436e9451c2 100644 --- a/module-apps/application-settings/include/application-settings/ApplicationSettings.hpp +++ b/module-apps/application-settings/include/application-settings/ApplicationSettings.hpp @@ -25,11 +25,12 @@ namespace app class SimParams { public: - virtual ~SimParams() = default; - virtual void setSim(Store::GSM::SIM sim) = 0; - virtual void updateSim() = 0; - virtual Store::GSM::SIM getSim() = 0; - virtual std::string getNumber() = 0; + virtual ~SimParams() = default; + virtual void updateSimParam() = 0; + virtual void setSelectedSim(Store::GSM::SelectedSIM sim) = 0; + virtual Store::GSM::SelectedSIM getSelectedSim() = 0; + virtual Store::GSM::SIM getSimState() = 0; + virtual std::string getNumber() = 0; }; class OperatorsSettings { @@ -144,9 +145,10 @@ namespace app void destroyUserInterface() override; void returnToPreviousWindow() override; - void setSim(Store::GSM::SIM sim) override; - void updateSim() override; - Store::GSM::SIM getSim() override; + void updateSimParam() override; + void setSelectedSim(Store::GSM::SelectedSIM sim) override; + Store::GSM::SelectedSIM getSelectedSim() override; + Store::GSM::SIM getSimState() override; std::string getNumber() override; void operatorOnChanged(const std::string &value); @@ -185,11 +187,13 @@ namespace app void attachQuotesWindows(); void switchToAllDevicesViaBtErrorPrompt(std::shared_ptr msg, const std::string &errorMsg); + auto handleSimNotification() -> sys::MessagePointer; auto handleAudioStop(AudioStopNotification *notification) -> sys::MessagePointer; std::shared_ptr soundsPlayer; - Store::GSM::SIM selectedSim = Store::GSM::get()->selected; - std::string selectedSimNumber = {}; + Store::GSM::SelectedSIM selectedSim = Store::GSM::get()->selected; + Store::GSM::SIM simState = Store::GSM::get()->sim; + std::string selectedSimNumber = {}; bool operatorsOn = false; bool notificationsWhenLocked = true; diff --git a/module-apps/application-settings/presenter/network/SimPINSettingsPresenter.cpp b/module-apps/application-settings/presenter/network/SimPINSettingsPresenter.cpp index 0554d3befdd9b2c0e9606b5f1709f080d2b57c21..a9533ad88e1e40df03a18cf535d85528c282351c 100644 --- a/module-apps/application-settings/presenter/network/SimPINSettingsPresenter.cpp +++ b/module-apps/application-settings/presenter/network/SimPINSettingsPresenter.cpp @@ -33,7 +33,7 @@ bool SimPINSettingsPresenter::isPinEnabled() const noexcept void SimPINSettingsPresenter::requestLockState() const { - application->bus.sendUnicast(); + application->bus.sendUnicast(); } void SimPINSettingsPresenter::onBeforeShow(gui::ShowMode mode, gui::SwitchData *data) diff --git a/module-apps/application-settings/windows/network/SimCardsWindow.cpp b/module-apps/application-settings/windows/network/SimCardsWindow.cpp index 2f180b17d8c453794d72b6a2f88580c02263c802..e2eb1e04d13c70c40763bb80b91ebf1a8bdee4cf 100644 --- a/module-apps/application-settings/windows/network/SimCardsWindow.cpp +++ b/module-apps/application-settings/windows/network/SimCardsWindow.cpp @@ -3,10 +3,8 @@ #include "SimCardsWindow.hpp" -#include #include #include - #include namespace gui @@ -18,7 +16,7 @@ namespace gui void SimCardsWindow::onBeforeShow(ShowMode mode, SwitchData *data) { setTitle(utils::translate("app_settings_network_sim_cards")); - simParams->updateSim(); + simParams->updateSimParam(); BaseSettingsWindow::onBeforeShow(mode, data); } @@ -27,43 +25,98 @@ namespace gui std::list optList; std::string simStr; auto phoneNumber = simParams->getNumber(); - auto sim = simParams->getSim(); - switch (sim) { - case Store::GSM::SIM::SIM1: + auto selectedSim = simParams->getSelectedSim(); + auto simState = simParams->getSimState(); + + switch (selectedSim) { + case Store::GSM::SelectedSIM::SIM1: simStr = utils::translate("app_settings_network_sim1"); break; - case Store::GSM::SIM::SIM2: + case Store::GSM::SelectedSIM::SIM2: simStr = utils::translate("app_settings_network_sim2"); break; + case Store::GSM::SelectedSIM::NONE: + simStr = utils::translate("app_settings_network_sim_none"); + phoneNumber = {}; + break; + } + + switch (simState) { + case Store::GSM::SIM::SIM1: + case Store::GSM::SIM::SIM2: + optList = createListWithActiveSim(selectedSim, simStr, phoneNumber); + break; + case Store::GSM::SIM::SIM_NEED_PIN: + case Store::GSM::SIM::SIM_NEED_PUK: + case Store::GSM::SIM::SIM_LOCKED: + optList = createListWithBlockedSim(selectedSim, simStr); + break; case Store::GSM::SIM::NONE: case Store::GSM::SIM::SIM_FAIL: case Store::GSM::SIM::SIM_UNKNOWN: - simStr = utils::translate("app_settings_network_sim_none"); - phoneNumber = {}; + optList = createListWithNoConnectedSim(selectedSim, simStr); break; } + navBar->setText(nav_bar::Side::Center, utils::translate(style::strings::common::select)); + + return optList; + } + + std::list SimCardsWindow::createListWithNoConnectedSim(const Store::GSM::SelectedSIM sim, + const std::string &simStr) + { + std::list optList; + optList.emplace_back(std::make_unique( + utils::translate("app_settings_network_active_card") + " (" + + utils::translate("app_settings_network_not_connected") + ")", + [=](gui::Item &item) { return createSwitchSimAction(sim); }, + [=](gui::Item &item) { return createNavBarText(item); }, + this, + gui::option::SettingRightItem::Text, + false, + simStr, + true)); + + return optList; + } + + std::list SimCardsWindow::createListWithBlockedSim(const Store::GSM::SelectedSIM sim, + const std::string &simStr) + { + std::list optList; optList.emplace_back(std::make_unique( utils::translate("app_settings_network_active_card"), - [=](gui::Item &item) { - if (Store::GSM::SIM::SIM1 == sim) { - simParams->setSim(Store::GSM::SIM::SIM2); - } - else { - simParams->setSim(Store::GSM::SIM::SIM1); - } + [=](gui::Item &item) { return createSwitchSimAction(sim); }, + [=](gui::Item &item) { return createNavBarText(item); }, + this, + gui::option::SettingRightItem::Text, + false, + simStr, + true)); - return true; - }, + optList.emplace_back(std::make_unique( + utils::translate("app_settings_network_unblock_card"), [=](gui::Item &item) { - if (item.focus) { - this->setNavBarText(utils::translate(style::strings::common::Switch), nav_bar::Side::Center); - } - else { - this->setNavBarText(utils::translate(style::strings::common::select), nav_bar::Side::Center); - } + application->getSimLockSubject().unblockSim(); return true; }, + nullptr, + nullptr, + gui::option::SettingRightItem::ArrowWhite)); + + return optList; + } + + std::list SimCardsWindow::createListWithActiveSim(const Store::GSM::SelectedSIM sim, + const std::string &simStr, + const std::string &phoneNumber) + { + std::list optList; + optList.emplace_back(std::make_unique( + utils::translate("app_settings_network_active_card"), + [=](gui::Item &item) { return createSwitchSimAction(sim); }, + [=](gui::Item &item) { return createNavBarText(item); }, this, gui::option::SettingRightItem::Text, false, @@ -92,8 +145,20 @@ namespace gui nullptr, gui::option::SettingRightItem::ArrowWhite)); - navBar->setText(nav_bar::Side::Center, utils::translate(style::strings::common::select)); - return optList; } + + bool SimCardsWindow::createSwitchSimAction(const Store::GSM::SelectedSIM selectedSim) const + { + selectedSim == Store::GSM::SelectedSIM::SIM1 ? simParams->setSelectedSim(Store::GSM::SelectedSIM::SIM2) + : simParams->setSelectedSim(Store::GSM::SelectedSIM::SIM1); + return true; + } + + bool SimCardsWindow::createNavBarText(const gui::Item &item) + { + item.focus ? this->setNavBarText(utils::translate(style::strings::common::Switch), nav_bar::Side::Center) + : this->setNavBarText(utils::translate(style::strings::common::select), nav_bar::Side::Center); + return true; + } } // namespace gui diff --git a/module-apps/application-settings/windows/network/SimCardsWindow.hpp b/module-apps/application-settings/windows/network/SimCardsWindow.hpp index 3ef94b23efb389503529e8efd529937dd90dab8a..20a22913e5bb7136209656edd919b0b98b4ea1b2 100644 --- a/module-apps/application-settings/windows/network/SimCardsWindow.hpp +++ b/module-apps/application-settings/windows/network/SimCardsWindow.hpp @@ -4,6 +4,7 @@ #pragma once #include +#include namespace app::settingsInterface { @@ -18,6 +19,15 @@ namespace gui auto buildOptionsList() -> std::list