~aleteoryx/muditaos

5777882aae2b1d93fd0e56fb31d63e2da3ee72bd — Adam Dobrowolski 4 years ago b0f4836
[EGD-8170] Possible crash on window entry fix

This is not the best fix, as it most probably should be
written differently in the first place
23 files changed, 50 insertions(+), 73 deletions(-)

M module-apps/application-settings/ApplicationSettings.cpp
M module-apps/application-settings/CMakeLists.txt
M module-apps/application-settings/windows/BaseSettingsWindow.hpp
M module-apps/application-settings/windows/apps/AlarmClockWindow.hpp
M module-apps/application-settings/windows/apps/MessagesWindow.hpp
M module-apps/application-settings/windows/bluetooth/AllDevicesWindow.hpp
M module-apps/application-settings/windows/bluetooth/BluetoothWindow.hpp
M module-apps/application-settings/windows/display-keypad/DisplayLightWindow.hpp
M module-apps/application-settings/windows/display-keypad/EditQuotesWindow.hpp
D module-apps/application-settings/windows/display-keypad/FontSizeWindow.cpp
D module-apps/application-settings/windows/display-keypad/FontSizeWindow.hpp
M module-apps/application-settings/windows/display-keypad/InputLanguageWindow.hpp
M module-apps/application-settings/windows/display-keypad/KeypadLightWindow.hpp
M module-apps/application-settings/windows/display-keypad/QuotesOptionsWindow.hpp
M module-apps/application-settings/windows/display-keypad/WallpaperWindow.hpp
M module-apps/application-settings/windows/network/SimCardsWindow.cpp
M module-apps/application-settings/windows/network/SimCardsWindow.hpp
M module-apps/application-settings/windows/network/SimPINSettingsWindow.hpp
M module-apps/application-settings/windows/phone-modes/ConnectionFrequencyWindow.hpp
M module-apps/application-settings/windows/security/SecurityMainWindow.hpp
M module-apps/application-settings/windows/system/DateAndTimeMainWindow.cpp
M module-apps/application-settings/windows/system/DateAndTimeMainWindow.hpp
M module-apps/apps-common/windows/OptionWindow.hpp
M module-apps/application-settings/ApplicationSettings.cpp => module-apps/application-settings/ApplicationSettings.cpp +1 -5
@@ 1,4 1,4 @@
// Copyright (c) 2017-2021, Mudita Sp. z.o.o. All rights reserved.
// Copyright (c) 2017-2022, Mudita Sp. z.o.o. All rights reserved.
// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md

#include <application-settings/ApplicationSettings.hpp>


@@ 25,7 25,6 @@
#include <application-settings/windows/network/ApnOptionsWindow.hpp>
#include <application-settings/windows/display-keypad/DisplayAndKeypadWindow.hpp>
#include <application-settings/windows/display-keypad/DisplayLightWindow.hpp>
#include <application-settings/windows/display-keypad/FontSizeWindow.hpp>
#include <application-settings/windows/display-keypad/WallpaperWindow.hpp>
#include <application-settings/windows/display-keypad/QuotesMainWindow.hpp>
#include <application-settings/windows/display-keypad/QuotesAddWindow.hpp>


@@ 439,9 438,6 @@ namespace app
        windowsFactory.attach(gui::window::name::display_light, [](ApplicationCommon *app, const std::string &name) {
            return std::make_unique<gui::DisplayLightWindow>(app, static_cast<ApplicationSettings *>(app));
        });
        windowsFactory.attach(gui::window::name::font_size, [](ApplicationCommon *app, const std::string &name) {
            return std::make_unique<gui::FontSizeWindow>(app);
        });
        windowsFactory.attach(gui::window::name::wallpaper, [](ApplicationCommon *app, const std::string &name) {
            return std::make_unique<gui::WallpaperWindow>(app, static_cast<ApplicationSettings *>(app));
        });

