D image/assets/images/big_circle_placeholder.vpi => image/assets/images/big_circle_placeholder.vpi +0 -0
M image/assets/lang/English.json => image/assets/lang/English.json +2 -0
@@ 249,6 249,8 @@
"app_desktop_sim_setup_wrong_puk": "<text>Wrong PUK code.<br></br>You have <token>$ATTEMPTS</token> attempts left</text>",
"app_desktop_sim_setup_wrong_puk_last_attempt": "<text>Wrong PUK code.<br></br>You have 1 attempt left</text>",
"app_desktop_sim_setup_wrong_puk_last_attempt_warning": "<text>If the code is wrong this time, the<br></br>SIM card will be blocked and you'll<br></br>have to contact the operator.</text>",
+ "app_desktop_sim_card_unlocked": "SIM card unlocked",
+ "app_desktop_sim_card_locked": "SIM card locked",
"app_desktop_screen_enter_passcode_to_unlock": "<text>Enter the passcode<br></br>to unlock:</text>",
"app_desktop_screen_wrong_passcode_last_attempt": "<text>Wrong passcode.<br></br>You have 1 attempt left.</text>",
"app_desktop_screen_wrong_passcode_last_attempt_warning": "<text>If the passcode is wrong this time,<br></br>you'll have to wait <token>$MINUTES</token> minutes<br></br>before trying again.</text>",
M module-apps/application-desktop/ApplicationDesktop.cpp => module-apps/application-desktop/ApplicationDesktop.cpp +27 -3
@@ 104,12 104,14 @@ namespace app
});
addActionReceiver(app::manager::actions::RequestPinDisable, [this](auto &&data) {
- lockHandler.handlePinDisableRequest(std::forward<decltype(data)>(data));
+ lockHandler.handlePinEnableRequest(std::forward<decltype(data)>(data),
+ CellularSimCardLockDataMessage::SimCardLock::Unlocked);
return actionHandled();
});
addActionReceiver(app::manager::actions::RequestPinEnable, [this](auto &&data) {
- lockHandler.handlePinEnableRequest(std::forward<decltype(data)>(data));
+ lockHandler.handlePinEnableRequest(std::forward<decltype(data)>(data),
+ CellularSimCardLockDataMessage::SimCardLock::Locked);
return actionHandled();
});
@@ 415,7 417,7 @@ namespace app
[](app::ApplicationDesktop *app) -> std::unique_ptr<gui::DialogMetadataMessage> {
return std::make_unique<gui::DialogMetadataMessage>(
gui::DialogMetadata{utils::localize.get("app_desktop_sim_change_pin"),
- "big_circle_placeholder",
+ "success_icon_W_G",
utils::localize.get("app_desktop_sim_pin_changed_successfully"),
"",
[app]() {
@@ 445,6 447,28 @@ namespace app
return sys::MessageNone{};
});
+ connect(typeid(CellularSimCardLockResponseMessage), [&](sys::Message *request) -> sys::MessagePointer {
+ auto response = dynamic_cast<CellularSimCardLockResponseMessage *>(request);
+ if (response->retCode) {
+ auto metaData = std::make_unique<gui::DialogMetadataMessage>(gui::DialogMetadata{
+ "",
+ "success_icon_W_G",
+ response->getSimCardLock() == CellularSimCardLockDataMessage::SimCardLock::Unlocked
+ ? utils::localize.get("app_desktop_sim_card_unlocked")
+ : utils::localize.get("app_desktop_sim_card_locked"),
+ "",
+ [this]() {
+ switchWindow(app::window::name::desktop_main_window);
+ return true;
+ }});
+ switchWindow(gui::window::name::dialog_confirm, gui::ShowMode::GUI_SHOW_INIT, std::move(metaData));
+ }
+ else {
+ lockHandler.handlePinEnableRequestFailed(response->getSimCardLock());
+ }
+ return sys::MessageNone{};
+ });
+
auto msgToSend =
std::make_shared<sdesktop::UpdateOsMessage>(updateos::UpdateMessageType::UpdateCheckForUpdateOnce);
bus.sendUnicast(msgToSend, service::name::service_desktop);
M module-apps/application-desktop/widgets/PinLockHandler.cpp => module-apps/application-desktop/widgets/PinLockHandler.cpp +38 -5
@@ 8,7 8,6 @@
#include "application-desktop/windows/Names.hpp"
#include <module-utils/common_data/EventStore.hpp>
#include <service-appmgr/service-appmgr/data/SimActionsParams.hpp>
-#include <service-cellular/CellularMessage.hpp>
namespace gui
{
@@ 115,18 114,52 @@ namespace gui
switchToPinLockWindow(onActivatedCallback);
}
- void PinLockHandler::handlePinDisableRequest(app::manager::actions::ActionParamsPtr &&data)
+ void PinLockHandler::handlePinEnableRequest(app::manager::actions::ActionParamsPtr &&data,
+ CellularSimCardLockDataMessage::SimCardLock simCardLock)
{
- LOG_INFO("Handling RequestPinDisable action");
+ LOG_DEBUG("Handling PinEnableRequest action, simCardLock = %d", static_cast<int>(simCardLock));
+ handlePasscodeParams(PinLock::LockType::SimPin, PinLock::LockState::PasscodeRequired, std::move(data));
+ promptSimLockWindow = true;
+ auto onActivatedCallback = [this, simCardLock](PinLock::LockType type, const std::vector<unsigned int> &data) {
+ app->bus.sendUnicast(
+ std::make_shared<CellularSimCardLockDataMessage>(Store::GSM::get()->selected, simCardLock, data),
+ serviceCellular);
+ };
+ switchToPinLockWindow(onActivatedCallback);
}
- void PinLockHandler::handlePinEnableRequest(app::manager::actions::ActionParamsPtr &&data)
+ void PinLockHandler::handlePinEnableRequestFailed(CellularSimCardLockDataMessage::SimCardLock simCardLock)
{
- LOG_INFO("Handling RequestPinEnable action");
+ LOG_DEBUG("Handling PinEnableRequestFailed action, simCardLock = %d, simLock.value = %u",
+ static_cast<int>(simCardLock),
+ simLock.value);
+ using namespace app::manager::actions;
+ if (simLock.value > 0) {
+ --simLock.value;
+ }
+ else {
+ LOG_ERROR("Number of attempts left is equal to zero before decrementation!");
+ }
+ if (simLock.value > 0) {
+ simLock.lockState = PinLock::LockState::PasscodeInvalidRetryRequired;
+ auto onActivatedCallback = [this, simCardLock](PinLock::LockType type,
+ const std::vector<unsigned int> &data) {
+ auto params = std::make_unique<PasscodeParams>(
+ Store::GSM::get()->selected, simLock.value, PasscodeParams::pinName);
+ handlePinEnableRequest(std::move(params), simCardLock);
+ };
+ switchToPinLockWindow(PinLock::LockState::PasscodeInvalidRetryRequired, onActivatedCallback);
+ }
+ else {
+ auto params = std::make_unique<PasscodeParams>(
+ Store::GSM::get()->selected, PasscodeParams::numOfAttemptsForEnteringPUK, PasscodeParams::pukName);
+ handlePasscodeRequest(gui::PinLock::LockType::SimPuk, std::move(params));
+ }
}
void PinLockHandler::handlePinChangeRequestFailed()
{
+ LOG_DEBUG("Handling PinChangeRequestFailed action, simLock.value = %u", simLock.value);
using namespace app::manager::actions;
if (simLock.value > 0) {
--simLock.value;
M module-apps/application-desktop/widgets/PinLockHandler.hpp => module-apps/application-desktop/widgets/PinLockHandler.hpp +4 -2
@@ 7,6 7,7 @@
#include <module-services/service-appmgr/service-appmgr/messages/ActionRequest.hpp>
#include <module-services/service-appmgr/service-appmgr/Actions.hpp>
+#include <service-cellular/CellularMessage.hpp>
namespace app
{
@@ 49,8 50,9 @@ namespace gui
void handlePasscodeRequest(PinLock::LockType type, app::manager::actions::ActionParamsPtr &&data);
void handlePinChangeRequest(app::manager::actions::ActionParamsPtr &&data);
- void handlePinDisableRequest(app::manager::actions::ActionParamsPtr &&data);
- void handlePinEnableRequest(app::manager::actions::ActionParamsPtr &&data);
+ void handlePinEnableRequest(app::manager::actions::ActionParamsPtr &&data,
+ CellularSimCardLockDataMessage::SimCardLock simCardLock);
+ void handlePinEnableRequestFailed(CellularSimCardLockDataMessage::SimCardLock simCardLock);
void handleSimBlocked(app::manager::actions::ActionParamsPtr &&data);
void handleUnlockSim(app::manager::actions::ActionParamsPtr &&data);
void handleCMEError(app::manager::actions::ActionParamsPtr &&data) const;
M module-apps/application-settings-new/windows/ChangePasscodeWindow.cpp => module-apps/application-settings-new/windows/ChangePasscodeWindow.cpp +2 -2
@@ 106,7 106,7 @@ namespace gui
auto metaData = std::make_unique<gui::DialogMetadataMessage>(
gui::DialogMetadata{utils::localize.get("app_settings_security_change_passcode"),
- "big_circle_placeholder",
+ "success_icon_W_G",
utils::localize.get("app_settings_security_passcode_disabled"),
"",
[this]() {
@@ 168,7 168,7 @@ namespace gui
auto metaData = std::make_unique<gui::DialogMetadataMessage>(
gui::DialogMetadata{utils::localize.get("app_settings_security_change_passcode"),
- "big_circle_placeholder",
+ "success_icon_W_G",
utils::localize.get("app_settings_security_passcode_changed_successfully"),
"",
[this]() {
M module-apps/application-settings-new/windows/PINSettingsWindow.cpp => module-apps/application-settings-new/windows/PINSettingsWindow.cpp +5 -2
@@ 77,11 77,14 @@ namespace gui
{
currentState = !currentState;
refreshOptionsList();
+ using namespace app::manager::actions;
+ auto params = std::make_unique<PasscodeParams>(
+ Store::GSM::get()->selected, PasscodeParams::numOfAttemptsForEnteringPIN, PasscodeParams::pinName);
if (!currentState) {
- app::manager::Controller::sendAction(application, app::manager::actions::RequestPinDisable, nullptr);
+ app::manager::Controller::sendAction(application, RequestPinDisable, std::move(params));
}
else {
- app::manager::Controller::sendAction(application, app::manager::actions::RequestPinEnable, nullptr);
+ app::manager::Controller::sendAction(application, RequestPinEnable, std::move(params));
}
}
} // namespace gui
M module-services/service-cellular/ServiceCellular.cpp => module-services/service-cellular/ServiceCellular.cpp +3 -2
@@ 355,9 355,10 @@ void ServiceCellular::registerMessageHandlers()
connect(typeid(CellularSimCardLockDataMessage), [&](sys::Message *request) -> sys::MessagePointer {
auto msg = static_cast<CellularSimCardLockDataMessage *>(request);
- return std::make_shared<CellularResponseMessage>(
+ return std::make_shared<CellularSimCardLockResponseMessage>(
setPinLock(msg->getLock() == CellularSimCardLockDataMessage::SimCardLock::Locked,
- SimCard::pinToString(msg->getPin())));
+ SimCard::pinToString(msg->getPin())),
+ msg->getLock());
});
connect(typeid(CellularChangeSimDataMessage), [&](sys::Message *request) -> sys::MessagePointer {
M module-services/service-cellular/service-cellular/CellularMessage.hpp => module-services/service-cellular/service-cellular/CellularMessage.hpp +15 -0
@@ 645,6 645,21 @@ class CellularSimPukResponseMessage : public CellularResponseMessage
{}
};
+class CellularSimCardLockResponseMessage : public CellularResponseMessage
+{
+ CellularSimCardLockDataMessage::SimCardLock cardLock;
+
+ public:
+ CellularSimCardLockResponseMessage(bool retCode, CellularSimCardLockDataMessage::SimCardLock cardLock)
+ : CellularResponseMessage(retCode), cardLock(cardLock)
+ {}
+
+ [[nodiscard]] auto getSimCardLock() const noexcept -> CellularSimCardLockDataMessage::SimCardLock
+ {
+ return cardLock;
+ }
+};
+
class CellularAntennaResponseMessage : public sys::ResponseMessage
{
public: