~aleteoryx/muditaos

c2e45b07992bce2ed817bc09b8cecf7ed56f23a5 — Piotr Tański 4 years ago 97538c896
[EGD-7024] Keep the state of SMS on phone lock

The SMS is not deleted on manual or automatic phone lock.
M module-apps/application-messages/windows/NewMessage.cpp => module-apps/application-messages/windows/NewMessage.cpp +7 -1
@@ 290,12 290,18 @@ namespace gui
        setFocusItem(body);
    }

    void NewMessageWindow::onClose()
    void NewMessageWindow::onClose(CloseReason reason)
    {
        if (message->getText().empty()) {
            // Nothing to do if text is empty.
            return;
        }

        if (reason == CloseReason::PhoneLock) {
            memento->setState(message);
            message->clear();
            return;
        }
        if (const auto handled = handleMessageText(); !handled) {
            message->clear();
        }

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

#pragma once


@@ 23,7 23,7 @@ namespace gui
        bool onInput(const InputEvent &inputEvent) override;
        void onBeforeShow(ShowMode mode, SwitchData *data) override;
        void buildInterface() override;
        void onClose() override;
        void onClose(CloseReason reason) override;

      private:
        bool selectContact();

M module-apps/application-messages/windows/SMSThreadViewWindow.cpp => module-apps/application-messages/windows/SMSThreadViewWindow.cpp +1 -1
@@ 93,7 93,7 @@ namespace gui
        return AppWindow::onInput(inputEvent);
    }

    void SMSThreadViewWindow::onClose()
    void SMSThreadViewWindow::onClose([[maybe_unused]] CloseReason reason)
    {
        smsModel->handleDraftMessage();
    }

M module-apps/application-messages/windows/SMSThreadViewWindow.hpp => module-apps/application-messages/windows/SMSThreadViewWindow.hpp +1 -1
@@ 29,7 29,7 @@ namespace gui

        bool onInput(const InputEvent &inputEvent) override;
        void onBeforeShow(ShowMode mode, SwitchData *data) override;
        void onClose() override;
        void onClose(CloseReason reason) override;
        bool onDatabaseMessage(sys::Message *msgl) override;
        void rebuild() override;
        void buildInterface() override;

M module-apps/application-notes/windows/NoteEditWindow.cpp => module-apps/application-notes/windows/NoteEditWindow.cpp +1 -1
@@ 120,7 120,7 @@ namespace app::notes
        setNoteText(notesRecord->snippet);
    }

    void NoteEditWindow::onClose()
    void NoteEditWindow::onClose([[maybe_unused]] CloseReason reason)
    {
        if (presenter->isAutoSaveApproved()) {
            saveNote();

M module-apps/application-notes/windows/NoteEditWindow.hpp => module-apps/application-notes/windows/NoteEditWindow.hpp +1 -1
@@ 24,7 24,7 @@ namespace app::notes
        ~NoteEditWindow() noexcept override;

        void onBeforeShow(gui::ShowMode mode, gui::SwitchData *data) override;
        void onClose() override;
        void onClose(CloseReason reason) override;
        bool onInput(const gui::InputEvent &inputEvent) override;

        void rebuild() override;

M module-apps/application-phonebook/windows/PhonebookContactDetails.cpp => module-apps/application-phonebook/windows/PhonebookContactDetails.cpp +1 -1
@@ 46,7 46,7 @@ namespace gui
        erase();
    }

    void PhonebookContactDetails::onClose()
    void PhonebookContactDetails::onClose([[maybe_unused]] CloseReason reason)
    {
        contactDetailsModel->clearData();
    }

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

#pragma once


@@ 22,7 22,7 @@ namespace gui
        auto onInput(const InputEvent &inputEvent) -> bool override;
        void onBeforeShow(ShowMode mode, SwitchData *data) override;
        auto handleSwitchData(SwitchData *data) -> bool override;
        void onClose() override;
        void onClose(CloseReason reason) override;
        void rebuild() override;
        void buildInterface() override;
        void destroyInterface() override;

M module-apps/application-settings-new/windows/AddDeviceWindow.cpp => module-apps/application-settings-new/windows/AddDeviceWindow.cpp +1 -1
@@ 30,7 30,7 @@ namespace gui
        refreshOptionsList();
    }

    void AddDeviceWindow::onClose()
    void AddDeviceWindow::onClose([[maybe_unused]] CloseReason reason)
    {
        bluetoothSettingsModel->stopScan();
    }