M module-apps/application-settings/CMakeLists.txt => module-apps/application-settings/CMakeLists.txt +0 -2
@@ 66,7 66,6 @@ target_sources(application-settings
        windows/display-keypad/DisplayAndKeypadWindow.cpp
        windows/display-keypad/DisplayLightWindow.cpp
        windows/display-keypad/EditQuotesWindow.cpp
        windows/display-keypad/FontSizeWindow.cpp
        windows/display-keypad/InputLanguageWindow.cpp
        windows/display-keypad/KeypadLightWindow.cpp
        windows/display-keypad/QuoteCategoriesWindow.cpp


@@ 116,7 115,6 @@ target_sources(application-settings
        windows/display-keypad/DisplayAndKeypadWindow.hpp
        windows/display-keypad/DisplayLightWindow.hpp
        windows/display-keypad/EditQuotesWindow.hpp
        windows/display-keypad/FontSizeWindow.hpp
        windows/display-keypad/InputLanguageWindow.hpp
        windows/display-keypad/KeypadLightWindow.hpp
        windows/display-keypad/QuoteCategoriesWindow.hpp

M module-apps/application-settings/windows/BaseSettingsWindow.hpp => module-apps/application-settings/windows/BaseSettingsWindow.hpp +2 -2
@@ 1,4 1,4 @@
// Copyright (c) 2017-2021, Mudita Sp. z.o.o. All rights reserved.
// Copyright (c) 2017-2022, Mudita Sp. z.o.o. All rights reserved.
// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md

#pragma once


@@ 21,7 21,7 @@ namespace gui

        void onBeforeShow(ShowMode mode, SwitchData *data) override;

      protected:
      private:
        virtual auto buildOptionsList() -> std::list<gui::Option> = 0;
    };
} // namespace gui

M module-apps/application-settings/windows/apps/AlarmClockWindow.hpp => module-apps/application-settings/windows/apps/AlarmClockWindow.hpp +3 -1
@@ 1,4 1,4 @@
// Copyright (c) 2017-2021, Mudita Sp. z.o.o. All rights reserved.
// Copyright (c) 2017-2022, Mudita Sp. z.o.o. All rights reserved.
// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md

#pragma once


@@ 46,5 46,7 @@ namespace gui

        /// Audio settings model
        std::unique_ptr<audio_settings::AbstractAudioSettingsModel> mAudioModel;

        OptionWindowDestroyer rai_destroyer = OptionWindowDestroyer(*this);
    };
} // namespace gui

M module-apps/application-settings/windows/apps/MessagesWindow.hpp => module-apps/application-settings/windows/apps/MessagesWindow.hpp +3 -1
@@ 1,4 1,4 @@
// Copyright (c) 2017-2021, Mudita Sp. z.o.o. All rights reserved.
// Copyright (c) 2017-2022, Mudita Sp. z.o.o. All rights reserved.
// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md

#pragma once


@@ 54,5 54,7 @@ namespace gui

        /// Audio settings model
        std::unique_ptr<audio_settings::AbstractAudioSettingsModel> mAudioModel;

        OptionWindowDestroyer rai_destroyer = OptionWindowDestroyer(*this);
    };
} // namespace gui

M module-apps/application-settings/windows/bluetooth/AllDevicesWindow.hpp => module-apps/application-settings/windows/bluetooth/AllDevicesWindow.hpp +2 -1
@@ 1,4 1,4 @@
// Copyright (c) 2017-2021, Mudita Sp. z.o.o. All rights reserved.
// Copyright (c) 2017-2022, Mudita Sp. z.o.o. All rights reserved.
// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md
#pragma once



@@ 25,6 25,7 @@ namespace gui
        auto handleDeviceAction(const Devicei &) -> bool;

        std::shared_ptr<BluetoothSettingsModel> bluetoothSettingsModel{};
        OptionWindowDestroyer rai_destroyer = OptionWindowDestroyer(*this);
    };

} // namespace gui

