~aleteoryx/muditaos

52ad797f25184b70d3260ae600fb7ad668e0fb35 — pawpMudita 5 years ago 0c3cc54
[EGD-4737] Add VoLTE ON/OFF switch in Settings Network window

Add VoLTE ON/OFF switch in Settings Network window
M changelog.md => changelog.md +1 -0
@@ 4,6 4,7 @@
### Added

* Battery Brownout detection
* VoLTE ON/OFF switch in Settings Network window

### Changed


M image/assets/lang/English.json => image/assets/lang/English.json +1 -0
@@ 346,6 346,7 @@
  "app_settings_network_sim1": "Sim1",
  "app_settings_network_sim2": "Sim2",
  "app_settings_network_sim_none": "No Sim",
  "app_settings_network_voice_over_lte" :"VoLTE (experimental)",
  "app_settings_toggle_on": "ON",
  "app_settings_toggle_off": "OFF",
  "app_settings_security_lock_screen_passcode": "Lock screen passcode",

M module-apps/application-settings-new/ApplicationSettings.cpp => module-apps/application-settings-new/ApplicationSettings.cpp +24 -0
@@ 32,6 32,7 @@
#include <service-cellular/CellularServiceAPI.hpp>
#include <service-db/Settings.hpp>
#include <module-services/service-bluetooth/service-bluetooth/messages/Status.hpp>
#include <service-db/agents/settings/SystemSettings.hpp>

namespace app
{


@@ 51,11 52,15 @@ namespace app
        }
        settings->registerValueChange(settings::operators_on,
                                      [this](const std::string &value) { operatorOnChanged(value); });

        settings->registerValueChange(::settings::Cellular::volte_on,
                                      [this](const std::string &value) { volteChanged(value); });
    }

    ApplicationSettingsNew::~ApplicationSettingsNew()
    {
        settings->unregisterValueChange(settings::operators_on);
        settings->unregisterValueChange(::settings::Cellular::volte_on);
    }

    // Invoked upon receiving data message


@@ 224,4 229,23 @@ namespace app
        operatorsOn = value;
        settings->setValue(settings::operators_on, std::to_string(value));
    }

    void ApplicationSettingsNew::setVoLTEOn(bool value)
    {
        voLteStateOn = value;
        CellularServiceAPI::SetVoLTE(this, voLteStateOn);
    };

    bool ApplicationSettingsNew::getVoLTEOn() const noexcept
    {
        return voLteStateOn;
    }

    void ApplicationSettingsNew::volteChanged(const std::string &value)
    {
        if (!value.empty()) {
            voLteStateOn = utils::getNumericValue<bool>(value);
        }
    }

} /* namespace app */

M module-apps/application-settings-new/ApplicationSettings.hpp => module-apps/application-settings-new/ApplicationSettings.hpp +6 -0
@@ 64,6 64,8 @@ namespace app
            virtual ~OperatorsSettings()                               = default;
            virtual void setOperatorsOn(bool value)                    = 0;
            [[nodiscard]] virtual bool getOperatorsOn() const noexcept = 0;
            virtual void setVoLTEOn(bool value)                        = 0;
            [[nodiscard]] virtual bool getVoLTEOn() const noexcept     = 0;
        };
    }; // namespace settingsInterface



@@ 93,12 95,16 @@ namespace app
        void operatorOnChanged(const std::string &value);
        void setOperatorsOn(bool value) override;
        bool getOperatorsOn() const noexcept override;
        void setVoLTEOn(bool value) override;
        bool getVoLTEOn() const noexcept override;
        void volteChanged(const std::string &value);

      private:
        Store::GSM::SIM selectedSim   = Store::GSM::get()->selected;
        std::string selectedSimNumber = {};
        bsp::Board board              = bsp::Board::none;
        bool operatorsOn              = false;
        bool voLteStateOn             = false;
    };

    template <> struct ManifestTraits<ApplicationSettingsNew>

