Adding connmancontext API support to libofono-qt Signed-off-by: Arun Ravindran <ext...
authorArun Ravindran <ext-arun.1.ravindran@nokia.com>
Thu, 7 Apr 2011 14:30:45 +0000 (17:30 +0300)
committerAlexander Kanavin <alexander.kanavin@nokia.com>
Thu, 7 Apr 2011 14:49:32 +0000 (17:49 +0300)
lib/lib.pro
lib/ofonoconnmancontext.cpp [new file with mode: 0644]
lib/ofonoconnmancontext.h [new file with mode: 0644]
tests/test_ofonoconnmancontext.cpp [new file with mode: 0644]
tests/test_ofonoconnmancontext.pro [new file with mode: 0644]
tests/tests.pro

index 99d6d79..28a0190 100644 (file)
@@ -32,6 +32,7 @@ PUBLIC_HEADERS += ofonovoicecall.h
 PUBLIC_HEADERS += ofonocallvolume.h
 PUBLIC_HEADERS += ofonomessage.h
 PUBLIC_HEADERS += ofonoconnman.h
+PUBLIC_HEADERS += ofonoconnmancontext.h
 
 HEADERS += $$PUBLIC_HEADERS
 HEADERS += ofonointerface.h
@@ -57,6 +58,7 @@ SOURCES += ofonovoicecall.cpp
 SOURCES += ofonocallvolume.cpp
 SOURCES += ofonomessage.cpp
 SOURCES += ofonoconnman.cpp
+SOURCES += ofonoconnmancontext.cpp
 
 target.path = $$[QT_INSTALL_PREFIX]/lib
 headers.files = $$PUBLIC_HEADERS