M module-apps/application-settings/windows/bluetooth/BluetoothWindow.hpp => module-apps/application-settings/windows/bluetooth/BluetoothWindow.hpp +2 -1
@@ 1,4 1,4 @@
// Copyright (c) 2017-2021, Mudita Sp. z.o.o. All rights reserved.
// Copyright (c) 2017-2022, Mudita Sp. z.o.o. All rights reserved.
// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md

#pragma once


@@ 22,5 22,6 @@ namespace gui
        std::unique_ptr<BluetoothSettingsModel> bluetoothSettingsModel;
        bool isBluetoothSwitchOn       = false;
        bool isPhoneVisibilitySwitchOn = false;
        OptionWindowDestroyer rai_destroyer = OptionWindowDestroyer(*this);
    };
} // namespace gui

M module-apps/application-settings/windows/display-keypad/DisplayLightWindow.hpp => module-apps/application-settings/windows/display-keypad/DisplayLightWindow.hpp +2 -1
@@ 1,4 1,4 @@
// Copyright (c) 2017-2021, Mudita Sp. z.o.o. All rights reserved.
// Copyright (c) 2017-2022, Mudita Sp. z.o.o. All rights reserved.
// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md

#pragma once


@@ 38,5 38,6 @@ namespace gui
        float ambientLight                                               = 0.0;
        sys::TimerHandle timerTask;
        [[nodiscard]] auto onTimerTimeout(Item &self, sys::Timer &task) -> bool;
        OptionWindowDestroyer rai_destroyer = OptionWindowDestroyer(*this);
    };
} // namespace gui

M module-apps/application-settings/windows/display-keypad/EditQuotesWindow.hpp => module-apps/application-settings/windows/display-keypad/EditQuotesWindow.hpp +2 -1
@@ 1,4 1,4 @@
// Copyright (c) 2017-2021, Mudita Sp. z.o.o. All rights reserved.
// Copyright (c) 2017-2022, Mudita Sp. z.o.o. All rights reserved.
// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md

#pragma once


@@ 22,5 22,6 @@ namespace gui
        bool isCustomSwitchOn        = false;

        Item *quotes;
        OptionWindowDestroyer rai_destroyer = OptionWindowDestroyer(*this);
    };
} // namespace gui

D module-apps/application-settings/windows/display-keypad/FontSizeWindow.cpp => module-apps/application-settings/windows/display-keypad/FontSizeWindow.cpp +0 -21
@@ 1,21 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 "FontSizeWindow.hpp"

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

namespace gui
{

    FontSizeWindow::FontSizeWindow(app::ApplicationCommon *app) : BaseSettingsWindow(app, gui::window::name::font_size)
    {
        setTitle(utils::translate("app_settings_display_font_size"));
    }

    auto FontSizeWindow::buildOptionsList() -> std::list<gui::Option>
    {
        return std::list<gui::Option>();
    }

} // namespace gui

D module-apps/application-settings/windows/display-keypad/FontSizeWindow.hpp => module-apps/application-settings/windows/display-keypad/FontSizeWindow.hpp +0 -17
@@ 1,17 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-settings/windows/BaseSettingsWindow.hpp>

namespace gui
{

    class FontSizeWindow : public BaseSettingsWindow
    {
      public:
        explicit FontSizeWindow(app::ApplicationCommon *app);
        auto buildOptionsList() -> std::list<gui::Option> override;
    };
} // namespace gui

M module-apps/application-settings/windows/display-keypad/InputLanguageWindow.hpp => module-apps/application-settings/windows/display-keypad/InputLanguageWindow.hpp +2 -1
@@ 1,4 1,4 @@
// Copyright (c) 2017-2021, Mudita Sp. z.o.o. All rights reserved.
// Copyright (c) 2017-2022, Mudita Sp. z.o.o. All rights reserved.
// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md

#pragma once


