~aleteoryx/muditaos

689dfe6ed8c8804a569c10e78a5afc402d7d2186 — Przemyslaw Brudny 4 years ago 136c6fe
[EGD-7138] Security setting cleanup and fixes

Security setting cleanup. Removed not used torch windows.
28 files changed, 111 insertions(+), 445 deletions(-)

M image/assets/lang/Deutsch.json
M image/assets/lang/English.json
M image/assets/lang/Espanol.json
M image/assets/lang/Francais.json
M image/assets/lang/Polski.json
M image/assets/lang/Svenska.json
M module-apps/application-settings/ApplicationSettings.cpp
M module-apps/application-settings/CMakeLists.txt
D module-apps/application-settings/models/FromTimeToTimeModel.cpp
D module-apps/application-settings/models/FromTimeToTimeModel.hpp
D module-apps/application-settings/windows/NightshiftWindow.cpp
D module-apps/application-settings/windows/NightshiftWindow.hpp
D module-apps/application-settings/windows/NotificationSoundWindow.cpp
M module-apps/application-settings/windows/SettingsMainWindow.cpp
D module-apps/application-settings/windows/TorchWindow.cpp
D module-apps/application-settings/windows/TorchWindow.hpp
M module-apps/application-settings/windows/WindowNames.hpp
R module-apps/application-settings/windows/apps/{AppsAndToolsWindow => AppsWindow}.cpp
R module-apps/application-settings/windows/apps/{AppsAndToolsWindow => AppsWindow}.hpp
M module-apps/application-settings/windows/display-keypad/DisplayAndKeypadWindow.cpp
M module-apps/application-settings/windows/display-keypad/WallpaperWindow.cpp
M module-apps/application-settings/windows/network/SimCardsWindow.cpp
R module-apps/application-settings/windows/{PINSettingsWindow => network/SimPINSettingsWindow}.cpp
R module-apps/application-settings/windows/{PINSettingsWindow => network/SimPINSettingsWindow}.hpp
R module-apps/application-settings/windows/{ => security}/AutolockWindow.cpp
R module-apps/application-settings/windows/{ => security}/AutolockWindow.hpp
R module-apps/application-settings/windows/{ => security}/SecurityMainWindow.cpp
R module-apps/application-settings/windows/{ => security}/SecurityMainWindow.hpp
M image/assets/lang/Deutsch.json => image/assets/lang/Deutsch.json +2 -2
@@ 350,8 350,7 @@
  "app_settings_display_keypad_light_active": "An wenn aktiv",
  "app_settings_display_keypad_light_off": "Aus",
  "app_settings_display_input_language": "Eingabesprache",
  "app_settings_display_locked_screen_autolock": "Automatische Sperre",
  "app_settings_display_locked_screen_wallpaper": "Hintergrund",
  "app_settings_display_wallpaper": "Hintergrund",
  "app_settings_display_wallpaper_logo": "Mudita Logo",
  "app_settings_display_wallpaper_clock": "Uhr",
  "app_settings_display_wallpaper_quotes": "Sprüche",


@@ 439,6 438,7 @@
  "app_settings_toggle_on": "AN",
  "app_settings_toggle_off": "AUS",
  "app_settings_security_phone_lock": "Sicherheitscode für Bildschirmsperre",
  "app_settings_display_security_autolock": "Automatische Sperre",
  "app_settings_security_change_phone_lock": "Sicherheitscode ändern",
  "phone_lock_unlock": "<text>Geben Sie den Sicherheitscode<br></br>zum Entsperren ein:</text>",
  "phone_lock_unlock_last_attempt": "<text>Falscher Sicherheitscode.<br></br>1 Versuch übrig.</text>",

M image/assets/lang/English.json => image/assets/lang/English.json +2 -2
@@ 320,8 320,7 @@
  "app_settings_display_keypad_light_active": "On when active",
  "app_settings_display_keypad_light_off": "Off",
  "app_settings_display_input_language": "Input language",
  "app_settings_display_locked_screen_autolock": "Autolock",
  "app_settings_display_locked_screen_wallpaper": "Wallpaper",
  "app_settings_display_wallpaper": "Wallpaper",
  "app_settings_display_wallpaper_logo": "Mudita logo",
  "app_settings_display_wallpaper_clock": "Clock",
  "app_settings_display_wallpaper_quotes": "Quotes",


@@ 409,6 408,7 @@
  "app_settings_toggle_on": "ON",
  "app_settings_toggle_off": "OFF",
  "app_settings_security_phone_lock": "Lock screen passcode",
  "app_settings_display_security_autolock": "Auto lock",
  "app_settings_security_change_phone_lock": "Change passcode",
  "phone_lock_unlock": "<text>Enter the passcode<br></br>to unlock:</text>",
  "phone_lock_unlock_last_attempt": "<text>Wrong passcode.<br></br>You have 1 attempt left.</text>",

M image/assets/lang/Espanol.json => image/assets/lang/Espanol.json +2 -2
@@ 350,8 350,7 @@
  "app_settings_display_keypad_light_active": "Cuando está activo",
  "app_settings_display_keypad_light_off": "Apagada",
  "app_settings_display_input_language": "Idioma de entrada",
  "app_settings_display_locked_screen_autolock": "Bloq. auto.",
  "app_settings_display_locked_screen_wallpaper": "Fondo de pantalla",
  "app_settings_display_wallpaper": "Fondo de pantalla",
  "app_settings_display_wallpaper_logo": "Logotipo de Mudita",
  "app_settings_display_wallpaper_clock": "Reloj",
  "app_settings_display_wallpaper_quotes": "Citas",


@@ 439,6 438,7 @@
  "app_settings_toggle_on": "SÍ",
  "app_settings_toggle_off": "NO",
  "app_settings_security_phone_lock": "Código de acceso de pantalla bloqueada",
  "app_settings_display_security_autolock": "Bloq. auto.",
  "app_settings_security_change_phone_lock": "Cambiar código de acceso",
  "phone_lock_unlock": "<text>Introduce el código de acceso<br></br>para desbloquear:</text>",
  "phone_lock_unlock_last_attempt": "<text>Código de acceso incorrecto.<br></br>Te queda 1 intento.</text>",

