#include #include "voicecallmanager.h" #include "voicecallmanager_interface.h" #include "profiled_interface.h" static ComNokiaProfiledInterface *profiled = NULL; static OrgNemomobileVoicecallVoiceCallManagerInterface *vcm = NULL; VoiceCallManager::VoiceCallManager(ToqManager *toq) : QObject(toq), _toq(toq) { if (!profiled) { qDBusRegisterMetaType(); qDBusRegisterMetaType< QList >(); profiled = new ComNokiaProfiledInterface("com.nokia.profiled", "/com/nokia/profiled", QDBusConnection::sessionBus()); } if (!vcm) { vcm = new OrgNemomobileVoicecallVoiceCallManagerInterface("org.nemomobile.voicecall", "/", QDBusConnection::sessionBus()); } connect(profiled, &ComNokiaProfiledInterface::profile_changed, this, &VoiceCallManager::handleProfileChanged); _toq->setEndpointListener(ToqConnection::VoiceCallEndpoint, this); } void VoiceCallManager::handleMessage(const ToqConnection::Message &msg) { Q_ASSERT(msg.destination == ToqConnection::VoiceCallEndpoint); switch (msg.type) { case 15: handleGetPhoneStatusMessage(msg); break; default: qWarning() << "Unknown message" << msg.type; break; } } void VoiceCallManager::setSilentMode(bool silent) { setProfile(silent ? "silent" : "ambience"); } void VoiceCallManager::handleGetPhoneStatusMessage(const ToqConnection::Message &msg) { _toq->sendReply(msg, 0x400F, buildPhoneStatus()); } QString VoiceCallManager::getCurrentProfile() { QDBusReply resp = profiled->get_profile(); if (resp.isValid()) { return resp.value(); } else { qWarning() << resp.error().message(); return QString(); } } void VoiceCallManager::setProfile(const QString &name) { QDBusReply resp = profiled->set_profile(name); if (!resp.isValid()) { qWarning() << resp.error().message(); } } void VoiceCallManager::sendPhoneStatusMessage() { _toq->sendMessage(ToqConnection::VoiceCallEndpoint, ToqConnection::VoiceCallEndpoint + 1, 0x8000, buildPhoneStatus()); } QJsonObject VoiceCallManager::buildPhoneStatus() { QJsonObject obj; obj.insert("service", int(1)); obj.insert("call_status", int(0)); obj.insert("call_setup_status", int(0)); obj.insert("silence_mode", getCurrentProfile() == "silent" ? 1 : 0); return obj; } void VoiceCallManager::handleProfileChanged(bool changed, bool active, const QString &profile) { Q_UNUSED(changed); Q_UNUSED(active); qDebug() << "Profile changed to" << profile; sendPhoneStatusMessage(); } QDBusArgument &operator<<(QDBusArgument &argument, const ProfileValue &value) { argument.beginStructure(); argument << value.key << value.val << value.type; argument.endStructure(); return argument; } const QDBusArgument &operator>>(const QDBusArgument &argument, ProfileValue &value) { argument.beginStructure(); argument >> value.key >> value.val >> value.type; argument.endStructure(); return argument; }