~aleteoryx/muditaos

90ed595397783dc31d92bb4209264cbd23bc7c69 — Marcin Zieliński 3 years ago 62a6229
[MOS-718] Fix part of SIM unlocking

Fixed a potential bug in message handling,
refactored unclear naming and logic there
and in some other places.
M module-apps/apps-common/ApplicationCommon.cpp => module-apps/apps-common/ApplicationCommon.cpp +1 -1
@@ 927,7 927,7 @@ namespace app
        windowsStack().push(newWindow, windowsFactory.build(this, newWindow), d);
    }

    std::optional<std::string> ApplicationCommon::getPrevWindow(uint32_t count) const
    std::optional<std::string> ApplicationCommon::getPreviousWindow(std::uint32_t count) const
    {
        return windowsStack().get(count);
    }

M module-apps/apps-common/ApplicationCommon.hpp => module-apps/apps-common/ApplicationCommon.hpp +1 -1
@@ 377,7 377,7 @@ namespace app
        void pushWindow(const std::string &newWindow, const gui::popup::Disposition &d = gui::popup::WindowDisposition);
        /// getter for previous window name
        /// @ingrup AppWindowStack
        std::optional<std::string> getPrevWindow(uint32_t count = 1) const;
        std::optional<std::string> getPreviousWindow(std::uint32_t count = 1) const;
        /// clears windows stack
        /// @ingrup AppWindowStack
        void cleanPrevWindw();

