~aleteoryx/muditaos

9c28350cbfbcf8760ea591a4b63f130861ecc5af — Tomasz Sobkowiak 5 years ago eac3d23
[EGD-5440] Onboarding passcode window

Add windows for setting passcode during onboarding process
M image/assets/lang/English.json => image/assets/lang/English.json +4 -0
@@ 332,6 332,10 @@
  "app_onboarding_configuration_successful": "<text>Your Pure was configured</text><br></br><text>successfully.</text>",
  "app_onboarding_no_configuration": "<text>Your Pure is not configured.</text><br></br><text>You can go to Settings to.</text><br></br><text>configure it.</text>",
  "app_onboarding_update_info": "<text>New Mudita OS version is available.</text><br></br><text>To update your Pure Phone, please</text><br></br><text>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_set_password": "Set passcode that unlocks the phone",
  "app_onboarding_confirm_password": "Confirm the passcode",
  "app_onboarding_wrong_password": "Wrong passcode. Configure passcode again.",
  "app_onboarding_passcode_configuration": "Configure passcode",
  "app_settings_title_main": "Advanced",
  "app_settings_title_main_new": "Settings",
  "app_settings_bt": "Bluetooth",

M module-apps/application-onboarding/ApplicationOnBoarding.cpp => module-apps/application-onboarding/ApplicationOnBoarding.cpp +20 -0
@@ 20,6 20,7 @@
#include <module-apps/application-settings-new/data/LanguagesData.hpp>
#include <module-services/service-db/agents/settings/SystemSettings.hpp>
#include <module-apps/application-settings-new/windows/ChangeTimeZone.hpp>
#include <module-apps/application-onboarding/windows/ConfigurePasscodeWindow.hpp>

