diff --git a/module-apps/application-messages/ApplicationMessages.cpp b/module-apps/application-messages/ApplicationMessages.cpp index e0fba622a..247c42f72 100644 --- a/module-apps/application-messages/ApplicationMessages.cpp +++ b/module-apps/application-messages/ApplicationMessages.cpp @@ -25,7 +25,7 @@ #include #include #include - +#include namespace app { static constexpr auto messagesStackDepth = 1024 * 6; // 6Kb stack size @@ -38,6 +38,8 @@ namespace app AsyncCallbackReceiver{this} { bus.channels.push_back(sys::BusChannel::ServiceDBNotifications); + bus.channels.push_back(sys::BusChannel::PhoneLockChanges); + addActionReceiver(manager::actions::CreateSms, [this](auto &&data) { return handleCreateSmsAction(std::move(data)); }); addActionReceiver(manager::actions::ShowSmsTemplates, [this](auto &&data) { @@ -70,6 +72,16 @@ namespace app } return sys::MessageNone{}; }); + + connect(typeid(locks::UnlockedPhone), [&](sys::Message *msg) -> sys::MessagePointer { + phoneLockState = PhoneLockState::Unlocked; + return sys::MessageNone{}; + }); + + connect(typeid(locks::LockedPhone), [&](sys::Message *msg) -> sys::MessagePointer { + phoneLockState = PhoneLockState::Locked; + return sys::MessageNone{}; + }); } // Invoked upon receiving data message @@ -85,6 +97,9 @@ namespace app if (msg != nullptr) { userInterfaceDBNotification(msgl, [&]([[maybe_unused]] sys::Message *, [[maybe_unused]] const std::string &) { + if (phoneLockState == PhoneLockState::Locked) { + return false; + } return msg->interface == db::Interface::Name::SMSThread || msg->interface == db::Interface::Name::SMS || msg->interface == db::Interface::Name::SMSTemplate; diff --git a/module-apps/application-messages/include/application-messages/ApplicationMessages.hpp b/module-apps/application-messages/include/application-messages/ApplicationMessages.hpp index be2b22b0b..3565bf079 100644 --- a/module-apps/application-messages/include/application-messages/ApplicationMessages.hpp +++ b/module-apps/application-messages/include/application-messages/ApplicationMessages.hpp @@ -69,6 +69,13 @@ namespace app private: ActionResult handleCreateSmsAction(std::unique_ptr data); + + enum class PhoneLockState + { + Locked, + Unlocked + }; + PhoneLockState phoneLockState = PhoneLockState::Unlocked; }; template <> diff --git a/module-apps/application-messages/windows/SMSThreadViewWindow.cpp b/module-apps/application-messages/windows/SMSThreadViewWindow.cpp index f5f61dc6c..3ebd334ed 100644 --- a/module-apps/application-messages/windows/SMSThreadViewWindow.cpp +++ b/module-apps/application-messages/windows/SMSThreadViewWindow.cpp @@ -61,6 +61,10 @@ namespace gui void SMSThreadViewWindow::onBeforeShow(ShowMode mode, SwitchData *data) { + if (mode == ShowMode::GUI_SHOW_RETURN) { + smsList->rebuildList(); + } + if (auto pdata = dynamic_cast(data); pdata) { LOG_INFO("Thread data received: %" PRIu32, pdata->thread->ID); saveInfoAboutPreviousAppForProperSwitchBack(data); diff --git a/pure_changelog.md b/pure_changelog.md index d8e0357ef..27109f1f5 100644 --- a/pure_changelog.md +++ b/pure_changelog.md @@ -41,6 +41,7 @@ * Fixed USB charging port detection. * Fixed Template window clearing after all templates are removed. * Fixed wrong notification about multiple unread messages in case there's only one unread left +* Fixed missing notification about new SMS when phone was locked on application Messages ## [1.7.0 2023-03-23] ### Changed / Improved