M module-apps/apps-common/locks/handlers/SimLockHandler.cpp => module-apps/apps-common/locks/handlers/SimLockHandler.cpp +24 -22
@@ 113,7 113,7 @@ namespace locks
        lock.attemptsLeft = attempts;
        lock.lockName     = utils::enumToString(Store::GSM::get()->selected);

        if (simUnlockBlockOnLockedPhone) {
        if (simUnlockingNeeded_) {
            return sys::msgNotHandled();
        }



@@ 134,7 134,7 @@ namespace locks
        lock.attemptsLeft = attempts;
        lock.lockName     = utils::enumToString(Store::GSM::get()->selected);

        if (simUnlockBlockOnLockedPhone) {
        if (simUnlockingNeeded_) {
            return sys::msgNotHandled();
        }



@@ 240,7 240,7 @@ namespace locks
    {
        setSimInputTypeAction(SimInputTypeAction::Blocked);

        if (simUnlockBlockOnLockedPhone) {
        if (simUnlockingNeeded_) {
            return sys::msgNotHandled();
        }



@@ 255,7 255,7 @@ namespace locks
    {
        setSimInputTypeAction(SimInputTypeAction::Error);

        if (simUnlockBlockOnLockedPhone) {
        if (simUnlockingNeeded_) {
            storedErrorCode = errorCode;
            return sys::msgNotHandled();
        }


@@ 332,9 332,9 @@ namespace locks
        }
    }

    void SimLockHandler::setSimUnlockBlockOnLockedPhone()
    void SimLockHandler::needSimUnlocking()
    {
        simUnlockBlockOnLockedPhone = true;
        simUnlockingNeeded_ = true;
    }

    void SimLockHandler::setSimReady()


@@ 343,24 343,26 @@ namespace locks
        simReadyAction();
    }

    sys::MessagePointer SimLockHandler::releaseSimUnlockBlockOnLockedPhone()
    sys::MessagePointer SimLockHandler::askForSimUnlocking()
    {
        if (simUnlockBlockOnLockedPhone) {
            simUnlockBlockOnLockedPhone = false;
            if (simInputTypeAction == SimInputTypeAction::UnlockWithPin) {
                return handleSimPinRequest(lock.getAttemptsLeft());
            }
            else if (simInputTypeAction == SimInputTypeAction::UnlockWithPuk) {
                return handleSimPukRequest(lock.getAttemptsLeft());
            }
            else if (simInputTypeAction == SimInputTypeAction::Blocked) {
                return handleSimBlockedRequest();
            }
            else if (simInputTypeAction == SimInputTypeAction::Error) {
                return handleCMEErrorRequest(storedErrorCode);
            }
        if (!simUnlockingNeeded_) {
            return sys::msgNotHandled();
        }

        simUnlockingNeeded_ = false;
        switch (simInputTypeAction) {
        case SimInputTypeAction::UnlockWithPin:
            return handleSimPinRequest(lock.getAttemptsLeft());
        case SimInputTypeAction::UnlockWithPuk:
            return handleSimPukRequest(lock.getAttemptsLeft());
        case SimInputTypeAction::Blocked:
            return handleSimBlockedRequest();
        case SimInputTypeAction::Error:
            return handleCMEErrorRequest(storedErrorCode);
        default:
            LOG_WARN("got message of unexpected type: %s", magic_enum::enum_name(simInputTypeAction).data());
            return sys::msgNotHandled();
        }
        return sys::msgNotHandled();
    }

    sys::MessagePointer SimLockHandler::resolveNewInputAction(LockInput firstInputData, LockInput secondInputData)

M module-apps/apps-common/locks/handlers/SimLockHandler.hpp => module-apps/apps-common/locks/handlers/SimLockHandler.hpp +3 -3
@@ 22,7 22,7 @@ namespace locks

        SimInputTypeAction simInputTypeAction = SimInputTypeAction::UnlockWithPin;
        unsigned int storedErrorCode          = 0;
        bool simUnlockBlockOnLockedPhone      = false;
        bool simUnlockingNeeded_              = false;
        bool simReady                         = false;
        StoredLockInput storedFirstInput;
        StoredLockInput storedSecondInput;


@@ 48,10 48,10 @@ namespace locks
      public:
        explicit SimLockHandler(sys::Service *owner);

        void setSimUnlockBlockOnLockedPhone();
        void setSimReady();

        sys::MessagePointer releaseSimUnlockBlockOnLockedPhone();
        void needSimUnlocking();
        sys::MessagePointer askForSimUnlocking();

        sys::MessagePointer verifySimLockInput(LockInput inputData);


M products/BellHybrid/apps/application-bell-onboarding/ApplicationBellOnBoarding.cpp => products/BellHybrid/apps/application-bell-onboarding/ApplicationBellOnBoarding.cpp +6 -6
@@ 206,7 206,7 @@ namespace app

        auto selectedWindowCondition =
            getCurrentWindow()->getName() == gui::window::name::informationOnBoardingWindow &&
            msg->getWindowName() == *getPrevWindow() &&
            msg->getWindowName() == *getPreviousWindow() &&
            msg->getSenderWindowName() == gui::window::name::informationOnBoardingWindow;

        if (selectedWindowCondition && informationState == OnBoarding::InformationStates::DeepClickWarningInfo) {


@@ 238,7 238,7 @@ namespace app
                     inputEvent.isKeyRelease(gui::KeyCode::KEY_LEFT)) {
                informationState = OnBoarding::InformationStates::DeepClickWarningInfo;
                if (getCurrentWindow()->getName() == gui::window::name::informationOnBoardingWindow) {
                    displayInformation(*getPrevWindow());
                    displayInformation(*getPreviousWindow());
                }
                else {
                    displayInformation(getCurrentWindow()->getName());


@@ 248,7 248,7 @@ namespace app
                if (informationState == OnBoarding::InformationStates::DeepClickWarningInfo) {
                    informationPromptTimer.stop();
                    informationState = OnBoarding::InformationStates::DeepClickCorrectionInfo;
                    displayInformation(*getPrevWindow());
                    displayInformation(*getPreviousWindow());
                }
                else {
                    informationState = OnBoarding::InformationStates::RotateInfo;


@@ 260,13 260,13 @@ namespace app
                switch (informationState) {
                case OnBoarding::InformationStates::DeepClickCorrectionInfo:
                    if (inputEvent.isKeyRelease(gui::KeyCode::KEY_ENTER)) {
                        switchWindow(*getPrevWindow());
                        switchWindow(*getPreviousWindow());
                        return true;
                    }
                    break;
                case OnBoarding::InformationStates::LightClickInfo:
                    if (inputEvent.isKeyRelease(gui::KeyCode::KEY_ENTER)) {
                        switchWindow(*getPrevWindow());
                        switchWindow(*getPreviousWindow());
                        return true;
                    }
                    break;


@@ 274,7 274,7 @@ namespace app
                    if (inputEvent.isKeyRelease(gui::KeyCode::KEY_UP) ||
                        inputEvent.isKeyRelease(gui::KeyCode::KEY_DOWN) ||
                        inputEvent.isKeyRelease(gui::KeyCode::KEY_ENTER)) {
                        switchWindow(*getPrevWindow());
                        switchWindow(*getPreviousWindow());
                        return true;
                    }
                    break;

M products/PurePhone/services/appmgr/ApplicationManager.cpp => products/PurePhone/services/appmgr/ApplicationManager.cpp +5 -5
@@ 197,7 197,7 @@ namespace app::manager
        });
        connect(typeid(locks::UnlockedPhone), [&](sys::Message *request) -> sys::MessagePointer {
            autoLockTimer.start();
            return simLockHandler.releaseSimUnlockBlockOnLockedPhone();
            return simLockHandler.askForSimUnlocking();
        });
        connect(typeid(locks::ChangePhoneLock),
                [&](sys::Message *request) -> sys::MessagePointer { return phoneLockHandler.handleChangePhoneLock(); });


@@ 228,7 228,7 @@ namespace app::manager
        connect(typeid(cellular::msg::notification::SimNeedPin), [&](sys::Message *request) -> sys::MessagePointer {
            auto data = static_cast<cellular::msg::notification::SimNeedPin *>(request);
            if (phoneLockHandler.isPhoneLocked()) {
                simLockHandler.setSimUnlockBlockOnLockedPhone();
                simLockHandler.needSimUnlocking();
            }
            return simLockHandler.handleSimPinRequest(data->attempts);
        });


@@ 250,7 250,7 @@ namespace app::manager
        connect(typeid(cellular::msg::notification::SimNeedPuk), [&](sys::Message *request) -> sys::MessagePointer {
            auto data = static_cast<cellular::msg::notification::SimNeedPuk *>(request);
            if (phoneLockHandler.isPhoneLocked()) {
                simLockHandler.setSimUnlockBlockOnLockedPhone();
                simLockHandler.needSimUnlocking();
            }
            return simLockHandler.handleSimPukRequest(data->attempts);
        });


@@ 296,14 296,14 @@ namespace app::manager
                });
        connect(typeid(cellular::msg::notification::SimBlocked), [&](sys::Message *request) -> sys::MessagePointer {
            if (phoneLockHandler.isPhoneLocked()) {
                simLockHandler.setSimUnlockBlockOnLockedPhone();
                simLockHandler.needSimUnlocking();
            }
            return simLockHandler.handleSimBlockedRequest();
        });
        connect(typeid(cellular::msg::notification::UnhandledCME), [&](sys::Message *request) -> sys::MessagePointer {
            auto data = static_cast<cellular::msg::notification::UnhandledCME *>(request);
            if (phoneLockHandler.isPhoneLocked()) {
                simLockHandler.setSimUnlockBlockOnLockedPhone();
                simLockHandler.needSimUnlocking();
            }
            return simLockHandler.handleCMEErrorRequest(data->code);
        });