M module-apps/application-settings-new/windows/AddDeviceWindow.hpp => module-apps/application-settings-new/windows/AddDeviceWindow.hpp +1 -1
@@ 17,7 17,7 @@ namespace gui

      private:
        void onBeforeShow(ShowMode mode, SwitchData *data) override;
        void onClose() override;
        void onClose(CloseReason reason) override;
        auto buildOptionsList() -> std::list<Option> override;

        std::unique_ptr<BluetoothSettingsModel> bluetoothSettingsModel;

M module-apps/apps-common/Application.cpp => module-apps/apps-common/Application.cpp +14 -6
@@ 234,7 234,8 @@ namespace app

    void Application::switchWindow(const std::string &windowName,
                                   gui::ShowMode cmd,
                                   std::unique_ptr<gui::SwitchData> data)
                                   std::unique_ptr<gui::SwitchData> data,
                                   SwitchReason reason)
    {

        std::string window;


@@ 248,13 249,13 @@ namespace app
        // case to handle returning to previous application
        if (windowName.empty()) {
            window = getCurrentWindow()->getName();
            auto msg =
                std::make_shared<AppSwitchWindowMessage>(window, getCurrentWindow()->getName(), std::move(data), cmd);
            auto msg = std::make_shared<AppSwitchWindowMessage>(
                window, getCurrentWindow()->getName(), std::move(data), cmd, reason);
            bus.sendUnicast(msg, this->GetName());
        }
        else {
            auto msg = std::make_shared<AppSwitchWindowMessage>(
                windowName, getCurrentWindow() ? getCurrentWindow()->getName() : "", std::move(data), cmd);
                windowName, getCurrentWindow() ? getCurrentWindow()->getName() : "", std::move(data), cmd, reason);
            bus.sendUnicast(msg, this->GetName());
        }
    }


@@ 507,7 508,10 @@ namespace app
            }
            if (!isCurrentWindow(msg->getWindowName())) {
                if (!windowsStack.isEmpty()) {
                    getCurrentWindow()->onClose();
                    const auto closeReason = msg->getReason() == SwitchReason::PhoneLock
                                                 ? gui::Window::CloseReason::PhoneLock
                                                 : gui::Window::CloseReason::WindowSwitch;
                    getCurrentWindow()->onClose(closeReason);
                }
                setActiveWindow(msg->getWindowName());
            }


@@ 641,7 645,7 @@ namespace app

        for (const auto &[windowName, window] : windowsStack) {
            LOG_INFO("Closing a window: %s", windowName.c_str());
            window->onClose();
            window->onClose(gui::Window::CloseReason::ApplicationClose);
        }

        windowsStack.windows.clear();


@@ 830,6 834,10 @@ namespace app
                     std::to_string(volumeParams->getVolume()).c_str());
            handleVolumeChanged(volumeParams->getVolume(), volumeParams->getAudioContext());
        }
        else if (id == ID::PhoneLock) {
            switchWindow(
                gui::popup::resolveWindowName(id), gui::ShowMode::GUI_SHOW_INIT, nullptr, SwitchReason::PhoneLock);
        }
        else if (id == ID::PhoneLockInput || id == ID::PhoneLockChangeInfo) {
            auto popupParams = static_cast<const gui::PhoneUnlockInputRequestParams *>(params);


M module-apps/apps-common/Application.hpp => module-apps/apps-common/Application.hpp +8 -1
@@ 78,6 78,12 @@ namespace app
        // switch to main window on application switch and allow declared handler to switch to desired window.
    };

    enum class SwitchReason
    {
        SwitchRequest,
        PhoneLock
    };

    struct StartInBackground
    {
        StartInBackground(bool _value) : value{_value}


@@ 225,7 231,8 @@ namespace app
        ///        that we dont want to close app calling
        void switchWindow(const std::string &windowName,
                          gui::ShowMode cmd                     = gui::ShowMode::GUI_SHOW_INIT,
                          std::unique_ptr<gui::SwitchData> data = nullptr);
                          std::unique_ptr<gui::SwitchData> data = nullptr,
                          SwitchReason reason                   = SwitchReason::SwitchRequest);

        /// Same as switchWindow above
        inline void switchWindow(const std::string &windowName, std::unique_ptr<gui::SwitchData> data)