@@ 24,5 24,6 @@ namespace gui
        const std::vector<Language> langList;
        Language selectedLanguage;
        unsigned int selectedLanguageIndex{0};
        OptionWindowDestroyer rai_destroyer = OptionWindowDestroyer(*this);
    };
} // namespace gui

M module-apps/application-settings/windows/display-keypad/KeypadLightWindow.hpp => module-apps/application-settings/windows/display-keypad/KeypadLightWindow.hpp +2 -1
@@ 1,4 1,4 @@
// Copyright (c) 2017-2021, Mudita Sp. z.o.o. All rights reserved.
// Copyright (c) 2017-2022, Mudita Sp. z.o.o. All rights reserved.
// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md

#pragma once


@@ 19,5 19,6 @@ namespace gui
        std::list<Option> buildOptionsList() override;

        bool isActiveSwitchOn            = false;
        OptionWindowDestroyer rai_destroyer = OptionWindowDestroyer(*this);
    };
} // namespace gui

M module-apps/application-settings/windows/display-keypad/QuotesOptionsWindow.hpp => module-apps/application-settings/windows/display-keypad/QuotesOptionsWindow.hpp +2 -1
@@ 1,4 1,4 @@
// Copyright (c) 2017-2021, Mudita Sp. z.o.o. All rights reserved.
// Copyright (c) 2017-2022, Mudita Sp. z.o.o. All rights reserved.
// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md

#pragma once


@@ 19,5 19,6 @@ namespace gui

        std::shared_ptr<Quotes::QuotesModel> quotesModel;
        Quotes::QuoteRecord quote;
        OptionWindowDestroyer rai_destroyer = OptionWindowDestroyer(*this);
    };
} // namespace gui

M module-apps/application-settings/windows/display-keypad/WallpaperWindow.hpp => module-apps/application-settings/windows/display-keypad/WallpaperWindow.hpp +3 -1
@@ 1,4 1,4 @@
// Copyright (c) 2017-2021, Mudita Sp. z.o.o. All rights reserved.
// Copyright (c) 2017-2022, Mudita Sp. z.o.o. All rights reserved.
// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md

#pragma once


@@ 21,5 21,7 @@ namespace gui

        std::unique_ptr<WallpaperOptionModel> optionModel;
        Item *quotes;

        OptionWindowDestroyer rai_destroyer = OptionWindowDestroyer(*this);
    };
} // namespace gui

M module-apps/application-settings/windows/network/SimCardsWindow.cpp => module-apps/application-settings/windows/network/SimCardsWindow.cpp +0 -5
@@ 15,11 15,6 @@ namespace gui
        : BaseSettingsWindow(app, gui::window::name::sim_cards), simParams(simParams)
    {}

    SimCardsWindow::~SimCardsWindow()
    {
        destroyForTheFuture();
    }

    void SimCardsWindow::onBeforeShow(ShowMode mode, SwitchData *data)
    {
        setTitle(utils::translate("app_settings_network_sim_cards"));

M module-apps/application-settings/windows/network/SimCardsWindow.hpp => module-apps/application-settings/windows/network/SimCardsWindow.hpp +1 -1
@@ 20,8 20,8 @@ namespace gui

      public:
        SimCardsWindow(app::ApplicationCommon *app, app::settingsInterface::SimParams *simParams);
        ~SimCardsWindow();

        void onBeforeShow(ShowMode mode, SwitchData *data) override;
        OptionWindowDestroyer rai_destroyer = OptionWindowDestroyer(*this);
    };
} // namespace gui

M module-apps/application-settings/windows/network/SimPINSettingsWindow.hpp => module-apps/application-settings/windows/network/SimPINSettingsWindow.hpp +2 -1
@@ 1,4 1,4 @@
// Copyright (c) 2017-2021, Mudita Sp. z.o.o. All rights reserved.
// Copyright (c) 2017-2022, Mudita Sp. z.o.o. All rights reserved.
// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md

#pragma once