diff --git a/lib/ofonoconnmancontext.cpp b/lib/ofonoconnmancontext.cpp
new file mode 100644 (file)
index 0000000..5a4b648
--- /dev/null
@@ -0,0 +1,225 @@
+/*
+ * This file is part of ofono-qt
+ *
+ * Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).
+ *
+ * Contact: Alexander Kanavin <alexander.kanavin@nokia.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public License
+ * version 2.1 as published by the Free Software Foundation.
+ *
+ * This library is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA
+ *
+ */
+
+#include <QtDBus/QtDBus>
+#include <QtCore/QObject>
+#include <QDBusArgument>
+
+#include "ofonointerface.h"
+#include "ofonoconnman.h"
+#include "ofonoconnmancontext.h"
+
+
+OfonoConnmanContext::OfonoConnmanContext(const QString& contextId, QObject *parent)
+    : QObject(parent)
+{
+    m_if = new OfonoInterface(contextId, "org.ofono.ConnectionContext", OfonoGetAllOnStartup, this);
+
+    connect(m_if, SIGNAL(propertyChanged(const QString&, const QVariant&)),
+            this, SLOT(propertyChanged(const QString&, const QVariant&)));
+
+}
+
+OfonoConnmanContext::OfonoConnmanContext(const OfonoConnmanContext& context)
+    : QObject(context.parent())
+{
+    m_if = new OfonoInterface(context.path(), "org.ofono.ConnectionContext", OfonoGetAllOnStartup, this);
+
+    connect(m_if, SIGNAL(propertyChanged(const QString&, const QVariant&)),
+            this, SLOT(propertyChanged(const QString&, const QVariant&)));
+
+}
+
+bool OfonoConnmanContext::operator==(const OfonoConnmanContext &context)
+{
+    return path() == context.path();
+}
+
+OfonoConnmanContext::~OfonoConnmanContext()
+{
+}
+
+bool OfonoConnmanContext::active() const
+{
+    return m_if->properties()["Active"].value<bool>();
+}
+
+QString OfonoConnmanContext::accessPointName() const
+{
+    return m_if->properties()["AccessPointName"].value<QString>();
+}
+
+QString OfonoConnmanContext::name() const
+{
+    return m_if->properties()["Name"].value<QString>();
+}
+
+QString OfonoConnmanContext::type() const
+{
+    return m_if->properties()["Type"].value<QString>();
+}
+
+QString OfonoConnmanContext::username() const
+{
+    return m_if->properties()["Username"].value<QString>();
+}
+
+QString OfonoConnmanContext::password() const
+{
+    return m_if->properties()["Password"].value<QString>();
+}
+
+QString OfonoConnmanContext::protocol() const
+{
+    return m_if->properties()["Protocol"].value<QString>();
+}
+
+QString OfonoConnmanContext::messageProxy() const
+{
+    return m_if->properties()["MessageProxy"].value<QString>();
+}
+
+QString OfonoConnmanContext::messageCenter() const
+{
+    return m_if->properties()["MessageCenter"].value<QString>();
+}
+
+void OfonoConnmanContext::propertyChanged(const QString &property, const QVariant &value)
+{
+    if (property == "Active") {
+        emit activeChanged(value.value<bool>());
+    } else if (property == "Name") {
+        emit nameChanged(value.value<QString>());
+    } else if (property == "AccessPointName") {
+        emit accessPointNameChanged(value.value<QString>());
+    } else if (property == "Type") {
+        emit typeChanged(value.value<QString>());
+    } else if (property == "Username") {
+        emit userNameChanged(value.value<QString>());
+    } else if (property == "Password") {
+        emit passwordChanged(value.value<QString>());
+    } else if (property == "Protocol") {
+        emit protocolChanged(value.value<QString>());
+    } else if (property == "MessageProxy") {
+        emit messageProxyChanged(value.value<QString>());
+    } else if (property == "MessageCenter") {
+            emit messageCenterChanged(value.value<QString>());
+
+    } else if (property == "Settings") {
+
+        QVariantMap map;
+        value.value<QDBusArgument>()>>map;
+        emit settingsChanged(map);
+    }
+}
+
+QVariantMap OfonoConnmanContext::settings() const
+{
+    QVariantMap map;
+    m_if->properties()["Settings"].value<QDBusArgument>()>>map;
+    return map;
+}
+
+QString OfonoConnmanContext::path() const
+{
+    return m_if->path();
+}
+
+QString OfonoConnmanContext::errorName() const
+{
+    return m_if->errorName();
+}
+
+QString OfonoConnmanContext::errorMessage() const
+{
+    return m_if->errorMessage();
+}
+
+/* Set Property*/
+void OfonoConnmanContext::setActive(const bool value)
+{
+    m_if->setProperty("Active",QVariant(value));
+}
+
+void OfonoConnmanContext::setAccessPointName(const QString& value)
+{
+    m_if->setProperty("AccessPointName",QVariant(value));
+}
+
+void OfonoConnmanContext::setType(const QString& value)
+{
+    m_if->setProperty("Type",QVariant(value));
+}
+
+void OfonoConnmanContext::setUsername(const QString& value)
+{
+    m_if->setProperty("Username",QVariant(value));
+}
+
+void OfonoConnmanContext::setPassword(const QString& value)
+{
+    m_if->setProperty("Password",QVariant(value));
+}
+
+void OfonoConnmanContext::setProtocol(const QString& value)
+{
+    m_if->setProperty("Protocol",QVariant(value));
+}
+
+void OfonoConnmanContext::setName(const QString& value)
+{
+    m_if->setProperty("Name",QVariant(value));
+}
+
+void OfonoConnmanContext::setMessageProxy(const QString& value)
+{
+    m_if->setProperty("MessageProxy",QVariant(value));
+}
+
+void OfonoConnmanContext::setMessageCenter(const QString& value)
+{
+    m_if->setProperty("MessageCenter",QVariant(value));
+}
+
+void OfonoConnmanContext::setPropertyFailed(const QString &property)
+{
+    if (property == "Active") {
+        emit setActiveFailed();
+    } else if (property == "AccessPointName") {
+        emit setAccessPointNameFailed();
+    } else if (property == "Type") {
+        emit setTypeFailed();
+    } else if (property == "Username") {
+        emit setUsernameFailed();
+    } else if (property == "Password") {
+        emit setPasswordFailed();
+    } else if (property == "Protocol") {
+        emit setProtocolFailed();
+    } else if (property == "Name") {
+        emit setNameFailed();
+    } else if (property == "MessageProxy") {
+        emit setMessageProxyFailed();
+    } else if (property == "MessageCenter") {
+        emit setMessageCenterFailed();
+    }
+}
diff --git a/lib/ofonoconnmancontext.h b/lib/ofonoconnmancontext.h
new file mode 100644 (file)
index 0000000..1925a84
--- /dev/null
@@ -0,0 +1,123 @@
+/*
+ * This file is part of ofono-qt
+ *
+ * Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).
+ *
+ * Contact: Alexander Kanavin <alexander.kanavin@nokia.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public License
+ * version 2.1 as published by the Free Software Foundation.
+ *
+ * This library is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA
+ *
+ */
+#ifndef OFONOCONNMANCONTEXT_H
+#define OFONOCONNMANCONTEXT_H
+
+#include <QtCore/QObject>
+#include <QVariant>
+#include <QStringList>
+#include <QDBusError>
+
+#include "libofono-qt_global.h"
+
+class OfonoInterface;
+
+//! This class is used to access oFono connman context API
+/*!
+ * The API is documented in
+ * http://git.kernel.org/?p=network/ofono/ofono.git;a=blob;f=doc/connman-api.txt
+ */
+class OFONO_QT_EXPORT OfonoConnmanContext : public QObject
+{
+    Q_OBJECT
+public:
+    OfonoConnmanContext(const QString &contextPath, QObject *parent=0);
+    OfonoConnmanContext(const OfonoConnmanContext &op);
+    ~OfonoConnmanContext();
+
+    OfonoConnmanContext operator=(const OfonoConnmanContext &op);
+    bool operator==(const OfonoConnmanContext &op);
+
+    //! Returns the D-Bus object path of the voice call object
+    QString path() const;
+
+    //! Get the D-Bus error name of the last operation.
+    /*!
+     * Returns the D-Bus error name of the last operation (setting a property
+     * or calling a method) if it has failed
+     */
+    QString errorName() const;
+
+    //! Get the D-Bus error message of the last operation.
+    /*!
+     * Returns the D-Bus error message of the last operation (setting a property
+     * or calling a method) if it has failed
+     */
+    QString errorMessage() const;
+    /* Properties for context*/
+
+    bool active() const;
+    QString accessPointName() const;
+    QString type() const;
+    QString username() const;
+    QString password() const;
+    QString protocol() const;
+    QString name() const;
+    QString messageProxy() const;
+    QString messageCenter() const;
+    QVariantMap settings() const;
+
+    void setActive(const bool);
+    void setAccessPointName(const QString&);
+    void setType(const QString&);
+    void setUsername(const QString&);
+    void setPassword(const QString&);
+    void setProtocol(const QString&);
+    void setName(const QString&);
+    void setMessageProxy(const QString&);
+    void setMessageCenter(const QString&);
+
+signals:
+    void activeChanged(const bool);
+    void accessPointNameChanged(const QString &apn);
+    void nameChanged(const QString &name);
+    void typeChanged(const QString &type);
+    void userNameChanged(const QString &uname);
+    void passwordChanged(const QString &pw);
+    void protocolChanged(const QString &proto);
+    void messageProxyChanged(const QString &proxy);
+    void messageCenterChanged(const QString &msc);
+
+    void setActiveFailed();
+    void setAccessPointNameFailed();
+    void setTypeFailed();
+    void setUsernameFailed();
+    void setPasswordFailed();
+    void setProtocolFailed();
+    void setNameFailed();
+    void setMessageProxyFailed();
+    void setMessageCenterFailed();
+
+    /* Settings change notification*/
+    void settingsChanged(const QVariantMap&);
+
+private slots:
+    void propertyChanged(const QString &property, const QVariant &value);
+    void setPropertyFailed(const QString& property);
+
+private:
+    OfonoInterface *m_if;
+
+};
+
+#endif //OFONOCONNMANCONTEXT_H
diff --git a/tests/test_ofonoconnmancontext.cpp b/tests/test_ofonoconnmancontext.cpp
new file mode 100644 (file)
index 0000000..edb9f60
--- /dev/null
@@ -0,0 +1,132 @@
+/*
+ * This file is part of ofono-qt
+ *
+ * Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).
+ *
+ * Contact: Alexander Kanavin <alexander.kanavin@nokia.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public License
+ * version 2.1 as published by the Free Software Foundation.
+ *
+ * This library is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA
+ *
+ */
+
+#include <QtTest/QtTest>
+#include <QtCore/QObject>
+
+#include <ofonoconnman.h>
+#include <ofonoconnmancontext.h>
+#include <QtDebug>
+
+
+class TestOfonoConnmanContext : public QObject
+{
+    Q_OBJECT
+
+private slots:
+    void initTestCase()
+    {
+        m = new OfonoConnMan(OfonoModem::ManualSelect, "/phonesim", this);
+        QCOMPARE(m->modem()->isValid(), true);
+        if (!m->modem()->powered()) {
+            m->modem()->setPowered(true);
+            QTest::qWait(5000);
+        }
+        if (!m->modem()->online()) {
+            m->modem()->setOnline(true);
+            QTest::qWait(5000);
+        }
+        QCOMPARE(m->isValid(), true);
+    }
+
+    void testOfonoConnmanContext ()
+    {
+        QSignalSpy addcon(m,SIGNAL(addContextComplete(bool)));
+        QSignalSpy conadd(m, SIGNAL(contextAdded(const QString&)));
+        QSignalSpy conrem(m, SIGNAL(contextRemoved(const QString&)));
+
+        m->addContext("internet");
+        QTest::qWait(1000);
+
+        QCOMPARE(addcon.count(), 1);
+        QCOMPARE(addcon.takeFirst().at(0).toBool(),true);
+        QCOMPARE(conadd.count(), 1);
+        QString contextid = conadd.takeFirst().at(0).toString();
+
+        OfonoConnmanContext* context = new OfonoConnmanContext(contextid);
+
+        QSignalSpy active(context, SIGNAL(activeChanged(const bool)));
+        QSignalSpy apn(context,SIGNAL(accessPointNameChanged(const QString&)));
+        QSignalSpy name(context, SIGNAL(nameChanged(const QString&)));
+        QSignalSpy type (context, SIGNAL(typeChanged(const QString&)));
+        QSignalSpy uname (context, SIGNAL(userNameChanged(const QString&)));
+        QSignalSpy pw (context, SIGNAL(passwordChanged(const QString&)));
+        QSignalSpy proto (context, SIGNAL(protocolChanged(const QString&)));
+        QSignalSpy sett (context, SIGNAL(settingsChanged(const QVariantMap&)));
+
+        context->setAccessPointName("hyva");
+        QTest::qWait(5000);
+        context->setUsername("huomenta");
+        QTest::qWait(5000);
+        context->setPassword("HYVA");
+        QTest::qWait(5000);
+        context->setName("yota");
+        QTest::qWait(5000);
+        context->setType("mms");
+        QTest::qWait(5000);
+        context->setProtocol("ipv6");
+        QTest::qWait(5000);
+
+        context->setActive(true);
+        QTest::qWait(10000);
+
+        QCOMPARE(apn.count(),1);
+        QCOMPARE(apn.takeFirst().at(0).toString(),QString("hyva"));
+        QCOMPARE(uname.count(),1);
+        QCOMPARE(uname.takeFirst().at(0).toString(),QString("huomenta"));
+        QCOMPARE(pw.count(),1);
+        QCOMPARE(pw.takeFirst().at(0).toString(),QString("HYVA"));
+        QCOMPARE(name.count(),1);
+        QCOMPARE(name.takeFirst().at(0).toString(),QString("yota"));
+        QCOMPARE(type.count(),1);
+        QCOMPARE(type.takeFirst().at(0).toString(),QString("mms"));
+        QCOMPARE(sett.count(),1);
+        QVariantMap settings = context->settings();
+        QCOMPARE(settings["Interface"].value<QString>(),QString("dummy0"));
+        QCOMPARE(proto.count(),1);
+        QCOMPARE(proto.takeFirst().at(0).toString(),QString("ipv6"));
+        QCOMPARE(active.count(),1);
+        QCOMPARE(context->active(),true);
+        context->setActive(false);
+        QTest::qWait(5000);
+        delete context;
+        QTest::qWait(5000);
+        m->removeContext(contextid);
+        QTest::qWait(5000);
+        QCOMPARE(active.count(),2);
+        QCOMPARE(sett.count(),2);
+        QCOMPARE(conrem.count(), 1);
+
+    }
+
+    void cleanupTestCase()
+    {
+
+    }
+
+private:
+    OfonoConnMan *m;
+};
+
+QTEST_MAIN(TestOfonoConnmanContext)
+#include "test_ofonoconnmancontext.moc"
diff --git a/tests/test_ofonoconnmancontext.pro b/tests/test_ofonoconnmancontext.pro
new file mode 100644 (file)
index 0000000..4f88db1
--- /dev/null
@@ -0,0 +1,2 @@
+include(testcase.pri)
+SOURCES += test_ofonoconnmancontext.cpp
index 2a054fd..06a6820 100644 (file)
@@ -18,4 +18,5 @@ SUBDIRS += test_ofonosupplementaryservices.pro
 SUBDIRS += test_ofonovoicecallmanager.pro
 SUBDIRS += test_ofonovoicecall.pro
 SUBDIRS += test_ofonocallvolume.pro
-SUBDIRS += test_ofonoconnman.pro
\ No newline at end of file
+SUBDIRS += test_ofonoconnman.pro
+SUBDIRS += test_ofonoconnmancontext.pro
\ No newline at end of file