M module-apps/apps-common/messages/AppMessage.hpp => module-apps/apps-common/messages/AppMessage.hpp +8 -2
@@ 116,6 116,7 @@ namespace app
        std::string window;
        std::string senderWindow;
        gui::ShowMode command;
        SwitchReason reason;
        std::unique_ptr<gui::SwitchData> data;

      public:


@@ 124,9 125,10 @@ namespace app
        AppSwitchWindowMessage(const std::string &window,
                               const std::string senderWindow,
                               std::unique_ptr<gui::SwitchData> data,
                               const gui::ShowMode command = gui::ShowMode::GUI_SHOW_INIT)
                               gui::ShowMode command = gui::ShowMode::GUI_SHOW_INIT,
                               SwitchReason reason   = SwitchReason::SwitchRequest)
            : AppMessage(MessageType::AppSwitchWindow), window{window},
              senderWindow{senderWindow}, command{command}, data{std::move(data)} {};
              senderWindow{senderWindow}, command{command}, reason{reason}, data{std::move(data)} {};
        virtual ~AppSwitchWindowMessage() = default;

        const std::string &getWindowName() const


@@ 141,6 143,10 @@ namespace app
        {
            return command;
        };
        [[nodiscard]] SwitchReason getReason() const noexcept
        {
            return reason;
        }
        std::unique_ptr<gui::SwitchData> &getData()
        {
            return data;

M module-apps/apps-common/popups/WindowWithTimer.cpp => module-apps/apps-common/popups/WindowWithTimer.cpp +1 -1
@@ 52,7 52,7 @@ namespace gui
        resetTimer();
    }

    void WindowWithTimer::onClose()
    void WindowWithTimer::onClose([[maybe_unused]] CloseReason reason)
    {
        detachTimerIfExists();
    }

M module-apps/apps-common/popups/WindowWithTimer.hpp => module-apps/apps-common/popups/WindowWithTimer.hpp +1 -1
@@ 22,7 22,7 @@ namespace gui
        void destroyInterface() override;
        ~WindowWithTimer() override;
        void onBeforeShow(ShowMode mode, SwitchData *data) override;
        void onClose() override;
        void onClose(CloseReason reason) override;
        bool onInput(const gui::InputEvent &inputEvent) override;

      protected:

M module-apps/apps-common/windows/OptionWindow.cpp => module-apps/apps-common/windows/OptionWindow.cpp +1 -1
@@ 109,7 109,7 @@ namespace gui
        return appConfiguration;
    }

    void OptionWindow::onClose()
    void OptionWindow::onClose([[maybe_unused]] CloseReason reason)
    {
        optionsList->onClose();
    }

M module-apps/apps-common/windows/OptionWindow.hpp => module-apps/apps-common/windows/OptionWindow.hpp +1 -1
@@ 37,7 37,7 @@ namespace gui
        OptionWindow(app::Application *app, const std::string &name, std::list<Option> options);

        void onBeforeShow(ShowMode mode, SwitchData *data) override;
        void onClose() override;
        void onClose(CloseReason reason) override;
        void rebuild() override;
        void buildInterface() override;
        status_bar::Configuration configureStatusBar(status_bar::Configuration appConfiguration) override;

M module-gui/gui/widgets/Window.cpp => module-gui/gui/widgets/Window.cpp +1 -1
@@ 23,7 23,7 @@ namespace gui
    void Window::onBeforeShow(ShowMode mode, SwitchData *data)
    {}

    void Window::onClose()
    void Window::onClose(CloseReason reason)
    {}

    void Window::getRefreshArea(uint16_t &x, uint16_t &y, uint16_t &w, uint16_t &h)

M module-gui/gui/widgets/Window.hpp => module-gui/gui/widgets/Window.hpp +8 -2
@@ 10,7 10,6 @@

namespace gui
{

    /// Base window for all UI windows
    ///
    /// It consists of:


@@ 34,6 33,13 @@ namespace gui
        std::string name;

      public:
        enum class CloseReason
        {
            ApplicationClose,
            WindowSwitch,
            PhoneLock
        };

        Window() = delete;
        explicit Window(std::string name);



@@ 41,7 47,7 @@ namespace gui
        /// switch data to show
        /// @note this is most likely being duplicated by handleSwitchData
        virtual void onBeforeShow(ShowMode mode, SwitchData *data);
        virtual void onClose();
        virtual void onClose(CloseReason reason);
        virtual void getRefreshArea(uint16_t &x, uint16_t &y, uint16_t &w, uint16_t &h);

        /// run prior to onBeforeShow