// Copyright (c) 2017-2021, Mudita Sp. z.o.o. All rights reserved. // For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md #pragma once #include "Common.hpp" namespace sys { class Service; // Forward declaration } // namespace sys namespace sys::phone_modes { class Subject { public: explicit Subject(Service *owner); /** * Sets phone and tethering modes * @param _phoneMode Phone mode * @param _tetheringMode Tethering mode * @return true if modes changed, false otherwise */ bool setMode(PhoneMode _phoneMode, Tethering _tetheringMode); /** * Sets the phone mode * @param mode Phone mode * @return true if phone mode changed, false otherwise */ bool setPhoneMode(PhoneMode mode); /** * Sets the tethering mode * @param mode Tethering mode * @return true if tethering mode changed, false otherwise */ bool setTetheringMode(Tethering mode); bool isTetheringEnabled() const noexcept; private: bool changePhoneMode(PhoneMode mode) noexcept; void notifyPhoneModeChange(); bool changeTetheringMode(Tethering mode) noexcept; void notifyTetheringChange(); Service *owner; PhoneMode phoneMode = PhoneMode::Connected; Tethering tetheringMode = Tethering::Off; }; } // namespace sys::phone_modes