// Copyright (c) 2017-2024, Mudita Sp. z.o.o. All rights reserved. // For licensing, see https://github.com/mudita/MuditaOS/blob/master/LICENSE.md #include #include #include namespace sys::phone_modes { void Observer::connect(Service *owner) { owner->connect(typeid(PhoneModeChanged), [this](sys::Message *request) -> sys::MessagePointer { return handlePhoneModeChange(static_cast(request)); }); owner->connect(typeid(TetheringChanged), [this](sys::Message *request) -> sys::MessagePointer { return handleTetheringChange(static_cast(request)); }); } void Observer::subscribe(OnPhoneModeChangedCallback &&onChange) noexcept { onPhoneModeChangedCallback = std::move(onChange); } void Observer::subscribe(OnTetheringChangedCallback &&onChange) noexcept { onTetheringChangedCallback = std::move(onChange); } bool Observer::isInMode(PhoneMode mode) const noexcept { return phoneMode == mode; } PhoneMode Observer::getCurrentPhoneMode() const noexcept { return phoneMode; } bool Observer::isTetheringOn() const noexcept { return tetheringMode == Tethering::On; } sys::MessagePointer Observer::handlePhoneModeChange(PhoneModeChanged *message) { phoneMode = message->getPhoneMode(); if (!onPhoneModeChangedCallback) { LOG_WARN("No subscriber on phone mode change."); return MessageNone{}; } try { onPhoneModeChangedCallback(phoneMode); } catch (const std::exception &) { return std::make_shared(); } return std::make_shared(); } sys::MessagePointer Observer::handleTetheringChange(TetheringChanged *message) { tetheringMode = message->getTetheringMode(); if (!onTetheringChangedCallback) { LOG_WARN("No subscriber on phone mode change."); return MessageNone{}; } try { onTetheringChangedCallback(tetheringMode); } catch (const std::exception &) { return std::make_shared(); } return std::make_shared(); } } // namespace sys::phone_modes