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 */