namespace app
{


@@ 83,6 84,18 @@ namespace app
        settings->setValue(settings::SystemProperties::eulaAccepted, "1", settings::SettingsScope::Global);
    }

    void ApplicationOnBoarding::setLockPassHash(unsigned int value)
    {
        lockPassHash = value;
        settings->setValue(
            ::settings::SystemProperties::lockPassHash, std::to_string(value), ::settings::SettingsScope::Global);
    }

    auto ApplicationOnBoarding::getLockPassHash() const noexcept -> unsigned int
    {
        return lockPassHash;
    }

    sys::ReturnCodes ApplicationOnBoarding::DeinitHandler()
    {
        return sys::ReturnCodes::Success;


@@ 137,6 150,13 @@ namespace app
        windowsFactory.attach(gui::window::name::change_time_zone, [](Application *app, const std::string &name) {
            return std::make_unique<gui::ChangeTimeZone>(app);
        });
        windowsFactory.attach(gui::window::name::onBoarding_configure_passcode,
                              [](Application *app, const std::string &name) {
                                  return std::make_unique<gui::ConfigurePasscodeWindow>(app);
                              });
        windowsFactory.attach(gui::window::name::dialog_confirm, [](Application *app, const std::string &name) {
            return std::make_unique<gui::DialogConfirm>(app, gui::window::name::dialog_confirm);
        });

        attachPopups({gui::popup::ID::Volume,
                      gui::popup::ID::Tethering,

M module-apps/application-onboarding/ApplicationOnBoarding.hpp => module-apps/application-onboarding/ApplicationOnBoarding.hpp +7 -0
@@ 16,6 16,7 @@ namespace gui::window::name
    inline constexpr auto onBoarding_skip                     = "OnBoardingSkipConfirm";
    inline constexpr auto onBoarding_date_and_time            = "OnBoardingDateAndTime";
    inline constexpr auto onBoarding_change_date_and_time     = "OnBoardingChangeDateAndTime";
    inline constexpr auto onBoarding_configure_passcode       = "OnBoardingConfigurePasscode";
} // namespace gui::window::name

namespace app


@@ 39,6 40,12 @@ namespace app

        void createUserInterface() override;
        void destroyUserInterface() override;

        void setLockPassHash(unsigned int value);
        [[nodiscard]] auto getLockPassHash() const noexcept -> unsigned int;

      private:
        unsigned int lockPassHash = 0;
    };

    template <> struct ManifestTraits<ApplicationOnBoarding>

M module-apps/application-onboarding/CMakeLists.txt => module-apps/application-onboarding/CMakeLists.txt +1 -0
@@ 24,6 24,7 @@ target_sources(${PROJECT_NAME}
		"${CMAKE_CURRENT_LIST_DIR}/windows/SkipDialogWindow.cpp"
		"${CMAKE_CURRENT_LIST_DIR}/windows/OnBoardingDateAndTimeWindow.cpp"
		"${CMAKE_CURRENT_LIST_DIR}/windows/OnBoardingChangeDateAndTimeWindow.cpp"
		"${CMAKE_CURRENT_LIST_DIR}/windows/ConfigurePasscodeWindow.cpp"
		PUBLIC
		"${CMAKE_CURRENT_LIST_DIR}/ApplicationOnBoarding.hpp"
		"${CMAKE_CURRENT_LIST_DIR}/windows/OnBoardingMainWindow.hpp"

A module-apps/application-onboarding/windows/ConfigurePasscodeWindow.cpp => module-apps/application-onboarding/windows/ConfigurePasscodeWindow.cpp +106 -0
@@ 0,0 1,106 @@
// Copyright (c) 2017-2021, Mudita Sp. z.o.o. All rights reserved.
// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md

#include "ConfigurePasscodeWindow.hpp"

#include <application-onboarding/ApplicationOnBoarding.hpp>
#include <application-onboarding/data/OnBoardingSwitchData.hpp>
#include <application-desktop/data/AppDesktopStyle.hpp>
#include <application-settings-new/ApplicationSettings.hpp>
#include <application-settings-new/windows/ChangePasscodeWindow.hpp>

#include <DialogMetadata.hpp>
#include <DialogMetadataMessage.hpp>
#include <windows/Dialog.hpp>

namespace lock_style        = style::window::pin_lock;
namespace screen_lock_style = style::window::screen_pin_lock;

namespace gui
{
    ConfigurePasscodeWindow::ConfigurePasscodeWindow(app::Application *app) : ChangePasscodeWindow(app)
    {
        lockState = PinLock::LockState::NewPasscodeRequired;

        textForEnterNewPassword = "app_onboarding_set_password";
        testForConfirmPassword  = "app_onboarding_confirm_password";
        textForWrongPassword    = "app_onboarding_worng_password";
    }

    auto ConfigurePasscodeWindow::onInput(const InputEvent &inputEvent) -> bool
    {
        if (inputEvent.isShortPress() && inputEvent.is(KeyCode::KEY_LF)) {
            application->setLockScreenPasscodeOn(false);
            application->switchWindow(gui::window::name::onBoarding_date_and_time,
                                      gui::ShowMode::GUI_SHOW_INIT,
                                      std::make_unique<app::onBoarding::OnBoardingSwitchData>());
        }

        return ChangePasscodeWindow::onInput(inputEvent);
    }

    void ConfigurePasscodeWindow::buildBottomBar()
    {
        bottomBar->setText(BottomBar::Side::CENTER, utils::localize.get(style::strings::common::confirm));
        bottomBar->setText(BottomBar::Side::RIGHT, utils::localize.get(style::strings::common::back));
        bottomBar->setText(BottomBar::Side::LEFT, utils::localize.get(style::strings::common::skip));
    }

    void ConfigurePasscodeWindow::buildTitleBar()
    {
        setTitle(utils::localize.get("app_onboarding_passcode_configuration"));
    }

    void ConfigurePasscodeWindow::processPasscode()
    {
        switch (lockState) {
        case PinLock::LockState::NewPasscodeConfirmRequired:
        case PinLock::LockState::NewPasscodeInvalid: {
            lockState = lockHandler.newPasscodeConfirmed();
            if (lockState == PinLock::LockState::Unlocked) {
                auto app = static_cast<app::ApplicationOnBoarding *>(application);
                app->setLockPassHash(lockHandler.getNewPasscodeHash());
            }
            break;
        }
        default:
            return ChangePasscodeWindow::processPasscode();
        }
    }

    void ConfigurePasscodeWindow::setVisibleState()
    {
        switch (lockState) {
        case PinLock::LockState::NewPasscodeInvalid: {

            auto metaData = std::make_unique<gui::DialogMetadataMessage>(
                gui::DialogMetadata{utils::localize.get("app_onboarding_passcode_configuration"),
                                    "info_big_circle_W_G",
                                    utils::localize.get("app_onboarding_wrong_password"),
                                    "",
                                    [this]() {
                                        application->switchWindow(gui::window::name::onBoarding_configure_passcode,
                                                                  gui::ShowMode::GUI_SHOW_INIT,
                                                                  std::make_unique<ChangePasscodeData>(
                                                                      ChangePasscodeAction::OnlyProvideNewPasscode));
                                        return true;
                                    }});

            application->switchWindow(
                gui::window::name::dialog_confirm, gui::ShowMode::GUI_SHOW_INIT, std::move(metaData));

            break;
        }
        case PinLock::LockState::Unlocked: {
            application->setLockScreenPasscodeOn(true);
            application->switchWindow(gui::window::name::onBoarding_date_and_time,
                                      gui::ShowMode::GUI_SHOW_INIT,
                                      std::make_unique<app::onBoarding::OnBoardingSwitchData>());
            break;
        }
        default:
            ChangePasscodeWindow::setVisibleState();
            break;
        }
    }
} // namespace gui

A module-apps/application-onboarding/windows/ConfigurePasscodeWindow.hpp => module-apps/application-onboarding/windows/ConfigurePasscodeWindow.hpp +26 -0
@@ 0,0 1,26 @@
// Copyright (c) 2017-2021, Mudita Sp. z.o.o. All rights reserved.
// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md

#pragma once

#include <application-desktop/windows/LockWindow.hpp>
#include <application-desktop/windows/ScreenLockBaseBox.hpp>
#include <application-settings-new/windows/ChangePasscodeWindow.hpp>
#include <application-settings-new/data/ChangePasscodeData.hpp>
#include <application-settings-new/widgets/ChangePasscodeLockHandler.hpp>

namespace gui
{
    class ConfigurePasscodeWindow : public ChangePasscodeWindow
    {
      public:
        explicit ConfigurePasscodeWindow(app::Application *app);
        bool onInput(const InputEvent &inputEvent) override;

      protected:
        void buildBottomBar() override;
        void buildTitleBar() override;
        void processPasscode() override;
        void setVisibleState() override;
    };
} /* namespace gui */

M module-apps/application-onboarding/windows/OnBoardingDateAndTimeWindow.cpp => module-apps/application-onboarding/windows/OnBoardingDateAndTimeWindow.cpp +8 -2
@@ 1,12 1,14 @@
// Copyright (c) 2017-2021, Mudita Sp. z.o.o. All rights reserved.
// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md

#include "application-onboarding/ApplicationOnBoarding.hpp"
#include "OnBoardingDateAndTimeWindow.hpp"
#include "ConfigurationSuccessfulDialogWindow.hpp"

#include <application-onboarding/ApplicationOnBoarding.hpp>
#include <module-gui/gui/input/InputEvent.hpp>
#include <module-apps/application-onboarding/data/OnBoardingSwitchData.hpp>
#include <module-apps/messages/DialogMetadataMessage.hpp>
#include <module-apps/application-settings-new/data/ChangePasscodeData.hpp>

namespace app::onBoarding
{


@@ 30,7 32,11 @@ namespace app::onBoarding
    bool OnBoardingDateAndTimeWindow::onInput(const gui::InputEvent &inputEvent)
    {
        if (inputEvent.isShortPress() && inputEvent.is(gui::KeyCode::KEY_RF)) {
            return AppWindow::onInput(inputEvent);
            application->switchWindow(
                gui::window::name::onBoarding_configure_passcode,
                gui::ShowMode::GUI_SHOW_INIT,
                std::make_unique<ChangePasscodeData>(ChangePasscodeAction::OnlyProvideNewPasscode));
            return true;
        }
        else if (inputEvent.isShortPress() && inputEvent.is(gui::KeyCode::KEY_LF)) {
            return getFocusItem()->onActivated(nullptr);

M module-apps/application-onboarding/windows/StartConfigurationWindow.cpp => module-apps/application-onboarding/windows/StartConfigurationWindow.cpp +1 -1
@@ 51,7 51,7 @@ namespace app::onBoarding
                                          std::make_unique<OnBoardingSwitchData>());
            }
            if (inputEvent.is(gui::KeyCode::KEY_ENTER)) {
                application->switchWindow(gui::window::name::onBoarding_date_and_time,
                application->switchWindow(gui::window::name::onBoarding_configure_passcode,
                                          gui::ShowMode::GUI_SHOW_INIT,
                                          std::make_unique<OnBoardingSwitchData>());
            }

M module-apps/application-settings-new/windows/ChangePasscodeWindow.cpp => module-apps/application-settings-new/windows/ChangePasscodeWindow.cpp +5 -2
@@ 67,8 67,11 @@ namespace gui

        lockBox = std::make_unique<ScreenLockBaseBox>(this);
        lockBox->buildLockBox(lockHandler.getLock().getMaxPinSize());
        primaryText->setPosition(screen_lock_style::primary_text::y, gui::Axis::Y);
        pinLabelsBox->setPosition(screen_lock_style::pin_label::y, gui::Axis::Y);

        lockImage = new gui::Image(this, lock_style::image::x, lock_style::image::y, 0, 0, "pin_lock");

        primaryText->setPosition(lockImage->getHeight() + screen_lock_style::primary_text::y, gui::Axis::Y);
        pinLabelsBox->setPosition(lockImage->getHeight() + screen_lock_style::pin_label::y, gui::Axis::Y);
    }

    void ChangePasscodeWindow::buildTitleBar()

M module-apps/application-settings-new/windows/ChangePasscodeWindow.hpp => module-apps/application-settings-new/windows/ChangePasscodeWindow.hpp +10 -3
@@ 17,18 17,25 @@ namespace gui
        bool onInput(const InputEvent &inputEvent) override;
        void rebuild() override;

      private:
      protected:
        void buildBottomBar() override;
        void buildInterface() override;
        void buildTitleBar() override;
        void destroyInterface() override;
        void onBeforeShow(ShowMode mode, SwitchData *data) override;
        void processPasscode();
        void setVisibleState();

        virtual void processPasscode();
        virtual void setVisibleState();

        ChangePasscodeAction changePasscodeAction;
        std::unique_ptr<ScreenLockBaseBox> lockBox = nullptr;
        gui::Image *lockImage                      = nullptr;
        PinLock::LockState lockState{PinLock::LockState::PasscodeRequired};
        ChangePasscodeLockHandler lockHandler;

        std::string textForEnterCurrentPassword = "app_settings_security_type_current_passcode";
        std::string textForEnterNewPassword     = "app_settings_security_enter_new_passcode";
        std::string testForConfirmPassword      = "app_settings_security_confirm_new_passcode";
        std::string textForWrongPassword        = "app_settings_security_wrong_passcode";
    };
} /* namespace gui */