M image/assets/lang/Francais.json => image/assets/lang/Francais.json +2 -2
@@ 320,8 320,7 @@
  "app_settings_display_keypad_light_active": "Allumée lorsque active",
  "app_settings_display_keypad_light_off": "Désactivée",
  "app_settings_display_input_language": "Input language",
  "app_settings_display_locked_screen_autolock": "Verrouillage automatique",
  "app_settings_display_locked_screen_wallpaper": "Fond d'écran",
  "app_settings_display_wallpaper": "Fond d'écran",
  "app_settings_display_wallpaper_logo": "Logo de Mudita",
  "app_settings_display_wallpaper_clock": "Horloge",
  "app_settings_display_wallpaper_quotes": "Citations",


@@ 408,6 407,7 @@
  "app_settings_toggle_on": "ALLUMÉ",
  "app_settings_toggle_off": "ÉTEINT",
  "app_settings_security_phone_lock": "Code d'accès de l'écran de verrouillage",
  "app_settings_display_security_autolock": "Verrouillage automatique",
  "app_settings_security_change_phone_lock": "Changer de code d'accès",
  "phone_lock_unlock": "<text>Entrez le code d'accès pour<br></br>déverrouiller l'appareil :</text>",
  "phone_lock_unlock_last_attempt": "<text>Mauvais code d'accès.<br></br>Il vous reste une seule tentative.</text>",

M image/assets/lang/Polski.json => image/assets/lang/Polski.json +2 -2
@@ 350,8 350,7 @@
  "app_settings_display_keypad_light_active": "Włączone, kiedy aktywna",
  "app_settings_display_keypad_light_off": "Wyłączone",
  "app_settings_display_input_language": "Język wprowadzania tekstu",
  "app_settings_display_locked_screen_autolock": "Automatyczna blokada",
  "app_settings_display_locked_screen_wallpaper": "Tapeta",
  "app_settings_display_wallpaper": "Tapeta",
  "app_settings_display_wallpaper_logo": "Logo Mudita",
  "app_settings_display_wallpaper_clock": "Zegar",
  "app_settings_display_wallpaper_quotes": "Cytaty",


@@ 439,6 438,7 @@
  "app_settings_toggle_on": "WŁĄCZONE",
  "app_settings_toggle_off": "WYŁĄCZONE",
  "app_settings_security_phone_lock": "Kod ekranu blokady",
  "app_settings_display_security_autolock": "Automatyczna blokada",
  "app_settings_security_change_phone_lock": "Zmień kod",
  "phone_lock_unlock": "<text>Wprowadź kod,<br></br>by odblokować:</text>",
  "phone_lock_unlock_last_attempt": "<text>Błędny kod.<br></br>Pozostała 1 próba.</text>",

M image/assets/lang/Svenska.json => image/assets/lang/Svenska.json +2 -2
@@ 279,8 279,7 @@
  "app_settings_display_keypad_light_active": "På vid användning",
  "app_settings_display_keypad_light_off": "Av",
  "app_settings_display_input_language": "Språk för att skriva",
  "app_settings_display_locked_screen_autolock": "Autolås",
  "app_settings_display_locked_screen_wallpaper": "Bakgrundsbild",
  "app_settings_display_wallpaper": "Bakgrundsbild",
  "app_settings_display_wallpaper_logo": "Mudita-logotyp",
  "app_settings_display_wallpaper_clock": "Klocka",
  "app_settings_display_wallpaper_quotes": "Citat",


@@ 345,6 344,7 @@
  "app_settings_toggle_on": "PÅ",
  "app_settings_toggle_off": "AV",
  "app_settings_security_phone_lock": "Lösenord för att låsa telefonen",
  "app_settings_display_security_autolock": "Autolås",
  "app_settings_security_change_phone_lock": "Byt lösenord",
  "phone_lock_unlock": "<text>Lösenord:</text>",
  "phone_lock_unlock_last_attempt": "<text>Fel lösenord.<br></br>Du har 1 försök kvar.</text>",

M module-apps/application-settings/ApplicationSettings.cpp => module-apps/application-settings/ApplicationSettings.cpp +22 -28
@@ 15,6 15,7 @@
#include <application-settings/windows/bluetooth/PhoneNameWindow.hpp>
#include <application-settings/windows/bluetooth/BluetoothCheckPasskeyWindow.hpp>
#include <application-settings/windows/network/NetworkWindow.hpp>
#include <application-settings/windows/network/SimPINSettingsWindow.hpp>
#include <application-settings/windows/network/SimCardsWindow.hpp>
#include <application-settings/windows/network/NewApnWindow.hpp>
#include <application-settings/windows/network/ApnSettingsWindow.hpp>


@@ 34,22 35,19 @@
#include <application-settings/windows/phone-modes/DoNotDisturbWindow.hpp>
#include <application-settings/windows/phone-modes/OfflineWindow.hpp>
#include <application-settings/windows/phone-modes/ConnectionFrequencyWindow.hpp>
#include <application-settings/windows/apps/AppsAndToolsWindow.hpp>
#include <application-settings/windows/apps/AppsWindow.hpp>
#include <application-settings/windows/apps/PhoneWindow.hpp>
#include <application-settings/windows/apps/MessagesWindow.hpp>
#include <application-settings/windows/apps/AlarmClockWindow.hpp>
#include <application-settings/windows/apps/SoundSelectWindow.hpp>
#include <application-settings/windows/NightshiftWindow.hpp>
#include <application-settings/windows/AutolockWindow.hpp>
#include <application-settings/windows/TorchWindow.hpp>
#include <application-settings/windows/SecurityMainWindow.hpp>
#include <application-settings/windows/security/SecurityMainWindow.hpp>
#include <application-settings/windows/security/AutolockWindow.hpp>
#include <application-settings/windows/SARInfoWindow.hpp>
#include <application-settings/windows/SystemMainWindow.hpp>
#include <application-settings/windows/LanguagesWindow.hpp>
#include <application-settings/windows/DateAndTimeMainWindow.hpp>
#include <application-settings/windows/ChangeTimeZone.hpp>
#include <application-settings/windows/ChangeDateAndTimeWindow.hpp>
#include <application-settings/windows/PINSettingsWindow.hpp>
#include <application-settings/windows/AboutYourPureWindow.hpp>
#include <application-settings/windows/CertificationWindow.hpp>
#include <application-settings/windows/TechnicalInformationWindow.hpp>


