Skip to content

Commit

Permalink
Merge branch 'jb38667_call_state' into 'master'
Browse files Browse the repository at this point in the history
Add support for call state and charger type tracking

See merge request mer-core/libmce-qt!5
  • Loading branch information
spiiroin committed Aug 28, 2019
2 parents b36b0b1 + 9e8fb61 commit f061194
Show file tree
Hide file tree
Showing 9 changed files with 526 additions and 2 deletions.
3 changes: 3 additions & 0 deletions lib/dbus/com.nokia.mce.request.xml
Expand Up @@ -134,6 +134,9 @@
<method name="get_charger_state">
<arg direction="out" name="charger_state" type="s"/>
</method>
<method name="get_charger_type">
<arg direction="out" name="charger_type" type="s"/>
</method>
<method name="get_usb_cable_state">
<arg direction="out" name="usb_cable_state" type="s"/>
</method>
Expand Down
3 changes: 3 additions & 0 deletions lib/dbus/com.nokia.mce.signal.xml
Expand Up @@ -57,6 +57,9 @@
<signal name="charger_state_ind">
<arg name="charger_state" type="s"/>
</signal>
<signal name="charger_type_ind">
<arg name="charger_type" type="s"/>
</signal>
<signal name="usb_cable_state_ind">
<arg name="usb_cable_state" type="s"/>
</signal>
Expand Down
67 changes: 67 additions & 0 deletions lib/include/qmcecallstate.h
@@ -0,0 +1,67 @@
/*
* Copyright (C) 2019 Jolla Ltd.
* Copyright (c) 2019 Open Mobile Platform LLC.
* Contact: Slava Monich <slava.monich@jolla.com>
*
* You may use this file under the terms of BSD license as follows:
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. Neither the name of Jolla Ltd nor the names of its contributors may
* be used to endorse or promote products derived from this software
* without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS
* BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
* THE POSSIBILITY OF SUCH DAMAGE.
*
* The views and conclusions contained in the software and documentation
* are those of the authors and should not be interpreted as representing
* any official policies, either expressed or implied.
*/

#ifndef QMCE_CALLSTATE_H_
#define QMCE_CALLSTATE_H_

#include "qmcetypes.h"

class QMCE_EXPORT QMceCallState : public QObject
{
Q_OBJECT
Q_PROPERTY(bool valid READ valid NOTIFY validChanged)
Q_PROPERTY(State state READ state NOTIFY stateChanged)
Q_PROPERTY(Type type READ type NOTIFY typeChanged)
Q_ENUMS(State)
Q_ENUMS(Type)
public:
enum State { None, Ringing, Active, Service, };
enum Type { Normal, Emergency, };
QMceCallState(QObject* aParent = NULL);
bool valid() const;
State state() const;
Type type() const;
Q_SIGNALS:
void validChanged();
void stateChanged();
void typeChanged();
private:
class Private;
Private* iPrivate;
};

#endif // QMCE_CALLSTATE_H_
62 changes: 62 additions & 0 deletions lib/include/qmcechargertype.h
@@ -0,0 +1,62 @@
/*
* Copyright (C) 2019 Jolla Ltd.
* Copyright (c) 2019 Open Mobile Platform LLC.
* Contact: Slava Monich <slava.monich@jolla.com>
*
* You may use this file under the terms of BSD license as follows:
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. Neither the name of Jolla Ltd nor the names of its contributors may
* be used to endorse or promote products derived from this software
* without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS
* BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
* THE POSSIBILITY OF SUCH DAMAGE.
*
* The views and conclusions contained in the software and documentation
* are those of the authors and should not be interpreted as representing
* any official policies, either expressed or implied.
*/

#ifndef QMCE_CHARGERTYPE_H_
#define QMCE_CHARGERTYPE_H_

#include "qmcetypes.h"

class QMCE_EXPORT QMceChargerType : public QObject
{
Q_OBJECT
Q_PROPERTY(bool valid READ valid NOTIFY validChanged)
Q_PROPERTY(Type type READ type NOTIFY typeChanged)
Q_ENUMS(Type)
public:
enum Type { None, USB, DCP, HVDCP, CDP, Wireless, Other, };
QMceChargerType(QObject* aParent = NULL);
bool valid() const;
Type type() const;
Q_SIGNALS:
void validChanged();
void typeChanged();
private:
class Private;
Private* iPrivate;
};