@@ 18,5 18,6 @@ namespace gui
        void changePinState(bool &currentState);

        bool pinIsOn = false;
        OptionWindowDestroyer rai_destroyer = OptionWindowDestroyer(*this);
    };
} // namespace gui

M module-apps/application-settings/windows/phone-modes/ConnectionFrequencyWindow.hpp => module-apps/application-settings/windows/phone-modes/ConnectionFrequencyWindow.hpp +2 -1
@@ 1,4 1,4 @@
// Copyright (c) 2017-2021, Mudita Sp. z.o.o. All rights reserved.
// Copyright (c) 2017-2022, Mudita Sp. z.o.o. All rights reserved.
// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md

#pragma once


@@ 20,6 20,7 @@ namespace gui
        app::settingsInterface::ConnectionSettings *connectionSettings;
        void updateInterval(uint8_t value);
        std::vector<uint8_t> frequency{0, 15, 30, 45, 60};
        OptionWindowDestroyer destroyer = OptionWindowDestroyer(*this);

      public:
        ConnectionFrequencyWindow(app::ApplicationCommon *app,

M module-apps/application-settings/windows/security/SecurityMainWindow.hpp => module-apps/application-settings/windows/security/SecurityMainWindow.hpp +2 -1
@@ 1,4 1,4 @@
// Copyright (c) 2017-2021, Mudita Sp. z.o.o. All rights reserved.
// Copyright (c) 2017-2022, Mudita Sp. z.o.o. All rights reserved.
// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md

#pragma once


@@ 17,5 17,6 @@ namespace gui
        void onBeforeShow(ShowMode mode, SwitchData *data) override;

        bool isPhoneLockEnabled;
        OptionWindowDestroyer destroyer = OptionWindowDestroyer(*this);
    };
} // namespace gui

M module-apps/application-settings/windows/system/DateAndTimeMainWindow.cpp => module-apps/application-settings/windows/system/DateAndTimeMainWindow.cpp +0 -5
@@ 23,11 23,6 @@ namespace gui
        changeDateAndTimeWindow  = window::name::change_date_and_time;
    }

    DateAndTimeMainWindow::~DateAndTimeMainWindow()
    {
        destroyForTheFuture();
    }

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

M module-apps/application-settings/windows/system/DateAndTimeMainWindow.hpp => module-apps/application-settings/windows/system/DateAndTimeMainWindow.hpp +1 -1
@@ 13,7 13,6 @@ namespace gui
    {
      public:
        DateAndTimeMainWindow(app::ApplicationCommon *app, std::string name);
        ~DateAndTimeMainWindow();

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


@@ 25,5 24,6 @@ namespace gui
        utils::time::Locale::DateFormat dateFormat = utils::time::Locale::defaultDateFormat;

        std::string changeDateAndTimeWindow;
        OptionWindowDestroyer rai_destroyer = OptionWindowDestroyer(*this);
    };
} // namespace gui

M module-apps/apps-common/windows/OptionWindow.hpp => module-apps/apps-common/windows/OptionWindow.hpp +16 -1
@@ 10,6 10,7 @@

namespace gui
{
    class OptionWindowDestroyer;
    ///  @brief Options window generating various options based on provided Option list.
    ///
    ///  Options GUI window with ListView populated accordingly to provided options in window constructor.


@@ 32,10 33,24 @@ namespace gui
        void rebuild() override;
        void buildInterface() override;

      protected:
      private:
        friend OptionWindowDestroyer;
        /// this have to be called in inheriting window if someone passes callback to it
        /// othervise destruction order will cause call to non existing parent element
        /// this is because on how OptionWindows are designed
        void destroyForTheFuture();
    };

    class OptionWindowDestroyer
    {
        OptionWindow &w;

      public:
        OptionWindowDestroyer(OptionWindow &w) : w(w)
        {}
        ~OptionWindowDestroyer()
        {
            w.destroyForTheFuture();
        }
    };
}; // namespace gui