M module-apps/application-settings-new/windows/NetworkWindow.cpp => module-apps/application-settings-new/windows/NetworkWindow.cpp +13 -0
@@ 41,6 41,8 @@ namespace gui
            break;
        }
        auto operatorsOn = operatorsSettings->getOperatorsOn();
        auto voLteOn     = operatorsSettings->getVoLTEOn();

        optList.emplace_back(std::make_unique<gui::OptionSettings>(
            utils::translateI18("app_settings_network_active_card") + ":" + simStr + " / " + phoneNumber,
            [=](gui::Item &item) {


@@ 97,6 99,17 @@ namespace gui
            nullptr,
            nullptr));

        optList.emplace_back(std::make_unique<gui::OptionSettings>(
            utils::translateI18("app_settings_network_voice_over_lte"),
            [=](gui::Item &item) {
                operatorsSettings->setVoLTEOn(!voLteOn);
                rebuild();
                return true;
            },
            nullptr,
            nullptr,
            voLteOn ? RightItem::On : RightItem::Off));

        bottomBar->setText(BottomBar::Side::CENTER, utils::localize.get(style::strings::common::select));

        topBar->setActive(TopBar::Elements::SIGNAL, false);

M module-apps/application-settings-new/windows/NetworkWindow.hpp => module-apps/application-settings-new/windows/NetworkWindow.hpp +1 -1
@@ 25,7 25,7 @@ namespace gui
      private:
        auto netOptList() -> std::list<gui::Option>;
        app::settingsInterface::SimParams *simParams;
        void rebuild();
        void rebuild() override;
        app::settingsInterface::OperatorsSettings *operatorsSettings;

      public:

M module-services/service-cellular/CellularServiceAPI.cpp => module-services/service-cellular/CellularServiceAPI.cpp +6 -0
@@ 341,3 341,9 @@ bool CellularServiceAPI::GetDataTransfer(sys::Service *serv)
    return sys::Bus::SendUnicast(
        std::make_shared<CellularGetDataTransferMessage>(), ServiceCellular::serviceName, serv);
}

bool CellularServiceAPI::SetVoLTE(sys::Service *serv, bool voLTE)
{
    return sys::Bus::SendUnicast(
        std::make_shared<CellularChangeVoLTEDataMessage>(voLTE), ServiceCellular::serviceName, serv);
}

M module-services/service-cellular/ServiceCellular.cpp => module-services/service-cellular/ServiceCellular.cpp +21 -1
@@ 198,7 198,8 @@ ServiceCellular::ServiceCellular() : sys::Service(serviceName, "", cellularStack
        sys::Bus::SendMulticast(msg.value(), sys::BusChannels::ServiceCellularNotifications, this);
    };
    registerMessageHandlers();

    settings->registerValueChange(settings::Cellular::volte_on,
                                  [this](const std::string &value) { volteChanged(value); });
    packetData = std::make_unique<packet_data::PacketData>(*this);
    packetData->loadAPNSettings();
}


@@ 206,6 207,7 @@ ServiceCellular::ServiceCellular() : sys::Service(serviceName, "", cellularStack
ServiceCellular::~ServiceCellular()
{
    LOG_INFO("[ServiceCellular] Cleaning resources");
    settings->unregisterValueChange(settings::Cellular::volte_on);
}

// this static function will be replaced by Settings API


@@ 290,10 292,12 @@ void ServiceCellular::registerMessageHandlers()
        bsp::cellular::sim::hotswap_trigger();
        return std::make_shared<CellularResponseMessage>(true);
    });

    connect(typeid(CellularStartOperatorsScanMessage), [&](sys::Message *request) -> sys::MessagePointer {
        auto msg = static_cast<CellularStartOperatorsScanMessage *>(request);
        return handleCellularStartOperatorsScan(msg);
    });

    connect(typeid(CellularGetActiveContextsMessage), [&](sys::Message *request) -> sys::MessagePointer {
        auto msg = static_cast<CellularGetActiveContextsMessage *>(request);
        return handleCellularGetActiveContextsMessage(msg);


@@ 333,6 337,14 @@ void ServiceCellular::registerMessageHandlers()
        auto msg = static_cast<CellularGetActiveContextsMessage *>(request);
        return handleCellularGetActiveContextsMessage(msg);
    });

    connect(typeid(CellularChangeVoLTEDataMessage), [&](sys::Message *request) -> sys::MessagePointer {
        auto msg = static_cast<CellularChangeVoLTEDataMessage *>(request);
        volteOn  = msg->getVoLTEon();
        settings->setValue(settings::Cellular::volte_on, std::to_string(volteOn));
        return std::make_shared<CellularResponseMessage>(true);
    });

    handle_CellularGetChannelMessage();
}



