From cc0ec423bfc250c7828d2d8c180709a48eb3caa3 Mon Sep 17 00:00:00 2001 From: Lefucjusz Date: Tue, 19 Sep 2023 13:52:55 +0200 Subject: [PATCH] [MOS-1035] Fixes in new alarm window UI flow * Fixed disappearing left functional button label when popup appeared while focused on sound selection field or AM/PM field * Fixed erasing selections on custom alarm edit window when popup appeared. * Added preview playback stopping after manually blocking the phone. --- .../ApplicationAlarmClock.cpp | 6 +--- .../models/CustomRepeatModel.cpp | 4 +-- .../models/NewEditAlarmModel.cpp | 12 +++---- .../models/NewEditAlarmModel.hpp | 6 ++-- .../AlarmClockEditWindowPresenter.cpp | 3 +- .../widgets/AlarmMusicOptionsItem.cpp | 19 +++++++---- .../widgets/AlarmMusicOptionsItem.hpp | 12 +++---- .../widgets/AlarmRRuleOptionsItem.cpp | 34 ++++++++++++------- .../widgets/AlarmRRuleOptionsItem.hpp | 13 +++---- .../windows/CustomRepeatWindow.cpp | 18 +++++++--- .../windows/CustomRepeatWindow.hpp | 3 +- .../windows/NewEditAlarmWindow.cpp | 5 ++- pure_changelog.md | 2 ++ 13 files changed, 77 insertions(+), 60 deletions(-) diff --git a/module-apps/application-alarm-clock/ApplicationAlarmClock.cpp b/module-apps/application-alarm-clock/ApplicationAlarmClock.cpp index 9d3443461caf37dff8f35b5b7d7b847817d535ec..743229950e475682d8a5d4e1a9d1a8c2ff4b7212 100644 --- a/module-apps/application-alarm-clock/ApplicationAlarmClock.cpp +++ b/module-apps/application-alarm-clock/ApplicationAlarmClock.cpp @@ -12,19 +12,16 @@ #include "windows/AppWindow.hpp" #include "windows/OptionWindow.hpp" #include -#include -#include #include namespace app { - ApplicationAlarmClock::ApplicationAlarmClock(std::string name, std::string parent, StatusIndicators statusIndicators, uint32_t stackDepth, sys::ServicePriority priority) - : Application(name, parent, statusIndicators, false, stackDepth, priority), + : Application(std::move(name), std::move(parent), statusIndicators, false, stackDepth, priority), soundsPlayer{std::make_shared(this)} { bus.channels.push_back(sys::BusChannel::ServiceDBNotifications); @@ -126,5 +123,4 @@ namespace app soundsPlayer->stop(notification->token); return sys::MessageNone{}; } - } /* namespace app */ diff --git a/module-apps/application-alarm-clock/models/CustomRepeatModel.cpp b/module-apps/application-alarm-clock/models/CustomRepeatModel.cpp index abe32b9dc333eae69a2da833ce6241906f800028..cc14a3a8896a7b4ad9e02dfca220fe7fccadadf0 100644 --- a/module-apps/application-alarm-clock/models/CustomRepeatModel.cpp +++ b/module-apps/application-alarm-clock/models/CustomRepeatModel.cpp @@ -1,4 +1,4 @@ -// Copyright (c) 2017-2021, Mudita Sp. z.o.o. All rights reserved. +// Copyright (c) 2017-2023, Mudita Sp. z.o.o. All rights reserved. // For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md #include "CustomRepeatModel.hpp" @@ -12,7 +12,7 @@ namespace app::alarmClock { CustomRepeatModel::CustomRepeatModel(app::ApplicationCommon *app, std::shared_ptr rRulePresenter) - : application(app), rRulePresenter(rRulePresenter) + : application(app), rRulePresenter(std::move(rRulePresenter)) {} unsigned int CustomRepeatModel::requestRecordsCount() diff --git a/module-apps/application-alarm-clock/models/NewEditAlarmModel.cpp b/module-apps/application-alarm-clock/models/NewEditAlarmModel.cpp index 550b5464c818f23478863c9a35df5be74953965f..b913908c34cb17b1b083f626f8e8270b6f61c3b5 100644 --- a/module-apps/application-alarm-clock/models/NewEditAlarmModel.cpp +++ b/module-apps/application-alarm-clock/models/NewEditAlarmModel.cpp @@ -1,4 +1,4 @@ -// Copyright (c) 2017-2022, Mudita Sp. z.o.o. All rights reserved. +// Copyright (c) 2017-2023, Mudita Sp. z.o.o. All rights reserved. // For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md #include "NewEditAlarmModel.hpp" @@ -23,12 +23,12 @@ namespace app::alarmClock rRulePresenter(std::move(rRulePresenter)) {} - unsigned int NewEditAlarmModel::requestRecordsCount() + unsigned NewEditAlarmModel::requestRecordsCount() { return internalData.size(); } - unsigned int NewEditAlarmModel::getMinimalItemSpaceRequired() const + unsigned NewEditAlarmModel::getMinimalItemSpaceRequired() const { return style::text_spinner_label::h; } @@ -70,7 +70,7 @@ namespace app::alarmClock [app]() { app->getCurrentWindow()->navBarRestoreFromTemporaryMode(); }); internalData.push_back(repeatOption); - for (auto &item : internalData) { + for (auto item : internalData) { item->deleteByList = false; } } @@ -88,7 +88,7 @@ namespace app::alarmClock rRulePresenter->loadRecord(record); createData(); - for (auto &item : internalData) { + for (auto item : internalData) { if (item->onLoadCallback) { item->onLoadCallback(record); } @@ -106,7 +106,7 @@ namespace app::alarmClock void NewEditAlarmModel::saveData(std::shared_ptr alarm, AlarmAction action) { - for (auto &item : internalData) { + for (auto item : internalData) { if (item->onSaveCallback) { item->onSaveCallback(alarm); } diff --git a/module-apps/application-alarm-clock/models/NewEditAlarmModel.hpp b/module-apps/application-alarm-clock/models/NewEditAlarmModel.hpp index 704f9671155169444dbaf96f1030f3dc59d7d122..40fe6667196b43b25f6548fafbb2aaeaf110038e 100644 --- a/module-apps/application-alarm-clock/models/NewEditAlarmModel.hpp +++ b/module-apps/application-alarm-clock/models/NewEditAlarmModel.hpp @@ -1,4 +1,4 @@ -// Copyright (c) 2017-2021, Mudita Sp. z.o.o. All rights reserved. +// Copyright (c) 2017-2023, Mudita Sp. z.o.o. All rights reserved. // For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md #pragma once @@ -48,8 +48,8 @@ namespace app::alarmClock void clearData() override; void createData(); - [[nodiscard]] unsigned int getMinimalItemSpaceRequired() const override; - [[nodiscard]] unsigned int requestRecordsCount() override; + [[nodiscard]] unsigned getMinimalItemSpaceRequired() const override; + [[nodiscard]] unsigned requestRecordsCount() override; [[nodiscard]] gui::ListItem *getItem(gui::Order order) override; void requestRecords(uint32_t offset, uint32_t limit) override; }; diff --git a/module-apps/application-alarm-clock/presenter/AlarmClockEditWindowPresenter.cpp b/module-apps/application-alarm-clock/presenter/AlarmClockEditWindowPresenter.cpp index b7cfcabfa88f73b006239db2736f8889a3192179..a97ae36f45891683c31e0a2cebb2e247bfbbebf3 100644 --- a/module-apps/application-alarm-clock/presenter/AlarmClockEditWindowPresenter.cpp +++ b/module-apps/application-alarm-clock/presenter/AlarmClockEditWindowPresenter.cpp @@ -1,4 +1,4 @@ -// Copyright (c) 2017-2021, Mudita Sp. z.o.o. All rights reserved. +// Copyright (c) 2017-2023, Mudita Sp. z.o.o. All rights reserved. // For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md #include "AlarmClockEditWindowPresenter.hpp" @@ -34,5 +34,4 @@ namespace app::alarmClock { alarmFieldsProvider->clearData(); } - } // namespace app::alarmClock diff --git a/module-apps/application-alarm-clock/widgets/AlarmMusicOptionsItem.cpp b/module-apps/application-alarm-clock/widgets/AlarmMusicOptionsItem.cpp index a4931377c4064975015472beceb0d5aa7719c3e6..774d1a14f288b1e70de4689a0470c59cdc06c852 100644 --- a/module-apps/application-alarm-clock/widgets/AlarmMusicOptionsItem.cpp +++ b/module-apps/application-alarm-clock/widgets/AlarmMusicOptionsItem.cpp @@ -2,8 +2,6 @@ // For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md #include "AlarmMusicOptionsItem.hpp" - -#include #include namespace gui @@ -20,12 +18,13 @@ namespace gui alarmSoundList = getMusicFilesList(); std::vector printOptions; - for (const auto &musicFile : getMusicFilesList()) { + printOptions.reserve(alarmSoundList.size()); + for (const auto &musicFile : alarmSoundList) { printOptions.push_back(musicFile.title); } - optionSpinner->setData({printOptions}); + optionSpinner->setData(printOptions); - inputCallback = [=](gui::Item &item, const gui::InputEvent &event) { + inputCallback = [=]([[maybe_unused]] gui::Item &item, const gui::InputEvent &event) { if (event.isShortRelease(gui::KeyCode::KEY_LF)) { if (!player->previouslyPlayed(getFilePath(optionSpinner->getCurrentValue())) || player->isInState(SoundsPlayer::State::Stopped)) { @@ -43,11 +42,17 @@ namespace gui } } - // stop preview playback when we go back + /* Stop preview playback when going back */ if (player->isInState(SoundsPlayer::State::Playing) && event.isShortRelease(gui::KeyCode::KEY_RF)) { player->stop(); } + /* Stop preview playback when manually locking the phone */ + if (player->isInState(SoundsPlayer::State::Playing) && event.isLongRelease(KeyCode::KEY_PND)) { + player->stop(); + this->navBarTemporaryMode(utils::translate(style::strings::common::play)); + } + const auto actionHandled = optionSpinner->onInput(event); if (actionHandled && player->isInState(SoundsPlayer::State::Playing)) { player->play(getFilePath(optionSpinner->getCurrentValue()), @@ -56,7 +61,7 @@ namespace gui return actionHandled; }; - focusChangedCallback = [=](Item &item) { + focusChangedCallback = [=]([[maybe_unused]] Item &item) { setFocusItem(focus ? optionSpinner : nullptr); if (focus) { diff --git a/module-apps/application-alarm-clock/widgets/AlarmMusicOptionsItem.hpp b/module-apps/application-alarm-clock/widgets/AlarmMusicOptionsItem.hpp index 4b87c700572d6e5d9eccf0d243942081b173147a..86733ba8aa99874e84a63b1862c7aa955c6332c3 100644 --- a/module-apps/application-alarm-clock/widgets/AlarmMusicOptionsItem.hpp +++ b/module-apps/application-alarm-clock/widgets/AlarmMusicOptionsItem.hpp @@ -1,4 +1,4 @@ -// Copyright (c) 2017-2021, Mudita Sp. z.o.o. All rights reserved. +// Copyright (c) 2017-2023, Mudita Sp. z.o.o. All rights reserved. // For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md #pragma once @@ -24,11 +24,11 @@ namespace gui std::vector getMusicFilesList(); public: - explicit AlarmMusicOptionsItem(app::ApplicationCommon *app, - const std::string &description, - std::shared_ptr player, - std::function navBarTemporaryMode = nullptr, - std::function navBarRestoreFromTemporaryMode = nullptr); + AlarmMusicOptionsItem(app::ApplicationCommon *app, + const std::string &description, + std::shared_ptr player, + std::function navBarTemporaryMode = nullptr, + std::function navBarRestoreFromTemporaryMode = nullptr); private: [[nodiscard]] std::string getTitle(const std::string &filePath); diff --git a/module-apps/application-alarm-clock/widgets/AlarmRRuleOptionsItem.cpp b/module-apps/application-alarm-clock/widgets/AlarmRRuleOptionsItem.cpp index 959597a324607d0bd8cd794d5b12a67adff9f29b..0147d2b238b4c83e526d993f5792e1dcf97a4986 100644 --- a/module-apps/application-alarm-clock/widgets/AlarmRRuleOptionsItem.cpp +++ b/module-apps/application-alarm-clock/widgets/AlarmRRuleOptionsItem.cpp @@ -18,10 +18,10 @@ namespace gui { printOptions(); - inputCallback = [&](gui::Item &item, const gui::InputEvent &event) { - auto ret = optionSpinner->onInput(event); + inputCallback = [&]([[maybe_unused]] gui::Item &item, const gui::InputEvent &event) { + const auto ret = optionSpinner->onInput(event); - if (getRRuleOption(optionSpinner->getCurrentValue()) == RRule::Custom) { + if (isCurrentSpinnerOptionCustom()) { this->navBarTemporaryMode(utils::translate(style::strings::common::edit)); if (event.isShortRelease(gui::KeyCode::KEY_LF)) { this->app->switchWindow(style::alarmClock::window::name::customRepeat); @@ -34,10 +34,10 @@ namespace gui return ret; }; - focusChangedCallback = [&](Item &item) { + focusChangedCallback = [&]([[maybe_unused]] Item &item) { setFocusItem(focus ? optionSpinner : nullptr); - if (focus && (getRRuleOption(optionSpinner->getCurrentValue()) == RRule::Custom)) { + if (focus && isCurrentSpinnerOptionCustom()) { this->navBarTemporaryMode(utils::translate(style::strings::common::edit)); } else { @@ -48,7 +48,7 @@ namespace gui }; onSaveCallback = [&]([[maybe_unused]] std::shared_ptr alarm) { - if (getRRuleOption(optionSpinner->getCurrentValue()) != RRule::Custom) { + if (!isCurrentSpinnerOptionCustom()) { getPresenter()->setOption(getRRuleOption(optionSpinner->getCurrentValue())); } }; @@ -56,13 +56,15 @@ namespace gui onLoadCallback = [&]([[maybe_unused]] std::shared_ptr alarm) { checkCustomOption(getPresenter()->getDescription()); optionSpinner->setCurrentValue(getPresenter()->getDescription()); - if (optionSpinner->focus && getRRuleOption(optionSpinner->getCurrentValue()) == RRule::Custom) { - this->navBarTemporaryMode(utils::translate(style::strings::common::edit)); - } - else { - this->navBarRestoreFromTemporaryMode(); - } + if (optionSpinner->focus) { + if (isCurrentSpinnerOptionCustom()) { + this->navBarTemporaryMode(utils::translate(style::strings::common::edit)); + } + else { + this->navBarRestoreFromTemporaryMode(); + } + } }; } @@ -101,9 +103,15 @@ namespace gui void AlarmRRuleOptionsItem::printOptions() { std::vector printOptions; + printOptions.reserve(rRuleOptions.size()); for (auto const &option : rRuleOptions) { printOptions.push_back(option.second); } - optionSpinner->setData({printOptions}); + optionSpinner->setData(printOptions); + } + + bool AlarmRRuleOptionsItem::isCurrentSpinnerOptionCustom() + { + return (getRRuleOption(optionSpinner->getCurrentValue()) == RRule::Custom); } } /* namespace gui */ diff --git a/module-apps/application-alarm-clock/widgets/AlarmRRuleOptionsItem.hpp b/module-apps/application-alarm-clock/widgets/AlarmRRuleOptionsItem.hpp index f9b5fa0967798d3810f2d5b2c00bd685e839e238..f762431b5c9cbbc43d1ad81db22c46315b8ac1f4 100644 --- a/module-apps/application-alarm-clock/widgets/AlarmRRuleOptionsItem.hpp +++ b/module-apps/application-alarm-clock/widgets/AlarmRRuleOptionsItem.hpp @@ -1,4 +1,4 @@ -// Copyright (c) 2017-2022, Mudita Sp. z.o.o. All rights reserved. +// Copyright (c) 2017-2023, Mudita Sp. z.o.o. All rights reserved. // For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md #pragma once @@ -28,12 +28,13 @@ namespace gui [[nodiscard]] RRule getRRuleOption(const std::string &selectedOption); void checkCustomOption(const std::string &selectedOption); void printOptions(); + bool isCurrentSpinnerOptionCustom(); public: - explicit AlarmRRuleOptionsItem(app::ApplicationCommon *app, - const std::string &description, - std::shared_ptr presenter, - std::function navBarTemporaryMode = nullptr, - std::function navBarRestoreFromTemporaryMode = nullptr); + AlarmRRuleOptionsItem(app::ApplicationCommon *app, + const std::string &description, + std::shared_ptr presenter, + std::function navBarTemporaryMode = nullptr, + std::function navBarRestoreFromTemporaryMode = nullptr); }; } /* namespace gui */ diff --git a/module-apps/application-alarm-clock/windows/CustomRepeatWindow.cpp b/module-apps/application-alarm-clock/windows/CustomRepeatWindow.cpp index 13b783a83cbeeaf013ca3e4c731c5123d19d82f8..de493e6d85dfe172eaf041d437da6bcb1952fa4e 100644 --- a/module-apps/application-alarm-clock/windows/CustomRepeatWindow.cpp +++ b/module-apps/application-alarm-clock/windows/CustomRepeatWindow.cpp @@ -1,4 +1,4 @@ -// Copyright (c) 2017-2021, Mudita Sp. z.o.o. All rights reserved. +// Copyright (c) 2017-2023, Mudita Sp. z.o.o. All rights reserved. // For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md #include "CustomRepeatWindow.hpp" @@ -10,7 +10,6 @@ namespace app::alarmClock { - CustomRepeatWindow::CustomRepeatWindow(app::ApplicationCommon *app, std::unique_ptr &&windowPresenter) : AppWindow(app, style::alarmClock::window::name::customRepeat), presenter{std::move(windowPresenter)} @@ -36,19 +35,28 @@ namespace app::alarmClock style::alarmClock::window::listView_h, presenter->getItemProvider(), gui::listview::ScrollBarType::None); + list->setBoundaries(gui::Boundaries::Continuous); + setFocusItem(list); } void CustomRepeatWindow::onClose(gui::Window::CloseReason reason) { - if (reason != CloseReason::PhoneLock) { + switch (reason) { + case CloseReason::ApplicationClose: + case CloseReason::WindowSwitch: presenter->eraseProviderData(); + break; + default: + break; } } - void CustomRepeatWindow::onBeforeShow(gui::ShowMode mode, gui::SwitchData *data) + void CustomRepeatWindow::onBeforeShow(gui::ShowMode mode, [[maybe_unused]] gui::SwitchData *data) { - presenter->loadData(); + if (mode == gui::ShowMode::GUI_SHOW_INIT) { + presenter->loadData(); + } } bool CustomRepeatWindow::onInput(const gui::InputEvent &inputEvent) diff --git a/module-apps/application-alarm-clock/windows/CustomRepeatWindow.hpp b/module-apps/application-alarm-clock/windows/CustomRepeatWindow.hpp index 2d8ef821fa02aca139e944dce34ca2202630197b..fe840eb9094ebd158415672e90ea1b857032eb29 100644 --- a/module-apps/application-alarm-clock/windows/CustomRepeatWindow.hpp +++ b/module-apps/application-alarm-clock/windows/CustomRepeatWindow.hpp @@ -1,4 +1,4 @@ -// Copyright (c) 2017-2021, Mudita Sp. z.o.o. All rights reserved. +// Copyright (c) 2017-2023, Mudita Sp. z.o.o. All rights reserved. // For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md #pragma once @@ -25,5 +25,4 @@ namespace app::alarmClock bool onInput(const gui::InputEvent &inputEvent) override; void buildInterface() override; }; - } // namespace app::alarmClock diff --git a/module-apps/application-alarm-clock/windows/NewEditAlarmWindow.cpp b/module-apps/application-alarm-clock/windows/NewEditAlarmWindow.cpp index 0665959d4f5d1eae70beffe2bf83639233bcf77c..944f348d0903277c0df53865cdf4f17ec0499759 100644 --- a/module-apps/application-alarm-clock/windows/NewEditAlarmWindow.cpp +++ b/module-apps/application-alarm-clock/windows/NewEditAlarmWindow.cpp @@ -1,11 +1,10 @@ -// Copyright (c) 2017-2021, Mudita Sp. z.o.o. All rights reserved. +// Copyright (c) 2017-2023, Mudita Sp. z.o.o. All rights reserved. // For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md #include "NewEditAlarmWindow.hpp" namespace app::alarmClock { - NewEditAlarmWindow::NewEditAlarmWindow(app::ApplicationCommon *app, std::unique_ptr &&windowPresenter) : AppWindow(app, style::alarmClock::window::name::newEditAlarm), presenter{std::move(windowPresenter)} @@ -45,7 +44,7 @@ namespace app::alarmClock } if (mode == gui::ShowMode::GUI_SHOW_INIT) { - auto rec = dynamic_cast(data); + const auto rec = dynamic_cast(data); if (rec != nullptr) { alarmRecord = rec->getData(); } diff --git a/pure_changelog.md b/pure_changelog.md index 20e968d7bca00800818e5baa716470bcdcd71c48..56b5c52ea287eb4cf304cc716dbfd57f600d71f5 100644 --- a/pure_changelog.md +++ b/pure_changelog.md @@ -48,6 +48,8 @@ * Fixed invalid elapsed time in music player after playing and pausing track from songs list view * Fixed disappearing "Call" label in Phonebook app * Fixed phone number input style unification +* Fixed disappearing selections when setting custom alarm after popup is shown +* Fixed alarm preview playback behavior ## [1.7.2 2023-07-28]