@@ 279,7 277,7 @@ namespace app
            auto simCardPinLockState = static_cast<cellular::msg::request::sim::GetLockState::Response *>(msg);
            auto pinSettingsLockStateData =
                std::make_unique<gui::PINSettingsLockStateData>(simCardPinLockState->locked);
            updateWindow(gui::window::name::pin_settings, std::move(pinSettingsLockStateData));
            updateWindow(gui::window::name::sim_pin_settings, std::move(pinSettingsLockStateData));
            return sys::MessageNone{};
        });



@@ 379,6 377,12 @@ namespace app
        windowsFactory.attach(gui::window::name::sim_cards, [](Application *app, const std::string &name) {
            return std::make_unique<gui::SimCardsWindow>(app, static_cast<ApplicationSettings *>(app));
        });
        windowsFactory.attach(gui::window::name::sim_pin_settings, [](Application *app, const std::string &name) {
            return std::make_unique<gui::SimPINSettingsWindow>(app);
        });
        windowsFactory.attach(gui::window::name::new_apn, [](Application *app, const std::string &name) {
            return std::make_unique<gui::NewApnWindow>(app);
        });
        windowsFactory.attach(gui::window::name::apn_settings, [](Application *app, const std::string &name) {
            return std::make_unique<gui::ApnSettingsWindow>(app);
        });


@@ 414,6 418,9 @@ namespace app
        windowsFactory.attach(gui::window::name::quote_categories, [](Application *app, const std::string &name) {
            return std::make_unique<gui::QuoteCategoriesWindow>(app);
        });
        windowsFactory.attach(gui::window::name::quotes_dialog_yes_no, [](Application *app, const std::string &name) {
            return std::make_unique<gui::DialogYesNo>(app, name);
        });
        windowsFactory.attach(gui::window::name::keypad_light, [](Application *app, const std::string &name) {
            return std::make_unique<gui::KeypadLightWindow>(app, static_cast<ApplicationSettings *>(app));
        });