@@ 2040,6 2052,7 @@ std::shared_ptr<cellular::RawCommandRespAsync> ServiceCellular::handleCellularSt
    sys::Bus::SendUnicast(ret, msg->sender, this);
    return ret;
}

bool ServiceCellular::handle_apn_conf_procedure()
{
    LOG_DEBUG("APN on modem configuration");


@@ 2131,3 2144,10 @@ std::shared_ptr<CellularSetOperatorResponse> ServiceCellular::handleCellularSetO
    return std::make_shared<CellularSetOperatorResponse>(
        networkSettings.setOperator(msg->getMode(), msg->getFormat(), msg->getName()));
}

void ServiceCellular::volteChanged(const std::string &value)
{
    if (!value.empty()) {
        volteOn = utils::getNumericValue<bool>(value);
    }
}

M module-services/service-cellular/service-cellular/CellularMessage.hpp => module-services/service-cellular/service-cellular/CellularMessage.hpp +20 -0
@@ 695,6 695,26 @@ class CellularSetOperatorResponse : public CellularResponseMessage
    {}
};

class CellularVoLTEDataMessage : public CellularMessage
{
    bool VoLTEon = false;

  public:
    explicit CellularVoLTEDataMessage(bool VoLTEon) : CellularMessage{MessageType::CellularSetVoLTE}, VoLTEon{VoLTEon}
    {}
    [[nodiscard]] bool getVoLTEon() const noexcept
    {
        return VoLTEon;
    }
};

class CellularChangeVoLTEDataMessage : public CellularVoLTEDataMessage
{
  public:
    explicit CellularChangeVoLTEDataMessage(bool VoLTEon) : CellularVoLTEDataMessage{VoLTEon}
    {}
};

namespace cellular
{


M module-services/service-cellular/service-cellular/CellularServiceAPI.hpp => module-services/service-cellular/service-cellular/CellularServiceAPI.hpp +2 -0
@@ 111,4 111,6 @@ namespace CellularServiceAPI
    bool SetAPN(sys::Service *serv, packet_data::APN::Config apnConfig);
    bool SetDataTransfer(sys::Service *serv, packet_data::DataTransfer dt);
    bool GetDataTransfer(sys::Service *serv);
    bool SetVoLTE(sys::Service *serv, bool value);

}; // namespace CellularServiceAPI

M module-services/service-cellular/service-cellular/ServiceCellular.hpp => module-services/service-cellular/service-cellular/ServiceCellular.hpp +3 -0
@@ 293,4 293,7 @@ class ServiceCellular : public sys::Service
    friend class NetworkSettings;
    friend class packet_data::PDPContext;
    friend class packet_data::PacketData;

    void volteChanged(const std::string &value);
    bool volteOn = false;
};

M module-services/service-db/agents/settings/SystemSettings.hpp => module-services/service-db/agents/settings/SystemSettings.hpp +5 -0
@@ 23,4 23,9 @@ namespace settings
        constexpr inline auto bondedDevices    = "bt_bonded_devices";
    } // namespace Bluetooth

    namespace Cellular
    {
        constexpr inline auto volte_on = "cl_volte_on";
    } // namespace Cellular

}; // namespace settings

M source/MessageType.hpp => source/MessageType.hpp +1 -0
@@ 79,6 79,7 @@ enum class MessageType
    CellularSimProcedure,        // Broadcast on sim state changed
    CellularSimResponse,         // Send to PIN window (show, error state, hide)
    CellularSimVerifyPinRequest, // Send from PIN window with PIN, PUK, ... number
    CellularSetVoLTE,

    CellularPacketData, ///< for all PacketData messages