#endif // QMCE_CHARGERTYPE_H_
4 changes: 4 additions & 0 deletions lib/lib.pro
Expand Up @@ -26,6 +26,8 @@ SOURCES += \
src/qmcebatterylevel.cpp \
src/qmcebatterystatus.cpp \
src/qmcecablestate.cpp \
src/qmcecallstate.cpp \
src/qmcechargertype.cpp \
src/qmcechargerstate.cpp \
src/qmcedisplay.cpp \
src/qmcepowersavemode.cpp \
Expand All @@ -36,6 +38,8 @@ PUBLIC_HEADERS += \
include/qmcebatterylevel.h \
include/qmcebatterystatus.h \
include/qmcecablestate.h \
include/qmcecallstate.h \
include/qmcechargertype.h \
include/qmcechargerstate.h \
include/qmcedisplay.h \
include/qmcepowersavemode.h \
Expand Down
199 changes: 199 additions & 0 deletions lib/src/qmcecallstate.cpp
@@ -0,0 +1,199 @@
/*
* Copyright (C) 2019 Jolla Ltd.
* Copyright (c) 2019 Open Mobile Platform LLC.
* Contact: Slava Monich <slava.monich@jolla.com>
*
* You may use this file under the terms of BSD license as follows:
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. Neither the name of Jolla Ltd nor the names of its contributors may
* be used to endorse or promote products derived from this software
* without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS
* BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
* THE POSSIBILITY OF SUCH DAMAGE.
*
* The views and conclusions contained in the software and documentation
* are those of the authors and should not be interpreted as representing
* any official policies, either expressed or implied.
*/

#include "qmcecallstate.h"
#include "qmceproxy.h"

#include <mce/mode-names.h>

// ==========================================================================
// QMceCallState::Private
// ==========================================================================

class QMceCallState::Private : public QObject {
Q_OBJECT
public:
Private(QMceCallState* aParent);
bool valid() const;
QMceCallState::State value() const;
QMceCallState::Type type() const;
private:
void queryValue();
void setValid(bool valid);
private Q_SLOTS:
void onProxyValidChanged();
void onQueryFinished(QDBusPendingCallWatcher* aWatcher);
void updateValue(QString state, QString type);
private:
QMceCallState* iParent;
QSharedPointer<QMceProxy> iProxy;
bool iValid;
QMceCallState::State iValue;
QMceCallState::Type iType;
};

QMceCallState::Private::Private(QMceCallState* aParent) :
QObject(aParent),
iParent(aParent),
iProxy(QMceProxy::instance()),
iValid(false),
iValue(None),
iType(Normal)
{
connect(iProxy->signalProxy(),
SIGNAL(sig_call_state_ind(QString, QString)),
SLOT(updateValue(QString, QString)));
connect(iProxy.data(),
SIGNAL(validChanged()),
SLOT(onProxyValidChanged()));
if (iProxy->valid()) {
queryValue();
}
}

bool QMceCallState::Private::valid() const
{
return iValid;
}

void QMceCallState::Private::setValid(bool valid)
{
if (iValid != valid) {
iValid = valid;
Q_EMIT iParent->validChanged();
}
}

QMceCallState::State QMceCallState::Private::value() const
{
return iValue;
}

QMceCallState::Type QMceCallState::Private::type() const
{
return iType;
}

void QMceCallState::Private::updateValue(QString stateName, QString typeName)
{
bool valid = true;
QMceCallState::State state = None;
QMceCallState::Type type = Normal;

if (stateName == QStringLiteral(MCE_CALL_STATE_NONE))
state = None;
else if (stateName == QStringLiteral(MCE_CALL_STATE_RINGING))
state = Ringing;
else if (stateName == QStringLiteral(MCE_CALL_STATE_ACTIVE))
state = Active;
else if (stateName == QStringLiteral(MCE_CALL_STATE_SERVICE))
state = Service;
else
valid = false;

if (typeName == QStringLiteral(MCE_NORMAL_CALL))
type = Normal;
else if (typeName == QStringLiteral(MCE_EMERGENCY_CALL))
type = Emergency;
else
valid = false;

if (valid) {
if (iValue != state) {
iValue = state;
Q_EMIT iParent->stateChanged();
}
if (iType != type) {
iType = type;
Q_EMIT iParent->typeChanged();
}
}
setValid(valid);
}

void QMceCallState::Private::queryValue()
{
connect(new QDBusPendingCallWatcher(
iProxy->requestProxy()->get_call_state(), this),
SIGNAL(finished(QDBusPendingCallWatcher*)),
SLOT(onQueryFinished(QDBusPendingCallWatcher*)));
}

void QMceCallState::Private::onQueryFinished(QDBusPendingCallWatcher* aWatcher)
{
QDBusPendingReply<QString, QString> reply(*aWatcher);
if (!reply.isError()) {
updateValue(reply.argumentAt<0>(), reply.argumentAt<1>());
}
aWatcher->deleteLater();
}

void QMceCallState::Private::onProxyValidChanged()
{
if (iProxy->valid()) {
queryValue();
} else {
setValid(false);
}
}

// ==========================================================================
// QMceCallState
// ==========================================================================

QMceCallState::QMceCallState(QObject* aParent) :
QObject(aParent),
iPrivate(new Private(this))
{
}

bool QMceCallState::valid() const
{
return iPrivate->valid();
}

QMceCallState::State QMceCallState::state() const
{
return iPrivate->value();
}

QMceCallState::Type QMceCallState::type() const
{
return iPrivate->type();
}

#include "qmcecallstate.moc"

0 comments on commit f061194

Please sign in to comment.