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 => +1 -1
@@ 52,7 52,7 @@ namespace gui
resetTimer();
}
void WindowWithTimer::onClose()
void WindowWithTimer::onClose([[maybe_unused]] CloseReason reason)
{
detachTimerIfExists();
}
M => +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