@@ 436,8 443,8 @@ namespace app
        });

        // Apps
        windowsFactory.attach(gui::window::name::apps_and_tools, [](Application *app, const std::string &name) {
            return std::make_unique<gui::AppsAndToolsWindow>(app);
        windowsFactory.attach(gui::window::name::apps, [](Application *app, const std::string &name) {
            return std::make_unique<gui::AppsWindow>(app);
        });
        windowsFactory.attach(gui::window::name::phone, [](Application *app, const std::string &name) {
            auto audioModel =


@@ 458,23 465,16 @@ namespace app
            return std::make_unique<gui::SoundSelectWindow>(app, name);
        });

        windowsFactory.attach(gui::window::name::dialog_settings, [](Application *app, const std::string &name) {
            return std::make_unique<gui::Dialog>(app, name);
        });
        windowsFactory.attach(gui::window::name::nightshift, [](Application *app, const std::string &name) {
            return std::make_unique<gui::NightshiftWindow>(app);
        // Security
        windowsFactory.attach(gui::window::name::security, [](Application *app, const std::string &name) {
            return std::make_unique<gui::SecurityMainWindow>(app);
        });
        windowsFactory.attach(gui::window::name::autolock, [](Application *app, const std::string &name) {
            return std::make_unique<gui::AutolockWindow>(app, static_cast<ApplicationSettings *>(app));
        });
        windowsFactory.attach(gui::window::name::torch, [](Application *app, const std::string &name) {
            return std::make_unique<gui::TorchWindow>(app);
        });
        windowsFactory.attach(gui::window::name::quotes_dialog_yes_no, [](Application *app, const std::string &name) {
            return std::make_unique<gui::DialogYesNo>(app, name);
        });
        windowsFactory.attach(gui::window::name::security, [](Application *app, const std::string &name) {
            return std::make_unique<gui::SecurityMainWindow>(app);

        windowsFactory.attach(gui::window::name::dialog_settings, [](Application *app, const std::string &name) {
            return std::make_unique<gui::Dialog>(app, name);
        });
        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);


@@ 482,12 482,6 @@ namespace app
        windowsFactory.attach(gui::window::name::system, [](Application *app, const std::string &name) {
            return std::make_unique<gui::SystemMainWindow>(app);
        });
        windowsFactory.attach(gui::window::name::pin_settings, [](Application *app, const std::string &name) {
            return std::make_unique<gui::PINSettingsWindow>(app);
        });
        windowsFactory.attach(gui::window::name::new_apn, [](Application *app, const std::string &name) {
            return std::make_unique<gui::NewApnWindow>(app);
        });
        windowsFactory.attach(gui::window::name::languages, [](Application *app, const std::string &name) {
            return std::make_unique<gui::LanguagesWindow>(app);
        });

M module-apps/application-settings/CMakeLists.txt => module-apps/application-settings/CMakeLists.txt +9 -12
@@ 24,7 24,6 @@ target_sources( ${PROJECT_NAME}
        models/apps/AudioSettingsModel.cpp
        models/apps/SoundsModel.cpp
        models/DateAndTimeModel.cpp
        models/FromTimeToTimeModel.cpp
        models/SARInfoRepository.cpp
        models/FactoryData.cpp
        presenter/SARInfoWindowPresenter.cpp


@@ 37,6 36,7 @@ target_sources( ${PROJECT_NAME}
        widgets/apps/SettingsSoundItem.cpp
        widgets/SettingsDateItem.cpp
        widgets/SettingsTimeItem.cpp
        widgets/SpinBoxOptionSettings.cpp
        windows/SettingsMainWindow.cpp
        windows/advanced/AdvancedOptionsWindow.cpp
        windows/advanced/InformationWindow.cpp


@@ 50,8 50,10 @@ target_sources( ${PROJECT_NAME}
        windows/bluetooth/BluetoothCheckPasskeyWindow.cpp
        windows/network/NetworkWindow.cpp
        windows/network/SimCardsWindow.cpp
        windows/network/SimPINSettingsWindow.cpp
        windows/network/ApnSettingsWindow.cpp
        windows/network/ApnOptionsWindow.cpp
        windows/network/NewApnWindow.cpp
        windows/display-keypad/DisplayAndKeypadWindow.cpp
        windows/display-keypad/DisplayLightWindow.cpp
        windows/display-keypad/FontSizeWindow.cpp


@@ 67,26 69,21 @@ target_sources( ${PROJECT_NAME}
        windows/phone-modes/DoNotDisturbWindow.cpp
        windows/phone-modes/OfflineWindow.cpp
        windows/phone-modes/ConnectionFrequencyWindow.cpp
        windows/apps/AppsAndToolsWindow.cpp
        windows/apps/AppsWindow.cpp
        windows/apps/PhoneWindow.cpp
        windows/apps/MessagesWindow.cpp
        windows/apps/AlarmClockWindow.cpp
        windows/apps/SoundSelectWindow.cpp
        windows/security/SecurityMainWindow.cpp
        windows/security/AutolockWindow.cpp
        windows/BaseSettingsWindow.cpp
        windows/NightshiftWindow.cpp
        windows/OptionsWidgetMaker.cpp
        windows/AutolockWindow.cpp
        windows/TorchWindow.cpp
        windows/SARInfoWindow.cpp
        windows/SecurityMainWindow.cpp
        windows/network/NewApnWindow.cpp
        widgets/SpinBoxOptionSettings.cpp
        windows/SystemMainWindow.cpp
        windows/LanguagesWindow.cpp
        windows/DateAndTimeMainWindow.cpp
        windows/ChangeTimeZone.cpp
        windows/ChangeDateAndTimeWindow.cpp
        windows/PINSettingsWindow.cpp
        windows/AboutYourPureWindow.cpp
        windows/CertificationWindow.cpp
        windows/TechnicalInformationWindow.cpp


@@ 99,6 96,7 @@ target_sources( ${PROJECT_NAME}
        widgets/advanced/ColorTestListStyle.hpp
        widgets/network/ApnInputWidget.hpp
        widgets/display-keypad/CategoryWidget.hpp
        widgets/SettingsStyle.hpp
        windows/SettingsMainWindow.hpp
        windows/WindowNames.hpp
        windows/advanced/AdvancedOptionsWindow.hpp


@@ 116,11 114,10 @@ target_sources( ${PROJECT_NAME}
        windows/display-keypad/QuoteCategoriesWindow.hpp
        windows/display-keypad/KeypadLightWindow.hpp
        windows/display-keypad/InputLanguageWindow.hpp
        windows/apps/AppsAndToolsWindow.hpp
        windows/apps/AppsWindow.hpp
        windows/apps/MessagesWindow.hpp
        windows/security/AutolockWindow.hpp
        windows/BaseSettingsWindow.hpp
        widgets/SettingsStyle.hpp
        windows/AutolockWindow.hpp
        windows/SystemMainWindow.hpp
        windows/LanguagesWindow.hpp
        windows/DateAndTimeMainWindow.hpp

D module-apps/application-settings/models/FromTimeToTimeModel.cpp => module-apps/application-settings/models/FromTimeToTimeModel.cpp +0 -82
@@ 1,82 0,0 @@
// Copyright (c) 2017-2021, Mudita Sp. z.o.o. All rights reserved.
// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md

#include "FromTimeToTimeModel.hpp"
#include <application-settings/widgets/SettingsDateItem.hpp>
#include <application-settings/widgets/SettingsTimeItem.hpp>
#include <ListView.hpp>
#include <widgets/DateAndTimeStyle.hpp>

FromTimeToTimeModel::FromTimeToTimeModel(app::Application *application) : app(application)
{}

void FromTimeToTimeModel::loadData(std::shared_ptr<utils::time::FromTillDate> fromTillDate)
{
    list->reset();
    eraseInternalData();

    createData();

    for (auto &item : internalData) {
        if (item->onLoadCallback) {
            item->onLoadCallback(fromTillDate);
        }
    }

    list->rebuildList();
}

void FromTimeToTimeModel::saveData(std::shared_ptr<utils::time::FromTillDate> fromTillDate)
{
    for (auto &item : internalData) {
        if (item->onSaveCallback) {
            item->onSaveCallback(fromTillDate);
        }
    }
}

gui::ListItem *FromTimeToTimeModel::getItem(gui::Order order)
{
    return getRecord(order);
}

unsigned int FromTimeToTimeModel::getMinimalItemHeight() const
{
    return style::window::date_and_time::height;
}

void FromTimeToTimeModel::requestRecords(const uint32_t offset, const uint32_t limit)
{
    setupModel(offset, limit);
    list->onProviderDataUpdate();
}

unsigned int FromTimeToTimeModel::requestRecordsCount()
{
    return internalData.size();
}

void FromTimeToTimeModel::createData()
{
    fromTimeItem = new gui::SettingsTimeItem(
        utils::translate("app_settings_nightshift_from"),
        gui::TimeWidget::Type::Start,
        [&](const UTF8 &text) { app->getCurrentWindow()->bottomBarTemporaryMode(text, false); },
        [&]() { app->getCurrentWindow()->bottomBarRestoreFromTemporaryMode(); });

    toTimeItem = new gui::SettingsTimeItem(
        utils::translate("app_settings_nightshift_to"),
        gui::TimeWidget::Type::End,
        [&](const UTF8 &text) { app->getCurrentWindow()->bottomBarTemporaryMode(text, false); },
        [&]() { app->getCurrentWindow()->bottomBarRestoreFromTemporaryMode(); });

    fromTimeItem->setConnectionToSecondItem(toTimeItem);
    toTimeItem->setConnectionToSecondItem(fromTimeItem);

    internalData.push_back(fromTimeItem);
    internalData.push_back(toTimeItem);

    for (auto &item : internalData) {
        item->deleteByList = false;
    }
}

D module-apps/application-settings/models/FromTimeToTimeModel.hpp => module-apps/application-settings/models/FromTimeToTimeModel.hpp +0 -35
@@ 1,35 0,0 @@
// 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.hpp"
#include "InternalModel.hpp"
#include <ListItemProvider.hpp>
#include <widgets/DateOrTimeListItem.hpp>

namespace gui
{
    class SettingsTimeItem;
};

class FromTimeToTimeModel : public app::InternalModel<gui::DateOrTimeListItem *>, public gui::ListItemProvider
{
  public:
    FromTimeToTimeModel(app::Application *application);

    void loadData(std::shared_ptr<utils::time::FromTillDate> fromTillDate);
    void saveData(std::shared_ptr<utils::time::FromTillDate> fromTillDate);

    gui::ListItem *getItem(gui::Order order) override;
    [[nodiscard]] unsigned int getMinimalItemHeight() const override;
    void requestRecords(const uint32_t offset, const uint32_t limit) override;
    [[nodiscard]] unsigned int requestRecordsCount() override;

  private:
    app::Application *app               = nullptr;
    gui::SettingsTimeItem *fromTimeItem = nullptr;
    gui::SettingsTimeItem *toTimeItem   = nullptr;

    void createData();
};

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

#include "NightshiftWindow.hpp"
#include <application-settings/ApplicationSettings.hpp>
#include <application-settings/widgets/SettingsStyle.hpp>
#include <gui/input/InputEvent.hpp>
#include <ListView.hpp>
#include <widgets/DateAndTimeStyle.hpp>

namespace gui
{
    NightshiftWindow::NightshiftWindow(app::Application *app)
        : AppWindow(app, gui::window::name::nightshift), timeModel{
                                                             std::make_shared<FromTimeToTimeModel>(this->application)}
    {
        buildInterface();
    }

    void NightshiftWindow::buildInterface()
    {
        AppWindow::buildInterface();
        setTitle(utils::translate("app_settings_title_nightshift"));

        bottomBar->setActive(BottomBar::Side::LEFT, false);
        bottomBar->setActive(BottomBar::Side::CENTER, true);
        bottomBar->setActive(BottomBar::Side::RIGHT, true);
        bottomBar->setText(BottomBar::Side::CENTER, utils::translate(style::strings::common::save));
        bottomBar->setText(BottomBar::Side::RIGHT, utils::translate(style::strings::common::back));

        list = new gui::ListView(this,
                                 style::window::date_and_time::listView_x,
                                 style::window::date_and_time::listView_y,
                                 style::window::date_and_time::listView_w,
                                 style::window::date_and_time::listView_h,
                                 timeModel,
                                 gui::listview::ScrollBarType::PreRendered);
        setFocusItem(list);

        fromTillDate       = std::make_shared<utils::time::FromTillDate>();
        fromTillDate->from = TimePointNow();
        timeModel->loadData(fromTillDate);
    }

    auto NightshiftWindow::onInput(const InputEvent &inputEvent) -> bool
    {
        if (AppWindow::onInput(inputEvent)) {
            return true;
        }

        if (inputEvent.isShortRelease(gui::KeyCode::KEY_ENTER)) {
            timeModel->saveData(fromTillDate);
            LOG_DEBUG("Date from: %s", TimePointToLocalizedHourMinString(fromTillDate->from).c_str());
            LOG_DEBUG("Date to: %s", TimePointToLocalizedHourMinString(fromTillDate->till).c_str());
            return true;
        }

        return false;
    }
} // namespace gui

D module-apps/application-settings/windows/NightshiftWindow.hpp => module-apps/application-settings/windows/NightshiftWindow.hpp +0 -27
@@ 1,27 0,0 @@
// 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 "AppWindow.hpp"
#include <application-settings/models/FromTimeToTimeModel.hpp>

namespace gui
{
    class ListView;
    class VBox;
    class NightshiftWindow : public AppWindow
    {
      public:
        explicit NightshiftWindow(app::Application *app);

      private:
        void buildInterface() override;
        auto onInput(const InputEvent &inputEvent) -> bool override;

        VBox *body = nullptr;
        std::shared_ptr<utils::time::FromTillDate> fromTillDate;
        gui::ListView *list = nullptr;
        std::shared_ptr<FromTimeToTimeModel> timeModel;
    };
} /* namespace gui */

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

#include "NotificationSoundWindow.hpp"
#include "application-settings/ApplicationSettings.hpp"
#include <i18n/i18n.hpp>

namespace gui
{
    NotificationSoundWindow::NotificationSoundWindow(app::Application *app)
        : BaseSettingsWindow(app, window::name::notification_sound)
    {
        setTitle(utils::translate("app_settings_notification_sound"));
    }
} // namespace gui

M module-apps/application-settings/windows/SettingsMainWindow.cpp => module-apps/application-settings/windows/SettingsMainWindow.cpp +1 -1
@@ 34,7 34,7 @@ std::list<gui::Option> mainWindowOptionsNew(app::Application *app)
    addMenu(i18("app_settings_net"), gui::window::name::network);
    addMenu(i18("app_settings_disp_key"), gui::window::name::display_and_keypad);
    addMenu(i18("app_settings_phone_modes"), gui::window::name::phone_modes);
    addMenu(i18("app_settings_apps"), gui::window::name::apps_and_tools);
    addMenu(i18("app_settings_apps"), gui::window::name::apps);
    addMenu(i18("app_settings_security"), gui::window::name::security);
    addMenu(i18("app_settings_system"), gui::window::name::system);
    return l;

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

#include "TorchWindow.hpp"
#include "application-settings/ApplicationSettings.hpp"
#include "application-settings/widgets/SettingsStyle.hpp"

#include "OptionSetting.hpp"

#include <i18n/i18n.hpp>

namespace gui
{

    TorchWindow::TorchWindow(app::Application *app) : BaseSettingsWindow(app, gui::window::name::torch)
    {
        buildInterface();
    }

    void TorchWindow::buildInterface()
    {
        setTitle(utils::translate("app_settings_title_torch"));
        optionsList->setSize(optionsList->getWidth(),
                             optionsList->getHeight() - style::settings::window::torch::body_offset);
        bar = new Rect(this,
                       style::window::default_left_margin,
                       style::settings::window::torch::bar_y,
                       style::window::default_body_width,
                       style::settings::window::torch::bar_h);
        bar->setVisible(false);
        descriptionText = new Text(this,
                                   style::window::default_left_margin,
                                   style::settings::window::torch::description_y,
                                   style::window::default_body_width,
                                   style::settings::window::torch::description_h);
        descriptionText->setFont(style::window::font::medium);
        descriptionText->setText(utils::translate("app_settings_torch_description"));
        descriptionText->setVisible(false);
    }

    auto TorchWindow::buildOptionsList() -> std::list<gui::Option>
    {
        std::list<gui::Option> optionsList;

        optionsList.emplace_back(std::make_unique<gui::option::OptionSettings>(
            utils::translate("app_settings_torch_sunset_red_light_option"),
            [=](gui::Item &item) {
                toggleSwitchState();
                return true;
            },
            [=](gui::Item &item) {
                if (item.focus) {
                    this->setBottomBarText(utils::translate(style::strings::common::Switch), BottomBar::Side::CENTER);
                }
                return true;
            },
            this,
            switchState ? gui::option::SettingRightItem::On : gui::option::SettingRightItem::Off));

        if (switchState) {
            optionsList.emplace_back(std::make_unique<gui::option::OptionSettings>(
                utils::translate("app_settings_torch_nightshift_time_option"),
                [=](gui::Item &item) {
                    application->switchWindow(gui::window::name::nightshift, gui::ShowMode::GUI_SHOW_INIT);
                    return true;
                },
                [=](gui::Item &item) {
                    if (item.focus) {
                        this->setBottomBarText(utils::translate(style::strings::common::select),
                                               BottomBar::Side::CENTER);
                    }
                    return true;
                },
                nullptr,
                gui::option::SettingRightItem::ArrowWhite));
        }

        return optionsList;
    }

    void TorchWindow::toggleSwitchState()
    {
        switchState = !switchState;
        rebuildOptionList();
        bar->setVisible(switchState);
        descriptionText->setVisible(switchState);
    }

} // namespace gui

D module-apps/application-settings/windows/TorchWindow.hpp => module-apps/application-settings/windows/TorchWindow.hpp +0 -25
@@ 1,25 0,0 @@
// Copyright (c) 2017-2020, Mudita Sp. z.o.o. All rights reserved.
// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md

#pragma once

#include "BaseSettingsWindow.hpp"

#include <Text.hpp>

namespace gui
{
    class TorchWindow : public BaseSettingsWindow
    {
      public:
        TorchWindow(app::Application *app);
        void buildInterface() override;

      private:
        Rect *bar             = nullptr;
        Text *descriptionText = nullptr;
        bool switchState      = false;
        auto buildOptionsList() -> std::list<Option> override;
        void toggleSwitchState();
    };
}; // namespace gui

M module-apps/application-settings/windows/WindowNames.hpp => module-apps/application-settings/windows/WindowNames.hpp +12 -15
@@ 17,13 17,14 @@ namespace gui::window::name
    inline constexpr auto add_device              = "AddDevice";
    inline constexpr auto bluetooth_check_passkey = "BluetoothCheckPasskey";

    inline constexpr auto network         = "Network";
    inline constexpr auto sim_cards       = "SimCards";
    inline constexpr auto import_contacts = "ImportContacts";
    inline constexpr auto all_operators   = "AllOperators";
    inline constexpr auto apn_settings    = "APNSettings";
    inline constexpr auto apn_options     = "APNOptions";
    inline constexpr auto new_apn         = "NewApn";
    inline constexpr auto network          = "Network";
    inline constexpr auto sim_cards        = "SimCards";
    inline constexpr auto sim_pin_settings = "SimPINSettings";
    inline constexpr auto import_contacts  = "ImportContacts";
    inline constexpr auto all_operators    = "AllOperators";
    inline constexpr auto apn_settings     = "APNSettings";
    inline constexpr auto apn_options      = "APNOptions";
    inline constexpr auto new_apn          = "NewApn";

    inline constexpr auto display_and_keypad   = "DisplayAndKeypad";
    inline constexpr auto display_light        = "DisplayLight";


@@ 44,22 45,18 @@ namespace gui::window::name
    inline constexpr auto offline              = "Offline";
    inline constexpr auto connection_frequency = "ConnectionFrequency";

    inline constexpr auto apps_and_tools = "AppsAndTools";
    inline constexpr auto security       = "Security";
    inline constexpr auto system         = "System";

    inline constexpr auto apps              = "Apps";
    inline constexpr auto phone             = "Phone";
    inline constexpr auto messages          = "Messages";
    inline constexpr auto message_templates = "MessageTemplates";
    inline constexpr auto alarm_clock       = "AlarmClock";
    inline constexpr auto sound_select      = "SoundSelect";

    inline constexpr auto torch      = "Torch";
    inline constexpr auto nightshift = "Nightshift";
    inline constexpr auto autolock   = "Autolock";
    inline constexpr auto security = "Security";
    inline constexpr auto autolock = "Autolock";

    inline constexpr auto system          = "System";
    inline constexpr auto change_settings = "ChangeSettings";
    inline constexpr auto pin_settings    = "PINSettings";
    inline constexpr auto dialog_settings = "DialogSettings";
    inline constexpr auto change_passcode = "ChangePasscode";


R module-apps/application-settings/windows/apps/AppsAndToolsWindow.cpp => module-apps/application-settings/windows/apps/AppsWindow.cpp +3 -3
@@ 1,7 1,7 @@
// Copyright (c) 2017-2021, Mudita Sp. z.o.o. All rights reserved.
// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md

#include "AppsAndToolsWindow.hpp"
#include "AppsWindow.hpp"

#include <application-settings/windows/WindowNames.hpp>
#include <i18n/i18n.hpp>


@@ 9,13 9,13 @@

namespace gui
{
    AppsAndToolsWindow::AppsAndToolsWindow(app::Application *app) : OptionWindow(app, gui::window::name::apps_and_tools)
    AppsWindow::AppsWindow(app::Application *app) : OptionWindow(app, gui::window::name::apps)
    {
        addOptions(appsAndToolsOptionsList());
        setTitle(utils::translate("app_settings_apps"));
    }

    std::list<Option> AppsAndToolsWindow::appsAndToolsOptionsList()
    std::list<Option> AppsWindow::appsAndToolsOptionsList()
    {
        std::list<gui::Option> optionList;


R module-apps/application-settings/windows/apps/AppsAndToolsWindow.hpp => module-apps/application-settings/windows/apps/AppsWindow.hpp +2 -2
@@ 7,10 7,10 @@

namespace gui
{
    class AppsAndToolsWindow : public OptionWindow
    class AppsWindow : public OptionWindow
    {
      public:
        explicit AppsAndToolsWindow(app::Application *app);
        explicit AppsWindow(app::Application *app);

      private:
        std::list<Option> appsAndToolsOptionsList();

M module-apps/application-settings/windows/display-keypad/DisplayAndKeypadWindow.cpp => module-apps/application-settings/windows/display-keypad/DisplayAndKeypadWindow.cpp +1 -1
@@ 46,7 46,7 @@ namespace gui

#if DISABLED_SETTINGS_OPTIONS == 1
        addMenu(utils::translate("app_settings_display_font_size"), gui::window::name::font_size);
        addMenu(utils::translate("app_settings_display_locked_screen_wallpaper"), gui::window::name::wallpaper);
        addMenu(utils::translate("app_settings_display_wallpaper"), gui::window::name::wallpaper);
#endif // DISABLED_SETTINGS_OPTIONS

        addMenu(utils::translate("app_settings_display_keypad_light"), gui::window::name::keypad_light);

M module-apps/application-settings/windows/display-keypad/WallpaperWindow.cpp => module-apps/application-settings/windows/display-keypad/WallpaperWindow.cpp +1 -1
@@ 12,7 12,7 @@ namespace gui
{
    WallpaperWindow::WallpaperWindow(app::Application *app) : BaseSettingsWindow(app, window::name::wallpaper)
    {
        setTitle(utils::translate("app_settings_display_locked_screen_wallpaper"));
        setTitle(utils::translate("app_settings_display_wallpaper"));
    }

    auto WallpaperWindow::buildOptionsList() -> std::list<gui::Option>

M module-apps/application-settings/windows/network/SimCardsWindow.cpp => module-apps/application-settings/windows/network/SimCardsWindow.cpp +1 -1
@@ 74,7 74,7 @@ namespace gui
            utils::translate("app_settings_network_pin_settings"),
            [=](gui::Item &item) {
                auto pinSettingsData = std::make_unique<gui::PINSettingsSimData>(simStr);
                this->application->switchWindow(gui::window::name::pin_settings, std::move(pinSettingsData));
                this->application->switchWindow(gui::window::name::sim_pin_settings, std::move(pinSettingsData));
                return true;
            },
            nullptr,

R module-apps/application-settings/windows/PINSettingsWindow.cpp => module-apps/application-settings/windows/network/SimPINSettingsWindow.cpp +11 -10
@@ 1,24 1,25 @@
// Copyright (c) 2017-2021, Mudita Sp. z.o.o. All rights reserved.
// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md

#include "PINSettingsWindow.hpp"
#include "application-settings/ApplicationSettings.hpp"
#include "application-settings/data/PINSettingsLockStateData.hpp"
#include "application-settings/data/PINSettingsSimData.hpp"
#include "OptionSetting.hpp"
#include "SimPINSettingsWindow.hpp"

#include <application-settings/windows/WindowNames.hpp>
#include <application-settings/data/PINSettingsLockStateData.hpp>
#include <application-settings/data/PINSettingsSimData.hpp>
#include <OptionSetting.hpp>

#include <service-appmgr/Controller.hpp>
#include <locks/data/SimLockMessages.hpp>
#include <service-cellular-api>

namespace gui
{
    PINSettingsWindow::PINSettingsWindow(app::Application *app) : BaseSettingsWindow(app, window::name::pin_settings)
    SimPINSettingsWindow::SimPINSettingsWindow(app::Application *app)
        : BaseSettingsWindow(app, window::name::sim_pin_settings)
    {
        app->bus.sendUnicast<cellular::msg::request::sim::GetLockState>();
    }

    void PINSettingsWindow::onBeforeShow(ShowMode /*mode*/, SwitchData *data)
    void SimPINSettingsWindow::onBeforeShow(ShowMode /*mode*/, SwitchData *data)
    {
        if (const auto pinSettingsSimData = dynamic_cast<PINSettingsSimData *>(data); pinSettingsSimData != nullptr) {
            setTitle(utils::translate("app_settings_network_pin_settings") + " (" + pinSettingsSimData->getSim() + ")");


@@ 30,7 31,7 @@ namespace gui
        refreshOptionsList();
    }

    auto PINSettingsWindow::buildOptionsList() -> std::list<Option>
    auto SimPINSettingsWindow::buildOptionsList() -> std::list<Option>
    {
        std::list<Option> optionList;



@@ 67,7 68,7 @@ namespace gui
        return optionList;
    }

    void PINSettingsWindow::changePinState(bool &currentState)
    void SimPINSettingsWindow::changePinState(bool &currentState)
    {
        currentState = !currentState;
        refreshOptionsList();

R module-apps/application-settings/windows/PINSettingsWindow.hpp => module-apps/application-settings/windows/network/SimPINSettingsWindow.hpp +3 -3
@@ 3,14 3,14 @@

#pragma once

#include "BaseSettingsWindow.hpp"
#include <application-settings/windows/BaseSettingsWindow.hpp>

namespace gui
{
    class PINSettingsWindow : public BaseSettingsWindow
    class SimPINSettingsWindow : public BaseSettingsWindow
    {
      public:
        explicit PINSettingsWindow(app::Application *app);
        explicit SimPINSettingsWindow(app::Application *app);

      private:
        auto buildOptionsList() -> std::list<Option> override;

R module-apps/application-settings/windows/AutolockWindow.cpp => module-apps/application-settings/windows/security/AutolockWindow.cpp +10 -2
@@ 2,6 2,8 @@
// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md

#include "AutolockWindow.hpp"

#include <application-settings/ApplicationSettings.hpp>
#include <application-settings/data/AutoLockData.hpp>
#include <OptionSetting.hpp>
#include <i18n/i18n.hpp>


@@ 23,7 25,7 @@ namespace gui
    AutolockWindow::AutolockWindow(app::Application *app, app::settingsInterface::AutoLockSettings *autoLockSettings)
        : BaseSettingsWindow(app, window::name::autolock), autoLockSettings(autoLockSettings)
    {
        setTitle(utils::translate("app_settings_display_locked_screen_autolock"));
        setTitle(utils::translate("app_settings_display_security_autolock"));
    }

    auto AutolockWindow::buildOptionsList() -> std::list<gui::Option>


@@ 61,7 63,13 @@ namespace gui
        else if (mode == ShowMode::GUI_SHOW_INIT) {
            autoLockSettings->getAutoLockTime();
        }
        BaseSettingsWindow::onBeforeShow(mode, data);

        auto it = std::find_if(
            autoLockTimes.begin(), autoLockTimes.end(), [&](const std::pair<std::string, std::chrono::seconds> &elem) {
                return elem.second == currentAutoLockTimeout;
            });

        refreshOptionsList(std::distance(autoLockTimes.begin(), it));
    }

} // namespace gui

R module-apps/application-settings/windows/AutolockWindow.hpp => module-apps/application-settings/windows/security/AutolockWindow.hpp +6 -3
@@ 3,12 3,15 @@

#pragma once

#include "BaseSettingsWindow.hpp"
#include <module-apps/application-settings/ApplicationSettings.hpp>
#include <application-settings/windows/BaseSettingsWindow.hpp>

namespace gui
namespace app::settingsInterface
{
    class AutoLockSettings;
}; // namespace app::settingsInterface

namespace gui
{
    class AutolockWindow : public BaseSettingsWindow
    {
      public:

R module-apps/application-settings/windows/SecurityMainWindow.cpp => module-apps/application-settings/windows/security/SecurityMainWindow.cpp +16 -17
@@ 1,13 1,11 @@
// Copyright (c) 2017-2021, Mudita Sp. z.o.o. All rights reserved.
// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md

#include <locks/widgets/Lock.hpp>
#include <locks/data/LockData.hpp>
#include "application-settings/ApplicationSettings.hpp"
#include "application-settings/data/ChangePasscodeData.hpp"
#include "OptionSetting.hpp"
#include "SecurityMainWindow.hpp"

#include <application-settings/windows/WindowNames.hpp>
#include <OptionSetting.hpp>

namespace gui
{
    SecurityMainWindow::SecurityMainWindow(app::Application *app) : BaseSettingsWindow(app, window::name::security)


@@ 23,6 21,17 @@ namespace gui
    {
        std::list<Option> optionList;

        optionList.emplace_back(std::make_unique<gui::option::OptionSettings>(
            utils::translate("app_settings_display_security_autolock"),
            [=](gui::Item &item) {
                this->application->switchWindow(gui::window::name::autolock, nullptr);
                return true;
            },
            nullptr,
            nullptr,
            gui::option::SettingRightItem::ArrowWhite,
            false));

        optionList.emplace_back(std::make_unique<option::OptionSettings>(
            utils::translate("app_settings_security_phone_lock"),
            [=](Item &item) {


@@ 51,20 60,10 @@ namespace gui
                },
                nullptr,
                nullptr,
                option::SettingRightItem::ArrowWhite));
                option::SettingRightItem::ArrowWhite,
                true));
        }

        optionList.emplace_back(std::make_unique<gui::option::OptionSettings>(
            utils::translate("app_settings_display_locked_screen_autolock"),
            [=](gui::Item &item) {
                this->application->switchWindow(gui::window::name::autolock, nullptr);
                return true;
            },
            nullptr,
            nullptr,
            gui::option::SettingRightItem::ArrowWhite,
            false));

        return optionList;
    }
} // namespace gui

R module-apps/application-settings/windows/SecurityMainWindow.hpp => module-apps/application-settings/windows/security/SecurityMainWindow.hpp +1 -1
@@ 3,7 3,7 @@

#pragma once

#include "BaseSettingsWindow.hpp"
#include <application-settings/windows/BaseSettingsWindow.hpp>

namespace gui
{