src/hbcore/devicedialogbase/devicedialogserver/hbdevicedialogserverstatussym.cpp
changeset 0 16d8024aca5e
child 21 4633027730f5
child 34 ed14f46c0e55
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hbcore/devicedialogbase/devicedialogserver/hbdevicedialogserverstatussym.cpp	Mon Apr 19 14:02:13 2010 +0300
@@ -0,0 +1,185 @@
+/****************************************************************************
+**
+** Copyright (C) 2008-2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (developer.feedback@nokia.com)
+**
+** This file is part of the HbCore module of the UI Extensions for Mobile.
+**
+** GNU Lesser General Public License Usage
+** This file may be used under the terms of the GNU Lesser General Public
+** License version 2.1 as published by the Free Software Foundation and
+** appearing in the file LICENSE.LGPL included in the packaging of this file.
+** Please review the following information to ensure the GNU Lesser General
+** Public License version 2.1 requirements will be met:
+** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights.  These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at developer.feedback@nokia.com.
+**
+****************************************************************************/
+
+#include "hbdevicedialogserverstatus_p.h"
+
+#include <e32base.h>
+#include <e32std.h>
+#include <e32property.h>
+
+#include <QApplication>
+#include <QEvent>
+
+// There is only one fade control setter, all other applications are getters.
+// Device dialog is the setter.
+const TUid PropertyCategoryUid = {0x20022FC5};
+const TUint StatusKey = 'Stat';
+
+class HbDeviceDialogServerStatusPrivate  : public CActive
+{
+public:
+    HbDeviceDialogServerStatusPrivate(bool isServer, HbDeviceDialogServerStatus *parent);
+    ~HbDeviceDialogServerStatusPrivate();
+
+    HbDeviceDialogServerStatus::StatusFlags get();
+    void set(HbDeviceDialogServerStatus::StatusFlags status);
+
+    void start();
+
+public: // from CActive
+    void RunL();
+    void DoCancel();
+
+public:
+    HbDeviceDialogServerStatus *p;
+    RProperty mProperty;
+    bool mIsSetter;
+    bool mEnableMonitoring;
+    HbDeviceDialogServerStatus::StatusFlags mSetValue;
+};
+
+HbDeviceDialogServerStatusPrivate::HbDeviceDialogServerStatusPrivate(
+    bool isServer, HbDeviceDialogServerStatus *parent) :
+    CActive(EPriorityHigh), p(parent)
+{
+    RProcess process;
+    mIsSetter = isServer;
+    mSetValue = HbDeviceDialogServerStatus::NoFlags;
+    mEnableMonitoring = false;
+
+    // Device dialog server is a writer and creates the property.
+    if (mIsSetter) {
+        _LIT_SECURITY_POLICY_PASS(KRdPolicy); // all pass
+        _LIT_SECURITY_POLICY_S0(KWrPolicy, PropertyCategoryUid.iUid); // pass device dialog server
+        mProperty.Define(PropertyCategoryUid, StatusKey, RProperty::EInt, KRdPolicy, KWrPolicy);
+    }
+    mProperty.Attach(PropertyCategoryUid, StatusKey);
+    if (!mIsSetter) {
+        CActiveScheduler::Add(this);
+    }
+    else {
+        mProperty.Set(PropertyCategoryUid, StatusKey, mSetValue);
+    }
+}
+
+HbDeviceDialogServerStatusPrivate::~HbDeviceDialogServerStatusPrivate()
+{
+    Cancel();
+    mProperty.Close();
+}
+
+// Get status
+HbDeviceDialogServerStatus::StatusFlags HbDeviceDialogServerStatusPrivate::get()
+{
+    TInt status = HbDeviceDialogServerStatus::NoFlags;
+    if (!mIsSetter) {
+        mProperty.Get(PropertyCategoryUid, StatusKey, status);
+    } else {
+        status = mSetValue;
+    }
+    return static_cast<HbDeviceDialogServerStatus::StatusFlags>(status);
+}
+
+// Set (write) status
+void HbDeviceDialogServerStatusPrivate::set(HbDeviceDialogServerStatus::StatusFlags status)
+{
+    if (mIsSetter && status != mSetValue) {
+        mSetValue = status;
+        mProperty.Set(PropertyCategoryUid, StatusKey, status);
+    }
+}
+
+// Start property watch request
+void HbDeviceDialogServerStatusPrivate::start()
+{
+    mProperty.Subscribe(iStatus);
+    SetActive();
+}
+
+// Property value has changed
+void HbDeviceDialogServerStatusPrivate::RunL()
+{
+    TInt completionCode = iStatus.Int();
+    if (completionCode != KErrCancel) {
+        start();
+    }
+    if (completionCode == KErrNone) {
+        emit p->statusChanged();
+    }
+}
+
+// Cancel property subscribe
+void HbDeviceDialogServerStatusPrivate::DoCancel()
+{
+    mProperty.Cancel();
+}
+
+HbDeviceDialogServerStatus::HbDeviceDialogServerStatus(bool isServer, QObject *parent) :
+    QObject(parent)
+{
+    d = new HbDeviceDialogServerStatusPrivate(isServer, this);
+}
+
+HbDeviceDialogServerStatus::~HbDeviceDialogServerStatus()
+{
+    delete d;
+}
+
+// Set (write) status
+void HbDeviceDialogServerStatus::setStatus(StatusFlags status)
+{
+    d->set(status);
+}
+
+// Get (read) status
+HbDeviceDialogServerStatus::StatusFlags HbDeviceDialogServerStatus::status()
+{
+    return d->get();
+}
+
+// Enable status monitoring and change signaling
+void HbDeviceDialogServerStatus::enableMonitoring(bool enable)
+{
+    if (d->mEnableMonitoring != enable) {
+        d->mEnableMonitoring = enable;
+        if (d->mEnableMonitoring) {
+            d->start();
+        } else {
+            d->Cancel();
+        }
+    }
+}
+
+// Verify that device dialog server is running
+bool HbDeviceDialogServerStatus::isRunning()
+{
+    // Check if device dialog process exists. Assumes that if process exists,
+    // the server is running properly.
+    _LIT(KName, "hbdevicedialogappserver");
+    RProcess process;
+    bool exists = process.Open(KName) == KErrNone;
+    process.Close();
+    return exists;
+}